1

我试图找出一个特定的点是否在一条线上。我试过的是 . 我找到线的斜率。然后我找到具有线初始坐标的点的斜率,比如 x1 和 y1。如果两个斜率相等,那么点就在线上。但是因为我使用双精度甚至浮点数,我得到的值有五个小数位,斜率永远不相等。代码如下。

line.slope == (yTouch-line.yTouch1)/(xTouch-line.xTouch1)

嗨,我无法添加评论。你能告诉我什么是错误增量

4

2 回答 2

1

假设待测点坐标为(x,y)

如果您知道方程式(例如 y=mx+c),那么只需将 x 和 y 代入并检查是否相等。例如在 y=2x-5 上是 (3,1) 吗?

1 = 2(3)-5 = 1 所以就行了

如果您不知道方程式但有两个点 (x1,y1) 和 (x2,y2),则首先计算斜率 m= (y2-y1)/(x2-x1),然后使用 y-y1=m (x-x1) 形式的直线方程并再次检查是否相等。

例如,点 (4,4) 是在 (2,3) 和 (5,4) 线上吗?

m=(4-3)/(5-2)=1/3

方程是 y-3=(1/3)(x-2)

和....好吧不是

或者,只需让您所在国家/地区的 14 岁儿童向您解释。根据我的经验,14 岁的孩子(认为他们)什么都知道!

于 2013-08-05T15:05:15.047 回答
0

嘿,用几何术语,如果你的点是 (x1, y1) 和 (x2, y2),并且你想找到距离点 2 n 个单位的点 (x3, y3):

d = sqrt((x2-x1)^2 + (y2 - y1)^2) #distance
r = n / d #segment ratio

x3 = r * x2 + (1 - r) * x1 #find point that divides the segment
y3 = r * y2 + (1 - r) * y1 #into the ratio (1-r):r

这是链接!这是解决方案

public static void checkForLineInaPoint(Double x1, Double y1, Double x2, Double y2)
{
    Double m = getSlope(x1,y1,x2,y2);
    Double c = getConstant(x1,y1,x2,y2,m);
    Double x3= new Double(10.001);
    Double y3= new Double(10.001);
    if(checkPointLiesonLine(x3,y3,m,c))
        System.out.print("Yes");
    else
        System.out.print("No");
}

private static boolean checkPointLiesonLine(Double x3, Double y3, Double m, Double c)
{
    Double temp = m*x3+c;
    return temp.compareTo(y3)==0;
}

private static Double getConstant(Double x1, Double y1, Double x2, Double y2, Double m)
{       
    return y1-m*x1;
}

private static Double getSlope(Double x1, Double y1, Double x2, Double y2)
{
    return (y2-y1)/(x2-x1);
}
于 2013-08-05T14:01:47.357 回答