![]() |
|
Prev
Index
Next |
(Ex. 8) 平均曲率法線ベクトルを算出する
曲線や曲面の幾何学は,微分幾何学と呼ばれる分野に属します.「曲率」とは,ざっくり言ってしまえばカーブの緩急を表す指標です.(厳密な定義となると実は結構やっかいです.) カーブが急なほど曲率は大きくなります.一番分かりやすい例は円です.円の曲率は1/(半径)で与えられます.
では,平均曲率とはなんでしょう.先ほど,「カーブ」という言葉をおもむろに使いましたが,これはいわば曲線のことだと認識してください.3次元空間上に浮かぶ曲線のある1点には「曲率」 という1つの指標が定義できます.次に曲面を考えて見ます.曲線と同様に曲面上のある1点における「曲率」というものを考えた場合,実は無限に存在することになります. なぜなら,曲面上のある1点を通る曲面上の曲線は無限にあるからです.よって単純に曲率というものを定義できません.そこで,2つの指標がポップに使われています.1つがそう,「平均曲率」, もうひとつは「ガウス曲率」と呼ばれています.ここではこれ以上の説明は省略しますが,平均曲率は無限にある曲率の最大値と最小値を足して2で割った値になっています.
「平均曲率法線ベクトル」は法線ベクトルの大きさを平均曲率の値として表現したものになっています.
案ずるよりも産むが安しです.実際に"SampleFunc2.cpp"のSmpMeanCurvature()を実行してみましょう.
<実行手順>
- Kodatunoアプリケーションを起動し, 適当なIGESデータを1つ読み込みます.
- 表示されたBodyから面をピックします.ピックする面の数は1個にしてください.
- "User Status"からMode3を選択し,Prop1にU方向の分割数,Prop2にV方向の分割数を入力します.
- "Sample Func 2"ボタンを押します.
- 選択した面上に平均曲率法線ベクトルが生成されたことを確認してください.
<ソース解説>
今回はMode3を選択し,"Sample Func2"ボタンを押しました.これによってSmpMeanCurvature()が実行されます.
では,SmpMeanCurvature()を見てみましょう.序盤は概ね問題ないと思います.
114行目と116行目は2.6.5 NURBS曲面を指定した分割数で分割した点を生成するで説明した,NURBS曲面構造体NURBSSの変数で, NURBS曲面の存在するパラメータ区間を表すU[2]とV[2]を使って平均曲率法線ベクトルを生成する曲面上の点をU,V方向の分割数から割り出しています.
平均曲率法線ベクトルは118行目のNURBS_Func::CalcMeanCurvatureNormVec()によって算出されます.算出されたベクトルの始点を曲面上の点とするために, 117行目では現在注目中の(u,v)の三次元座標値を算出し,119行目で表示しています.
結果の図を見てもらう,急峻なところではベクトルは長く,なだらかなところでは短くなっているのが分かります. また,上に凸である場合と,下に凸である場合でベクトルの方向が逆になっているのが分かります.
平均曲率法線ベクトルが何の役に立つのかと問われると,回答に困りますが,このような曲面情報をうまく活用することによって,CAM生成アルゴリズムの 一助となる可能性があるわけです.
以上で例題は全て終わりです.次のセクションはこれまでの経験を生かして,簡単なアプリケーションを自分で作ってみる練習問題になっていますので,ぜひお試しください.
Copyright(C) Kodatuno Development Team, 2011 | Last modified: Nov. 11, 2011 |