我试图找出一个特定的点是否在一条线上。我试过的是。我找到了线的斜率。然后我找到了线的斜率,用线的初始坐标,比如x1和y1。如果两个斜率都相等,则该点位于该线上。但是因为我使用double或者甚至是浮点数,所以我得到五位小数的值,并且斜率永远不会相等。代码如下。
line.slope == (yTouch-line.yTouch1)/(xTouch-line.xTouch1)
您好我无法添加评论。您能告诉我什么是错误delta
答案 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);
}