确定一个点是否在一条线上

时间:2013-08-05 13:47:14

标签: java android

我试图找出一个特定的点是否在一条线上。我试过的是。我找到了线的斜率。然后我找到了线的斜率,用线的初始坐标,比如x1和y1。如果两个斜率都相等,则该点位于该线上。但是因为我使用double或者甚至是浮点数,所以我得到五位小数的值,并且斜率永远不会相等。代码如下。

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

您好我无法添加评论。您能告诉我什么是错误delta

2 个答案:

答案 0 :(得分: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)形式的线的方程式并再次检查相等。

e.g。是通过(2,3)和(5,4)?

的直线上的点(4,4)

M =(4-3)/(5-2)= 1/3'/ P>

该等式是y-3 =(1/3)(x-2)

和....好吧它不是

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

答案 1 :(得分: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

这是link! 这是解决方案

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);
}