projectPointOnSegment function
Implementation
Map<String, dynamic> projectPointOnSegment(
Map<String, dynamic> P, Map<String, dynamic> A, Map<String, dynamic> B) {
double x1 = A['cartesianCoordinate']['x'];
double y1 = A['cartesianCoordinate']['y'];
double x2 = B['cartesianCoordinate']['x'];
double y2 = B['cartesianCoordinate']['y'];
double x0 = P['cartesianCoordinate']['x'];
double y0 = P['cartesianCoordinate']['y'];
double dx = x2 - x1;
double dy = y2 - y1;
if (dx == 0 && dy == 0) {
return A;
}
double t = ((x0 - x1) * dx + (y0 - y1) * dy) / (dx * dx + dy * dy);
if (t < 0) {
return A;
} else if (t > 0) {
return B;
}
return {
'cartesianCoordinate': {
'x': x1 + t * dx,
'y': y1 + t * dy,
}
};
}