皆さん、こんにちは。システム商品開発グループの入澤です。
今冬は日本海側で寒波が襲来して、北陸らしい雪景色の中で過ごしておりました。ここ最近は寒さが緩んで雪解けが進んでいます。
さて、ブログタイトルにもある通りプログラマーの仕事で頻繁に出くわす高校数学のお話をもう少し続けてみたいと思います。前回「直線」を取り上げたときに、グラフィクスに関わるなら手足のように扱えなければならないと書きました。今回はもう一歩進んで「三角形」と「円」を見てみます。義務教育から嫌というほど関わってきたこれらもプログラマーにとって「直線」と同じく向き合わなければならない対象です。とくにグラフィクスでは、点の集まり、多角形(クローズパス)、連続線分(オープンパス)などベクタ形式のパスを計算する上で三角形と円の性質を多く使います。
前提として、3つの頂点で与えられる三角形を考える場合がほとんどですから、、、 の座標を順番に与えておきます(今回も平面で考えます)。ここからまずは三角形の符号付き面積を計算してみましょう。三角形の頂点が時計回りか反時計回りかを判断できるので符号付きにします。方法はいくつもありますが、外積の性質(2つのベクトルの外積の成分はベクトルを平行移動して作る平行四辺形の面積に等しい)を使うと次の式が簡便です。
... Eq.1
絶対値 を計算することで面積が得られ、ゼロと比べることで3つの頂点の関係性が分かります。
- : 3つの頂点を → → で辿ると時計回りの順番になる(右手系)
- : 3つの頂点が一直線上に並んでいる
- : 3つの頂点は反時計回りの順番になる
少し具体的な応用を見てみると、多角形の符号付き面積、多角形の重心(幾何中心)、多角形の凸性判定などを計算するときに、多角形の頂点を辿りながら三角形のこの性質を上手く組み合わせて求めるのが常套手段です。
さて、Eq.1をよく見てみると行列式を使って次のようにも表せます。
... Eq.2
2×2の行列式が行ベクトルで張られる平行四辺形の面積(3×3の行列式が行ベクトルで張られる平行六面体の体積)であるという幾何学的な意味から関係性をとらえることもできますし、行ベクトル(転置すれば列ベクトル)が線形独立か線形従属かを判定する式と見なすこともできます。まあ、わざわざ行列式で書いたのには訳がありまして、円が絡むときも登場するからです。





