Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/math/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 近线点敷设_Math_Geometry_Line_Point - Fatal编程技术网

Math 近线点敷设

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之间 点到直线的正交投影是计算几何中的一种标准基本操作。

我有3个点和它们的坐标。这两条线之间有一条线,我想知道第三点是否在创建这条线的人之间,是否在这条线附近。图1显示了我可以使用公式来确定点是否共线的情况。在图2中,A和B之间有一条直线。我想检查范围内的点,比如说15px,发现点C在A和B之间,靠近直线,忽略点D,因为它远离直线


执行点
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是否介于AB之间,您可以计算
    (向量(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