8. 自由曲線 曲面. 概論. ベジエ曲線 曲面. ベジエ曲線 曲面の数学. OeGLによる実行. URS. スプライン関数. スプライン曲線 曲面. URS 曲線 曲面 4. OeGLによる実行
8. 自由曲線と曲面の概要 陽関数 陰関数 f x f x x y y y f f x y z g x y z パラメータ表現された 次元曲線 パラメータ表現は xyx 毎のパラメータによる陽関数表現 形状普遍性 座標独立性 曲線上の点を直接に計算可能 多価の曲線も表現可能 gx 低次の多項式は 計算と操作が容易な関数 z y y z z x x 曲線は短い区間で定義された低次 ( 次 ) の多項式を結合して表現される
8. 自由曲線と曲面の概要 次曲線 : 次方程式で表現される ( 円錐曲線 ) 円 楕円 双曲線 放物線 次曲面 : 次方程式で表現される曲面 球面 円柱面 円錐面 放物面 双曲面 双曲放物面 通常の多項式による曲線は 次曲面を厳密に表現できない 次曲面は 互いに中心投影の関係にある 次曲線に対してアフィン変換を行い その後に射影変換 ( 中心投影 ) を行い 任意の 次曲面を求める 次曲面を厳密に表現する有利多項式 ファーガソンの曲線セグメントと曲面パッチ クーンズのクーンズ曲面パッチ ベジエのバーンスタイン基底関数を用いたベジエ曲線セグメントとベジエ曲面パッチ
8. 自由曲線と曲面の概要 曲線セグメントと曲面パッチの連続性 接線までの連続性で 高次の連続性は困難 リーゼンフェルト スプライン基底関数を用いた スプライン曲線セグメントと スプライン曲面パッチを考案 ベジエ曲線セグメントやベジエ曲面パッチと同様に 位置ベクトルのみで生成でき 接続において高次の連続性が表現できた 次曲線や 次曲面の厳密な表現は出来ない スプライン曲線セグメントと スプライン曲面パッチを有理化する URS 曲線 URS 曲面 OeGL ベジエ曲線と曲面 URS 曲線と曲面
8. 自由曲線と曲面の概要 ファーガソン曲線この曲線は始点位置 終点位置と それらに対する接線ベクトルの 4 つのパラメータにより表現できる 次曲線曲線のうねりは 接線ベクトルの大きさで制御し 接線ベクトルを大きくすれば大きくうねり 小さければ 与えた端点間を短い経路で結ぶ 次曲線の方程式は y = ax +bx +cx+d と表現できる しかし 座標関数では ひとつの y 値に対し複数の x が求まる可能性がある そこで 座標位置を として 時間 の関数として表わす すると前式は () = a +b +c+d (= ) ---[] と表現できる 時間の関数にすることで その経路を一筆書きでなぞるような表現になり ある時間 が経過後の位置は必ず一意に求められるようになる
8. ベジエ曲線と曲面 ベジエ曲線と曲面の数学 8. 8. 8. e e 8.5 8.4 e e
8. ベジエ曲線と曲面 ベジエ曲線と曲面の数学 8.7 8.6 X X X X X X X X e e 8.9 8.8 ベジエ曲線の重み付け関数であるバーンスタイン多項式 = では () のみ でないため曲線は を補完する = では () のみ でないため曲線は 4 を補完する
8. ベジエ曲線と曲面 ベジエ曲線と曲面の数学 8. 8. 8. 8.
8. ベジエ曲線と曲面 ベジエ曲線と曲面の数学
8. ベジエ曲線と曲面 OeGL によるベジエ曲線の生成と表示. ベジエ曲線のパラメータ の範囲と制御点群の座標値を関数 glaf() に与え. 関数 glealcoordf() でベジエ曲線上のパラメータ に対応する点の座標値が作成され 表示される glealcoordf() は 与えられた頂点座標値を表示する glverex() と同様の機能がある glealcoordf() は 頂点の座標値を与える関数 glverex() と同様に 頂点リストを作成する関数 gleg() と関数 gled() の間で呼出す OeGL によるベジエ曲面の生成と表示. ベジエ曲面のパラメータ のそれぞれの範囲と制御点群 ( 曲面定義ネット ) の座標値を関数 glaf() に与え. 関数 glealcoordf() でベジエ曲面上ののパラメータ 対応する点の座標値が作成され 表示される glealcoordf() は 与えられた頂点座標値を表示する glverex() と同様の機能がある glealcoordf() は 頂点の座標値を与える関数 glverex() と同様に 頂点リストを作成する関数 gleg() と関数 gled() の間で呼出す
8. ベジエ曲線と曲面 ベジエ曲面のシャーディング. 照明の属性や局面の材質を定義し. 曲線の法線ベクトルの計算方法やシェーディングの方法を設定する. 関数 glaf() とglEalesh() によっても同様にベジエ曲面の表示が可能 /* ezer cres geerae ad dslay 8- */ GLfloa corolos[4][]={{-4. -4..} {-. 4..}{. 4..}{4. -4..}}; glaf(gl_a_vertex_.. 4 &corolos[][]); gleable(gl_a_vertex_); gleg(gl_lie_stroi); for(=; <=; ++){ glealcoodf((glfloa)(/.)); } gled();
8. ベジエ曲線と曲面 ベジエ曲面のシャーディング. 照明の属性や局面の材質を定義し. 曲線の法線ベクトルの計算方法やシェーディングの方法を設定する. 関数 glaf() と glealesh() によっても同様にベジエ曲面の表示が可能 /* ezer cres geerae ad dslay 8- */ glaf(gl_a_vertex_ 4 4 &corolos[][][]); gleable(gl_a_vertex_); gleable(gl_auto_oral); glagrdf(8.. 8..); glealesh(fl_fill 8 8); /* ezer cres geerae ad dslay 8- */ for(=o; <=8; ++){ gleg(gl_lie_stri); for(=; <=; ++){ glealcoodf((glfloa)(/.) (GLfloa)(/8.))); } gled(); gleg(gl_lie_stri); for(=; <=; ++){ glealcoodf((glfloa)(/.) (GLfloa)(/8.))); } gled();
8. URA スプライン関数 制御点群を多項式で近似する場合 長い区間を つの高次多項式で近似すると 近似は良くなるが 安定性が低下し 扱う係数が増える 複数の短い区間位分け つの短い区間を低次の多項式で近似する スプライン曲線と曲面 + 個の制御点ベクトル と スプライン関数 J () から形成される 階数 次数 - の スプライン曲線 () は 次式で表される -+ 個の スプライン曲線セグメントで構成される 8.4 ; 8.5 oe oherwse 8.6 ;
8. URA スプライン曲線と曲面 スプラインは + 個の制御点の列 ( ) を - 個の 次多項式曲線セグメントから構成される曲線で近似する = は特殊な例でただ つの曲線セグメント が存在し から までの 4 つの制御点により < 4 の区間で定義される 4 となるそれぞれの に対して パラメータ における - と の間の接続点 ( ノット ) が存在する と + における始点と終点もノットと呼ばれ 合計 - 個のノットが存在する 4 5 6 7 8 9 8.8
8. URA スプライン曲線と曲面 格子状に与えられた制御点ベクトル とそれぞれの階数が K と L の スプライン関数 K () L () によって生成される スプライン曲面パッチ () は次式で与えられる 8.9 K スプライン曲面は 局所的な制御点ベクトルによってのみ定義されているため 制御点ベクトルの変更の曲面形状への影響が局所的に限定される L K K K o L L L 8.
8. URA URA 曲線と曲面 スプライン関数を用いた有理多項式による曲線式と曲面式が考案されている スプライン曲線は 制御点 に付随する重み w を導入して次式で表す有理 スプライン間曲面は 制御点 に付随する重み w を導入して次式で表す 8. w w 8. L K w w L K L K
8. URA OeGL エバリュエータ曲線や曲面を発生させるための多項式や有理多項式を計算し 表示する GLU 関数 URA 曲線 曲面の生成と表示は GLU 関数群として構築されている 生成 表示の手順. glewrbsrederer() により URS ポインタ he rbacre を得る. glrbsoery() により URS 曲線の属性や表示方法を定義する. URS ポインタと 配列 kos に設定されたノットベクトルと配列 corolos に設定された制御点群の座標値を関数 glrbscre() に与えて 生成と表示を行う 4. 関数 glrbscre() は 関数 glegcre() と関数 gledcre() の間で呼出す