求兩條直線交點的正確姿勢
- 在白書上看到的,但沒有找到解釋,於是記錄一下.
- 如果兩條直線是用線上一點+方向向量的方式表示的話,可以這樣求直線交點(假定存在):
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\) 的坐標就可以用上面式子算出了.
