求两条直线交点的正确姿势
- 在白书上看到的,但没有找到解释,于是记录一下.
- 如果两条直线是用线上一点+方向向量的方式表示的话,可以这样求直线交点(假定存在):
v2 interpoint(Line a,Line b)
{
v2 u=a.P-b.P;
double t=(b.v*u)/(a.v*b.v);
return a.P+a.v*t;
}
- 这里 (P) 是直线上一点, (v) 是方向向量, (*) 定义为向量叉乘.
- 怎么理解呢?看这张图:
- 叉积是两向量围成三角形面积的两倍,那么 (t) 就是两个三角形面积之比,有一条底边长度相同,为 (|v_2|).那么 (t) 也等于高之比,即图中 (h_1 : h_2) .图中两条垂线是平行的,那么由相似知识可知 (t=AE : |v_1|). 那么交点 (E) 的坐标就可以用上面式子算出了.