public Point getPointOnSegment(double length, int x1, int y1, int x2, int y2) {
if(length==0) return new Point(x2, y2);
double angle = Math.atan((double)(y2-y1)/(double)(x2-x1));
return new Point((int)((length*Math.cos(angle))+x1), (int)((length*Math.sin(angle))+y1));
}
我发现这个函数应该返回沿着所述线x距离的直线上的一个点。但由于某种原因,它有时会返回一个相反方向的点。如果线的角度大于180度,似乎会发生这种情况。
我现在已经看了5个多小时了,恐怕我已经盯着这个问题了。任何人都可以看到问题是什么,或建议更好的替代它的功能?
答案 0 :(得分:2)
问题是你和你的部门失去了信号。例如,如果两个距离都是负数,那么结果将是正数,因为两者都是正数。
尝试使用方法atan2
计算角度:
angle = Math.atan2((double)(y2-y1), (double)(x2-x1));
此功能在所有情况下都会尊重您的差异迹象,并返回完整时钟的角度。它还处理x2-x1
为零的特殊情况。