夹角
double getAngle2(LineString lineString1, LineString lineString2) {
Point line1Start = lineString1.getStartPoint();
Point line1End = lineString1.getEndPoint();
Point line2Start = lineString2.getStartPoint();
Point line2End = lineString2.getEndPoint();
double dx1 = line1End.getX() - line1Start.getX();
double dy1 = line1End.getY() - line1Start.getY();
double dx2 = line2End.getX() - line2Start.getX();
double dy2 = line2End.getY() - line2Start.getY();
double angle1 = Math.atan2(dy1, dx1);
int angle1Int = (int) (angle1 * 180 / Math.PI);
double angle2 = Math.atan2(dy2, dx2);
int angle2Int = (int) (angle2 * 180 / Math.PI);
if (angle1 * angle2 >= 0) {
int abs = Math.abs(angle1Int - angle2Int);
if (abs > 90) {
return 180 - abs;
}
return abs;
} else {
double angle = Math.abs(angle1Int) + Math.abs(angle2Int);
if (angle > 180) {
angle = 360 - angle;
}
if (angle > 90) {
angle = 180 - angle;
}
return angle;
}
}
double getAngle(LineString lineString1, LineString lineString2) {
double angle1 = Angle.angle(lineString1.getStartPoint().getCoordinate(), lineString1.getEndPoint().getCoordinate());
double angle2 = Angle.angle(lineString2.getStartPoint().getCoordinate(), lineString2.getEndPoint().getCoordinate());
double diff = Angle.diff(angle1, angle2);
if (diff > Angle.PI_OVER_2) {
diff = Math.PI - diff;
}
return Angle.toDegrees(diff);
}
是否是锐角 点积
static double dot(LineString lineString1, LineString lineString2) {
double dx0 = lineString1.getEndPoint().getX() - lineString1.getStartPoint().getX();
double dy0 = lineString1.getEndPoint().getY() - lineString1.getStartPoint().getY();
double dx1 = lineString2.getEndPoint().getX() - lineString2.getStartPoint().getX();
double dy1 = lineString2.getEndPoint().getY() - lineString2.getStartPoint().getY();
return dx0 * dx1 + dy0 * dy1;
}