判断某一点处于有向线段左右侧
这里我们使用矢量来进行判断:
定义:平面上三点A(x1,y1),B(x2,y2),C(x3,y3)组成的面积(含正负,取绝对值为面积)是:
S(A,B,C) = [ (x1-x3) * (y2-y3) - (y1 -y3)* (x2-x3) ]
那么,当ABC逆时针顺序时S为正的,顺时针则S为负值。
所以,
对于有向线段AB和点C
如果S(A,B,C)为正数,则C在有向线段AB的左侧;
如果S(A,B,C)为负数,则C在有向线段AB的右侧;
如果S(A,B,C)为0,则C在直线AB上。
点关于直线的距离、垂足、对称点公式
已知点p(x0,y0),直线方程为Ax+By+C=0;
- 点到直线的距离d
d = ( A*x0 + B*y0 +C ) / sqrt( A*A + B*B);
这个距离有符号之分,表示点处于直线的上下方,绝对值表示欧氏距离。 - 点到直线上的垂足(x,y)
对于方程 :
(1) Ax + By +C =0
(2) (y - y0) / (x - x0) = B / A 联合求解:
x = ( B*B*x0 - A*B*y0 - A*C )/ (A*A + B*B);
y = (-A*B*x0 + A*A*y0 - B*C) /(A*A + B*B )