代数・幾何
概要
- プログラミングで使いそうな代数・幾何の備忘録
- Python および numpy で紹介
三角関数
- 円関数ともいう。
- 円の中の半径と X 軸、円との接点からの垂線で構成される三角形の距離的な関数 (一部の長さや角度が分かれば、その他の長さや角度が分かる)。
- というか、円で考えたほうが三角関数は実は理解しやすい。
- sinθ (サイン; 正弦)
- sinθ=yr
- 半径 (直角三角形の斜めの辺) の長さ r と角度 θ と 高さ y の関係。
- たいていは、半径と角度から、高さを求める時に使う。
- cosθ (コサイン; 余弦)
- cosθ=xr
- 半径 (直角三角形の斜めの辺) の長さ r と角度 θ と幅 x の関係。
- たいていは、半径と角度から、幅を求める時に使う。
- tanθ=yx (タンジェント; 正接)
- 角度 θ と幅 x、高さ y の関係。
- x (幅) と y (高さ) と角度の関係。
- 二次関数の傾きと同じ定義。
内積
- ベクトル同士の積のうちの一つ。
- 結果はスカラーになる。
- ベクトル A と B の内積は、ベクトル B のベクトル A 上の投影したときの距離。
- 結果が 0 の時、2 つのベクトルは垂直に交わる ()。
- 使いどころ
- ベクトル (あるいは、直線を表現したベクトル) が垂直に交わっているかの判定に使う。
- 内積の関係から、2 つのベクトル間 (→u と →v) の角度算出に使う。
cosθ=→u⋅→v‖→u‖‖→v‖θ=arccos(→u⋅→v‖→u‖‖→v‖)
- →u⋅→v: →u と →v の内積
- ‖→u‖: →u のベクトルの大きさ (長さ; スカラー)
- ‖→v‖: →v のベクトルの大きさ (長さ; スカラー)
- ただし、第二象限までしか算出できない (0〜180 度)
- 第二象限以上を算出する場合は、外積を使って、ベクトル →u と →v の関係 (どちらを基準に時計回りか、反時計回りか) を調べて、0〜180 度 (第一、第二象限) と -180〜0 度 (第三、第四象限; 外積の Z 成分が負) として実装する。
- Python での実装
import numpy as np u = np.array([1,0,0]) v = np.array([1,1,0]) cos = np.clip(np.dot(u, v) / (np.linalg.norm(u) * np.linalg.norm(v)), -1.0, 1.0) theta = np.arccos(cos) if np.cross(u, v)[2] < 0: theta *= -1 deg = np.rad2deg(theta) print(deg)
外積
- ベクトル同士の積のうちの一つ。
- 結果はベクトルになる。
- 3 次元ベクトルの外積は、平面に対する法線ベクトルになる。
- 外積の Z 成分が正なのか負なのかによって、ベクトルの関係が分かる (→u と →v の外積で、Z 成分が負の場合、→v は →u の右側 (反時計回り) にある)。
- この関係は右ねじの法則で覚えると良い (2 つのベクトルの回転中心に握った右手を置いた際、指の付け根が外積の最初のベクトル側 (→u)、指先が次のベクトル側 (→v) になり、指の向きが回転方向、親指の向きが Z 成分になる。)。
- 使いどころ
- 平面の法線ベクトルの生成。
- 角度算出の際の第三、第四象限の判定。