ドーナツ形状に関する陰線処理プログラム
ドーナツ形状の場合は、球のように単位ベクトル同士の内積値を使って単純に見
えない点と見える点を区別できません。よって、陰線処理をする為の新たな方法を
考えなければなりません。 視点とドーナツ形状そして図形を投影する二次元平面
の関係をもう一度考えてみます(図1参照)。
(図1、Functionviewで作成)
点Aはドーナツ形状の表面にあります。 この点と視点を線分で結んでみます。見え
る点の場合は、この線分がドーナツ形状の内部を通過することはありません。一方
、見えない点は必ずドーナツ内部を通過することになります。この違いを利用して、
陰線処理をすることを考えます。
では、ドーナツ内部を通過するかどうかを判断する具体的な手順を検討してみます
。 球の問題には球座標が適していたように、ドーナツ形状の問題にはトーラス座
標が適していると思われます。ここで、トーラス座標を復習してみましょう(図2参照
)。 ドーナツ表面の点の位置は、 ∠BOC=θと∠DBE=φの二つの角で指定で
きます。OBとBEの長さはR1とR2で与えられます。これらの値は共に定数です。
<青い円はドーナツ形状の中心を通る円>
(図2、Functionviewで作成)
点を判断する手順は以下のようになります。
(1)図1の点Aと視点を結ぶ線分上に等間隔に複数の点を取る
(2)図2の点Oを中心とする点B、点Cを通る円の周上に等間隔に複数の点を
取る
(3)(1)の任意の点に関して(2)のすべての点からの距離を計算する
(4)上記で計算した距離が一つでもR2以下なら内部点であると判断する
(5)点Aを見えない点に分類する(陰線処理をする)
上記の手順を、ドーナツ形状を構成している円周上の点に関して繰り返し行えば、
見える点と見えない点にすべて分類できることになります。精度を上げるためには
、(1)と(2)で取る点の数をできるだけ多くする必要があります。
課題(その1)
閉曲面で覆われた任意の立体図形に関して、 上で説明した線分が内部を通るか
どうかを判断するための手順を考えてください。
以下の図は陰線処理した後のドーナツ形状の3D描画図です(図3参照)。
<θ=45度、φ=45度の方向(球座標)から見た場合>
(図3、十進BASICによる3Dグラフィックス)
線分上の点の数を増やすと計算時間も大幅に増えるようになるので、 ドーナツ形
状の近傍だけで点を取るなど少し工夫してみてください。
別な角度から見た図も示して置きます(図4参照)。
<θ=45度、φ=70度の方向(球座標)から見た場合>
(図4、十進BASICによる3Dグラフィックス)