利用向量求点到线的最短距离
参考JTS的CGAlgorithms类distancePointLine方法,实现原理是根据向量原理进行计算
利用向量积(叉积)计算三角形的面积和多边形的面积:
向量的数量积和向量积:
(1) 向量的数量积
(1) 向量的向量积
两个向量a和b的叉积(向量积)可以被定义为:
在这里θ表示两向量之间的角夹角(0° ≤ θ ≤ 180°),它位于这两个矢量 所定义的平面上。
向量积的模(长度)可以解释成以a和b为邻边的平行四边形的面积。求三角形ABC的面积,根据向量积的意义,得到:
a=axi+ayj+azk;
b=bxi+byj+bzk;
a×b=(aybz-azby)i+(azbx-axbz)j+(axby-aybx)k,为了帮助记忆,利用三阶行列式,写成:
根据数量积可以判断P点在AB直接或者是A之外还是B之外
如果在AB直接根据叉乘来计算距离
使用向量叉积来求点到直线的距离
向量 p(x, y)
直线上的两点的向量:a(x1, y1), b(x2, y2)
向量 ab = a - b
点 p 到直线 ab 的距离:|p x ab| / |ab|
|p x ab|是 p 和 ab 形成的四边面的面积,那么除以 底边|ab| 就是高,即 p 到 ab 的距离
根据向量表示
向量AP可以表示为(Px-Ax,Py-Ay,0) 向量AB(Bx-Ax,By-Ay,0)则
ax=Px-Ax,ay=Py-Ay,az=0,bx=Bx-Ax,by=By-Ay,bz=0代入公式
S=|axby-aybx|(绝对值)=(Px-Ax)(By-Ay)-(Py-Ay)(Bx-Ax)
AB距离算出L之后,那么点到线距离就是S/L
附录: