我试图找出一个特定的点是否在一条线上。我试过的是 . 我找到线的斜率。然后我找到具有线初始坐标的点的斜率,比如 x1 和 y1。如果两个斜率相等,那么点就在线上。但是因为我使用双精度甚至浮点数,我得到的值有五个小数位,斜率永远不相等。代码如下。
line.slope == (yTouch-line.yTouch1)/(xTouch-line.xTouch1)
嗨,我无法添加评论。你能告诉我什么是错误增量
假设待测点坐标为(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 岁的孩子(认为他们)什么都知道!
嘿,用几何术语,如果你的点是 (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);
}