调试java函数返回点x沿线的距离

时间:2011-09-10 14:58:01

标签: java debugging geometry

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个多小时了,恐怕我已经盯着这个问题了。任何人都可以看到问题是什么,或建议更好的替代它的功能?

1 个答案:

答案 0 :(得分:2)

问题是你和你的部门失去了信号。例如,如果两个距离都是负数,那么结果将是正数,因为两者都是正数。

尝试使用方法atan2计算角度:

angle = Math.atan2((double)(y2-y1), (double)(x2-x1));

此功能在所有情况下都会尊重您的差异迹象,并返回完整时钟的角度。它还处理x2-x1为零的特殊情况。