Java 确定点是否位于直线上的步骤

Java 确定点是否位于直线上的步骤,java,android,Java,Android,我试图找出某一点是否在一条线上。我试过的是。我找到直线的斜率,然后我找到点的斜率和直线的初始坐标,比如x1和y1。如果两个斜率相等,那么点就在直线上。但是因为我使用了double或偶数float,所以我得到的值有五个小数位,斜率永远不相等。代码如下 line.slope == (yTouch-line.yTouch1)/(xTouch-line.xTouch1) 您好,我无法添加注释。您能告诉我什么是错误增量吗, 如果您的点是(x1,y1)和(x2,y2),并且您希望找到距离点2 n个单位的点

我试图找出某一点是否在一条线上。我试过的是。我找到直线的斜率,然后我找到点的斜率和直线的初始坐标,比如x1和y1。如果两个斜率相等,那么点就在直线上。但是因为我使用了double或偶数float,所以我得到的值有五个小数位,斜率永远不相等。代码如下

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

您好,我无法添加注释。您能告诉我什么是错误增量吗, 如果您的点是(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);
}

嘿,用几何术语, 如果您的点是(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);
}

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

如果你知道这个等式(比如y=mx+c),那么就用x和y代入并检查等式。eg(3,1)在y=2x-5上吗

1=2(3)-5=1,因此它在线路上

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

e、 g.点(4,4)是否在穿过(2,3)和(5,4)的直线上

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

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

而且……事实并非如此


或者,在你的国家找一个14岁的孩子给你解释一下。根据我的经验,14岁的孩子(认为他们)什么都知道

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

如果你知道这个等式(比如y=mx+c),那么就用x和y代入并检查等式。eg(3,1)在y=2x-5上吗

1=2(3)-5=1,因此它在线路上

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

e、 g.点(4,4)是否在穿过(2,3)和(5,4)的直线上

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

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

而且……事实并非如此


或者,在你的国家找一个14岁的孩子给你解释一下。根据我的经验,14岁的孩子(认为他们)什么都知道

您需要与误差增量进行比较。您还需要考虑y截距。在现实生活中,两个双精度值永远不会完全相同,您需要定义一些摆动空间。不要只是将它们四舍五入到小数点后的小数位,因为每过一段时间,一个小数位就会出现在“行的一侧”另一个在另一边我想他指的是一个比较的阈值@Akshaybhandary你需要与一个误差增量进行比较。你还需要考虑y截距。在现实生活中,两个双精度值永远不会完全相同,你需要定义一些摆动空间。不要只是将它们四舍五入到小数点后的小数位,因为每过一段时间,一个小数位就会出现在“行的一侧”另一个在另一边我想他指的是一个比较的阈值@Akshaybhandary我不明白这如何帮助OP解决他的问题
,找出某一点是否在一条线上。你能解释一下吗?你有两条线。还有一点要看是否在这条线上。仪式如果你使用fine line.scope(在数学上说'm')。直线方程是y-y1=m(x-x1)
,用上述方程(x,y)中的第三个点代替,如果LHS=RHS,则该直线上的点。否则为假。如果你仍然理解,请点击此链接。并制作一个简单的程序。:->我不明白这如何能帮助OP解决他的问题,找出某一点是否在一条线上。你能解释一下吗?你有两条线。还有一点要看是否在这条线上。仪式如果你使用fine line.scope(在数学上说'm')。直线方程是y-y1=m(x-x1),用上述方程(x,y)中的第三个点代替,如果LHS=RHS,则该直线上的点。否则为假。如果你仍然理解,请点击此链接。并制作一个简单的程序。:->