開曲面に関する陰線処理プログラム
最大値・最小値の問題のところでも検討した、以下の関数の3D描画図を作ること
を考えましょう。
Z=F(X、Y)=SINX SINY SIN(X+Y)
最初は、陰線処理を行いません。 回転変換や投影については、 球の3D描画の
プログラムとまったく同じものになります( 図1参照)。 この図において、 XとYの範
囲は−240度から240度までです。
<θ=45度、φ=45度の方向から見た場合>
(図1、十進BASICによる3Dグラフィックス)
何十万円もする市販のソフトやフリーソフトも含めて、 3Dグラフィックスと言っても
技術的にはそれほどレベルが高いことをやっている訳ではありません(勿論、使い
勝手を良くするための機能は充実しているが )。 時間と意欲がある方は自分専用
のソフト(またはプログラム)を作って見てください。 通常は ブラックボックスになっ
ているコードを自由に修正して、ソフトを改善できる所がミソです。 その過程で数学
やプログラミングの能力を大幅に上げることができます。最近、音声認識とデータ
ベース(人工知能と呼ぶには、レベルが低い)をミックスしたアプリも増えて来てい
ます。人間がソフトに使われないようにするためにも、若い方はプログラミングをど
んどん勉強するべきです。話が少し横に逸れたので元に戻します。
開曲面の陰線処理の検討をする前に、 いくつかの関数を3D描画してみましょう。
図2は図1をY=X上でカットしたものです。関数が最大値を取る点もある程度見易
くなっています。
<θ=135度、φ=45度の方向から見た場合>
(図2、十進BASICによる3Dグラフィックス)
図3は、以下の関数を3D描画したものです。物理の問題でもよく出てくる関数の一
つです。この式の中で、AとBは定数です。
Z=F(X、Y)=A EXP(−X2−Y2)/ B
<θ=45度、φ=30度の方向から見た場合>
(図3、十進BASICによる3Dグラフィックス)
図4は、鞍状曲面を3D描画したものです。 原点ではX方向に関して極小値を取り
、Y方向に関して極大値を取ります。この曲面を表す関数は、
Z=F(X、Y)=A (X2−Y2)
です。ここで、Aは定数です。
<θ=30度、φ=30度の方向から見た場合>
(図4、十進BASICによる3Dグラフィックス)
この鞍状曲面を例にとって、開曲面の陰線処理の方法を検討してみましょう。曲面
を構成している各点と視点を結ぶ線分を考えるのは、 ドーナツ形状や楕円体の陰
線処理と同じです。 ただし、 見える点と見えない点を区別する判断基準は以下の
ようになります。
線分が曲面を貫くときの前後の点で、(F(X1、Y1)−Z1)(F(X2、Y2)−Z2
)の符号が変わるので、この符号の変化が一回でも起これば見えない点に分
類する(陰線処理をする)
上の説明で、F(X、Y)は曲面上の点を表し、Z(XとYの関数)は線分上の点を表し
ています。この方法で陰線処理した結果を以下に示します(図5参照)。
<θ=80度、φ=100度の方向から見た場合>
(図5、十進BASICによる3Dグラフィックス)
曲面を見る角度によっては、手前側の曲面の縁近辺で陰線処理がうまく行かない
場合があります(特に、後ろの曲面と重なっている部分)。そのときには、線分の分
割数を増やしてみてください。多少は改善されると思います。
別な角度から見た図も示して置きます(図6参照)。
<θ=70度、φ=70度の方向から見た場合>
(図6、十進BASICによる3Dグラフィックス)
課題(その1)
開曲面の表と裏で色を変えてください。表と裏を区別するアルゴリズムはどうなりま
すか。
以上で示した図は、 X軸とY軸をZ軸と同等として描画しています。 つまり、それら
のスケールの見かけ上の関係から、θとφの方向を決めています。 X軸、 Y軸そ
してZ軸ともに長さの同じ単位を持つ図とは、若干意味合いが違います。