外積
$ 2本のベクトルに対してベクトルを返す演算。
空間ベクトル$ \vec{a}=(a_0,a_1,a_2), $ \vec{b}=(b_0,b_1,b_2)に対して、長さが$ |\vec{a}||\vec{b}|\sin \thetaで$ \vec{a}と$ \vec{b}に垂直なベクトルを「外積」と呼ぶ。
またその成分表示は$ (a_1b_2-a_2b_1,a_2b_0-a_0b_2,a_0b_1-a_1b_0)である。
ベクトル$ \vec{a},$ \vec{b}が$ xy平面上にあるとき、($ a_2=b_2=0のとき)
成分表示は$ (0,0,a_0b_1-a_1b_0)である。
このとき$ |\vec{a}||\vec{b}|\sin \theta=a_0b_1-a_1b_0が成り立つ。
以降$ \vec{a},$ \vec{b}は$ xy平面上にあるものとして考える。また(実際にはベクトルである)外積を値$ a_0b_1-a_1b_0と同一視する。
ベクトル$ \vec{a},$ \vec{b}のなす角$ \theta=0,\piのとき、$ \sin \theta=0より$ |\vec{a}||\vec{b}|\sin \theta=a_0b_1-a_1b_0=0
$ 0<\theta<\piのとき$ \sin \theta>0より$ |\vec{a}||\vec{b}|\sin \theta=a_0b_1-a_1b_0>0
$ \pi<\theta<2\piのとき$ \sin \theta<0より$ |\vec{a}||\vec{b}|\sin \theta=a_0b_1-a_1b_0<0
以上より外積の符号で$ 3点の位置関係が判別できる。
3点$ O,A,Bについて、始点を原点に合わせるように平行移動したベクトル$ \vec{a},$ \vec{b}について
外積が$ 0のとき$ O,A,Bは同一直線上にある
外積が正のとき$ O,A,Bはこの順に反時計回り
外積が負のとき$ O,A,Bはこの順に時計回り
リファレンス
code: cross_product.py
def cross_product(p0, p1, p2):
"""
外積。p0, p1, p2が同一直線上にあるとき0
この順番で反時計回りにあるとき正
この順番で時計回りにあるとき負
"""
x0, y0 = p0
x1, y1 = p1
x2, y2 = p2
return (x1-x0)*(y2-y0)-(x2-x0)*(y1-y0)