凹型多角形の面積計算プログラム
凹型の多角形の面積を計算するためには、多角形を複数の三角形に分割しなけれ
ばなりません。その後、ヘロンの公式を使って面積を計算することになります。
図1は凹型の多角形の一例です。 角CDEと角GHAが180度より大きく、その他の
角は180度より小さくなっています。 180度より大きい内角があることが凹型の多
角形の条件になります。
<凹型八角形>
(図1、十進BASICによる2Dグラフィックス)
まずは、 180度より大きい内角がどこにあるかを調べる方法を考えます。 図1にお
ける AB X BC とCD X DE を比較してみます。 前者は正の値で、後者が負の値
であることに注意してください(画面に対して垂直な方向の成分。 但し、 画面から出
て来る方向が正)。つまり、外積の値を使えば、内角を分類できることが判ります。
それでは、内角を分類するアルゴリズムから考えてみます。多角形の各頂点にでき
る角が180より小さいか大きいかを判断するものです。 時計方向(または反時計方
向)に頂点を順番に配置したかどうかは、多角形の内部点に関して各辺のベクトル
のモーメントの合計値の正負で区別できます。 内部点の座標は左クリックで取得し
ます。 合計値が負ならば時計回りであり、反対に正ならば反時計回りとなります。こ
の配置の方向によって、 内角を分類するときの外積の値の判断基準が逆になりま
す。
課題(その1)
多角形の内部点であるかどうかを判断するアルゴリズムを考えてください。
図2は上記の方法で凹部を識別し、 面積計算の為の補助線を入れたものです。 こ
れらの補助線は凹型多角形を凸型にする為のものです。凸型多角形の面積を計算
し、 凹部にできた三角形の面積の合計値を引けば、 元の凹型多角形の面積が計
算できることになります。 新たにできた多角形が凹型多角形ならば、同じことを繰り
返す必要があります。引くべき面積の合計値の計算もより複雑になります。
面積(八角形ABCDEFGH)=
面積(六角形ABCEFG)−面積(三角形CED)−面積(三角形GAH)
<凹型八角形、補助線→紫(点線)>
(図2、十進BASICによる2Dグラフィックス)
図3は補助線を入れて凸型多角形にした後、 その面積を計算する為の分割線を入
れたものです。
<凹型八角形、分割線→緑(点線)>
(図3、十進BASICによる2Dグラフィックス)
以下のプログラムは一回の補助線の導入で凸型多角形になる場合のものです(図
2参照)。マインプログラムだけを示します。 外部副プログラムについては、凸型多
角形の面積計算プログラムを参考にして作成してみてください。
上のプログラムを使って図4の凹型多角形の面積を計算すると、6374.875とな
ります。また、新たな凸型多角形の面積は7965.125です。
<凹型八角形、補助線→2本、分割線→3本>
(図4、十進BASICによる2Dグラフィックス)
課題(その2)
一回の補助線導入で面積を計算できない場合についても、 プログラムを作成してく
ださい。
課題(その3)
補助線を使わずに凹型多角形を直接複数の三角形に分割する方法を考えてくださ
い。