Math 近线点敷设
我有3个点和它们的坐标。这两条线之间有一条线,我想知道第三点是否在创建这条线的人之间,是否在这条线附近。图1显示了我可以使用公式来确定点是否共线的情况。在图2中,A和B之间有一条直线。我想检查范围内的点,比如说15px,发现点C在A和B之间,靠近直线,忽略点D,因为它远离直线Math 近线点敷设,math,geometry,line,point,Math,Geometry,Line,Point,我有3个点和它们的坐标。这两条线之间有一条线,我想知道第三点是否在创建这条线的人之间,是否在这条线附近。图1显示了我可以使用公式来确定点是否共线的情况。在图2中,A和B之间有一条直线。我想检查范围内的点,比如说15px,发现点C在A和B之间,靠近直线,忽略点D,因为它远离直线 执行点C到线AB的正交投影,并找到投影点p:最靠近线AB的点C。现在,您需要做的就是使用段CP的长度来确定C与线的距离。并使用P相对于A和B的位置来确定C是否在A和B之间 点到直线的正交投影是计算几何中的一种标准基本操作。
执行点
C
到线AB
的正交投影,并找到投影点p
:最靠近线AB
的点C
。现在,您需要做的就是使用段CP
的长度来确定C
与线的距离。并使用P
相对于A
和B
的位置来确定C
是否在A
和B
之间
点到直线的正交投影是计算几何中的一种标准基本操作。例如,请参见
我会这样做:
AB
的法向量是(By-Ay,-(Bx-Ax))
C
并获得点C'
C'x = Cx + By - Ay
C'y = Cy - Bx + Ax
AB
和行CC'
。交点是投影点P
点C到线段AB的距离是
向量(A,C)
与单位向量(A,B)
的距离
也就是说(在伪代码中)
要确定C是否介于A和B之间,您可以计算(向量(A,C),单位向量(A,B))
,看看它是否小于向量长度(A,B)
(但为正值)。作为计算单位向量(A,B)的一部分,您可以计算向量长度(A,B)
这种方法是计算效率最高的
def vec_length(x,y) = sqrt(x*x + y*y)
def unitvec(ax,ay,bx,by) = (dx/m, dy/m)
where dx = bx - ax
dy = by - ay
m = vec_length(dx,dy)
def dist_segm(cx,cy,ax,ay,ux,uy) = abs( dx*uy - dy*ux )
where dx = cx - ax
dy = cy - ay