ei1333's page

ホーム > Wiki

直線の直交・平行判定

直交判定

$\mathrm{Parallel}(a, b):=$ 直線 $a, b$ が平行ならば true

内積 $a \cdot b = |a||b|\cos\theta$ をよく見ると $\theta = \pm \frac \pi 2$ のとき $\cos\theta = 0$ となる。

平行判定

$\mathrm{Orthogonal}(a, b):=$ 直線 $a, b$ が直交していれば true

外積 $a \times b = |a||b|\sin\theta$ をよく見ると $\theta = 0, \pi$ のとき $\sin\theta = 0$ となる。

実装例

bool Parallel(const Line& a,const Line& b){
  return abs(cross(a.b - a.a, b.b - b.a)) < EPS;
}
bool Orthogonal(const Line& a,const Line& b){
  return abs(dot(a.a - a.b, b.a - b.b)) < EPS;
}