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

调试java函数返回点x沿直线的距离,java,debugging,geometry,Java,Debugging,Geometry,我已经找到了这个函数,它应该返回一条直线上的一个点,沿着这条直线的距离是x。但由于某些原因,它有时返回一个与预期相反方向的点。如果直线的角度大于180度,则似乎会发生这种情况 我已经看了5个多小时了,恐怕我对这个问题视而不见。任何人都能看到问题所在,或者建议一个更好的函数来替代它吗?问题是您的部门没有标记。例如,如果两个距离均为负值,则结果将为正值,就像两个距离均为正值一样 尝试使用以下方法计算角度: 此函数尊重所有情况下差异的符号,并返回完整时钟的角度。它还处理x2-x1为零的特殊情况。首先,

我已经找到了这个函数,它应该返回一条直线上的一个点,沿着这条直线的距离是x。但由于某些原因,它有时返回一个与预期相反方向的点。如果直线的角度大于180度,则似乎会发生这种情况


我已经看了5个多小时了,恐怕我对这个问题视而不见。任何人都能看到问题所在,或者建议一个更好的函数来替代它吗?

问题是您的部门没有标记。例如,如果两个距离均为负值,则结果将为正值,就像两个距离均为正值一样

尝试使用以下方法计算角度:


此函数尊重所有情况下差异的符号,并返回完整时钟的角度。它还处理
x2-x1
为零的特殊情况。

首先,我会尝试将每个表达式分离为单独的局部变量。这将使调试变得更容易…非常感谢。请允许我接受你的回答,然后我会为错过这个而开枪自杀。。。
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));
}
angle = Math.atan2((double)(y2-y1), (double)(x2-x1));