点到直线的距离
点到直线的距离公式
设直线方程为$$Ax+By+C=0$$
点为$$(x_0,y_0)$$
则点到直线的距离为:
$$d = \frac{|Ax_0+By_0+C|}{\sqrt{A^2+B^2}}$$
代码表示为:
1 | double distance(double A, double B, double C, double x0, double y0) { |
向量投影
假设直线的两个端点为$P_1(x_1,y_1)$和$P_2(x_2,y_2)$,点为$P_0(x_0,y_0)$,则点到直线的距离为:
$$d = \frac{|(P_1-P_0) \times (P_2-P_0)|}{|P_1-P_2|}$$
代码表示为:
1 | double distance(double x1, double y1, double x2, double y2, double x0, double y0) { |
点和直线的位置关系
向量叉乘
假设直线的两个端点为$$P_1(x_1,y_1)$$和$$P_2(x_2,y_2)$$,点为$$P_0(x_0,y_0)$$,则点和直线的位置关系为:
$$(P_1-P_0) \times (P_2-P_0)$$
代码表示为:
1 | int position(double x1, double y1, double x2, double y2, double x0, double y0) { |
当该结果返回为0时,说明点直线上,为1时,说明点在直线的左侧,为-1时,说明点在直线的右侧。
该方法的几何意义
- 叉乘的结果是一个标量,绝对值是平行四边形的面积
- 结果的符号表示两个向量之间的旋转方向
- 如果叉乘结果为正,说明$$P_1-P_0$$逆时针旋转到$$P_2-P_0$$,在直线的左侧
- 如果叉乘结果为负,说明$$P_1-P_0$$顺时针旋转到$$P_2-P_0$$,在直线的右侧
- 如果叉乘结果为0,说明$$P_1-P_0$$和$$P_2-P_0$$共线