8 自由曲線・曲面 - shonan-it.ac.jp...8.1 自由曲線と曲面の概要 陽関数 陰関数...

17
. 自由曲線・曲面 1. 概論 2. ベジエ曲線・曲面 1. ベジエ曲線・曲面の数学 2. OpenGLによる実行 3. NURBS 1. スプライン関数 2. Bスプライン曲線・曲面 3. NURBS曲線・曲面 4. OpenGLによる実行

Transcript of 8 自由曲線・曲面 - shonan-it.ac.jp...8.1 自由曲線と曲面の概要 陽関数 陰関数...

Page 1: 8 自由曲線・曲面 - shonan-it.ac.jp...8.1 自由曲線と曲面の概要 陽関数 陰関数 パラメータ表現された3次元曲線 パラメータ表現は,x,y,x毎のパラメータによる陽関数表現

8. 自由曲線・曲面

1. 概論

2. ベジエ曲線・曲面

1. ベジエ曲線・曲面の数学

2. OpenGLによる実行

3. NURBS1. スプライン関数

2. Bスプライン曲線・曲面

3. NURBS曲線・曲面

4. OpenGLによる実行

Page 2: 8 自由曲線・曲面 - shonan-it.ac.jp...8.1 自由曲線と曲面の概要 陽関数 陰関数 パラメータ表現された3次元曲線 パラメータ表現は,x,y,x毎のパラメータによる陽関数表現

8.1 自由曲線と曲面の概要

陽関数

陰関数

パラメータ表現された3次元曲線

パラメータ表現は,x,y,x毎のパラメータによる陽関数表現

形状普遍性・座標独立性

曲線上の点を直接に計算可能

多価の曲線も表現可能

低次の多項式は,計算と操作が容易な関数

曲線は短い区間で定義された低次(3次)の多項式を結合して表現される

xfy xgzxfy ,

0, yxf 0,,,0,, zyxgzyxf

tzztyytxx ,,

Page 3: 8 自由曲線・曲面 - shonan-it.ac.jp...8.1 自由曲線と曲面の概要 陽関数 陰関数 パラメータ表現された3次元曲線 パラメータ表現は,x,y,x毎のパラメータによる陽関数表現

8.1 自由曲線と曲面の概要

2次曲線:2次方程式で表現される(円錐曲線) 円,楕円,双曲線,放物線

2次曲面:2次方程式で表現される曲面 球面,円柱面,円錐面,放物面,双曲面,双曲放物面

通常の多項式による曲線は,2次曲面を厳密に表現できない

2次曲面は,互いに中心投影の関係にある

2次曲線に対してアフィン変換を行い,その後に射影変換(中心投影)を行い,任意の2次曲面を求める

2次曲面を厳密に表現する有利多項式

ファーガソンの曲線セグメントと曲面パッチ

クーンズのクーンズ曲面パッチ

ベジエのバーンスタイン基底関数を用いたベジエ曲線セグメントとベジエ曲面パッチ

Page 4: 8 自由曲線・曲面 - shonan-it.ac.jp...8.1 自由曲線と曲面の概要 陽関数 陰関数 パラメータ表現された3次元曲線 パラメータ表現は,x,y,x毎のパラメータによる陽関数表現

8.1 自由曲線と曲面の概要

曲線セグメントと曲面パッチの連続性

接線までの連続性で,高次の連続性は困難

リーゼンフェルト

スプライン基底関数を用いたBスプライン曲線セグメントとBスプライン曲面パッチを考案

ベジエ曲線セグメントやベジエ曲面パッチと同様に,位置ベクトルのみで生成でき,接続において高次の連続性が表現できた

2次曲線や2次曲面の厳密な表現は出来ない

Bスプライン曲線セグメントとBスプライン曲面パッチを有理化する NURBS曲線

NURBS曲面

OpenGL ベジエ曲線と曲面

NURBS曲線と曲面

Page 5: 8 自由曲線・曲面 - shonan-it.ac.jp...8.1 自由曲線と曲面の概要 陽関数 陰関数 パラメータ表現された3次元曲線 パラメータ表現は,x,y,x毎のパラメータによる陽関数表現

8.1 自由曲線と曲面の概要

ファーガソン曲線

この曲線は始点位置、終点位置と、それらに対する接線ベクトルの4つのパラメータにより表現できる3次曲線

曲線のう ねりは、接線ベクトルの大きさで制御し,接線ベクトルを大きくすれば大きくうねり、小さければ、

与えた端点間を短い経路で結ぶ

• 3次曲線の方程式は

y = ax3+bx2+cx+dと表現できる。しかし、座標関数では、ひとつの y 値に対し複数の x が求まる可能性がある。そこで、座標

位置を P として、時間 t の関数として表わす。すると前式は

P(t) = at3+bt2+ct+d (t=0 →1) ---[1]と表現できる。

時間の関数にすることで、その経路を一筆書きでなぞるような表現になり、ある時間 t が経過後の位置は

必ず一意に求められるようになる

Page 6: 8 自由曲線・曲面 - shonan-it.ac.jp...8.1 自由曲線と曲面の概要 陽関数 陰関数 パラメータ表現された3次元曲線 パラメータ表現は,x,y,x毎のパラメータによる陽関数表現

8.2 ベジエ曲線と曲面

ベジエ曲線と曲面の数学

1.8

0001010012331122

1

3

2

1

0

23

QQQQ

ttttP

3.81

2.81

111

000

Qp

QQ

Qp

QQ

e

e

5.8

000100

322322

1

4.8

0001010012331122

1

3

2

1

0

23

11

00

1

0

23

QQQQ

pppppppppp

ttt

QQpQQp

QQ

ttttP

e

e

Page 7: 8 自由曲線・曲面 - shonan-it.ac.jp...8.1 自由曲線と曲面の概要 陽関数 陰関数 パラメータ表現された3次元曲線 パラメータ表現は,x,y,x毎のパラメータによる陽関数表現

8.2 ベジエ曲線と曲面

ベジエ曲線と曲面の数学

7.8

23

1

1

211

6.8

33

22

21

20

1

1

0

0

3210

tppttX

tpttXtpttX

tpttX

QQQQ

tXtXtXtXtPe

e

9.8101

8.8

,

0,

tttjn

tB

QtBtP

jjnnj

n

jjnj

ベジエ曲線の重み付け関数であるバーンスタイン多項式t=0ではB0,3(t)のみ0でないため曲線はQ0を補完するt=1ではB3,3(t)のみ0でないため曲線はQ4を補完する

Page 8: 8 自由曲線・曲面 - shonan-it.ac.jp...8.1 自由曲線と曲面の概要 陽関数 陰関数 パラメータ表現された3次元曲線 パラメータ表現は,x,y,x毎のパラメータによる陽関数表現

8.2 ベジエ曲線と曲面

ベジエ曲線と曲面の数学

12.81

11.81

10.8,

,

,

0 0,,

jjnnj

iinmi

m

i

n

jijnjmi

vvjn

vB

uuim

uB

QvBuBvuP

13.8,

,

,1

,0

10

11110

00100

,,1,0

vB

vBvB

QQQ

QQQQQQ

uBuBuBvuP

nn

n

n

mnmm

n

n

mmmm

Page 9: 8 自由曲線・曲面 - shonan-it.ac.jp...8.1 自由曲線と曲面の概要 陽関数 陰関数 パラメータ表現された3次元曲線 パラメータ表現は,x,y,x毎のパラメータによる陽関数表現

8.2 ベジエ曲線と曲面

ベジエ曲線と曲面の数学

Page 10: 8 自由曲線・曲面 - shonan-it.ac.jp...8.1 自由曲線と曲面の概要 陽関数 陰関数 パラメータ表現された3次元曲線 パラメータ表現は,x,y,x毎のパラメータによる陽関数表現

8.2 ベジエ曲線と曲面

OpenGLによるベジエ曲線の生成と表示

1. ベジエ曲線のパラメータtの範囲と制御点群の座標値を関数glMap1f()に与え

2. 関数glEvalCoord1f()でベジエ曲線上のパラメータtに対応する点の座標値が作成され,表示される

• glEvalCoord1f()は,与えられた頂点座標値を表示するglVertex()と同様の機能がある

• glEvalCoord1f()は,頂点の座標値を与える関数glVertex()と同様に,頂点リストを作成する関数glBegin()と関数glEnd()の間で呼出す

OpenGLによるベジエ曲面の生成と表示

1. ベジエ曲面のパラメータu,vのそれぞれの範囲と制御点群(曲面定義ネット)の座標値を関数glMap2f()に与え

2. 関数glEvalCoord2f()でベジエ曲面上ののパラメータu,vn対応する点の座標値が作成され,表示される

glEvalCoord2f()は,与えられた頂点座標値を表示するglVertex()と同様の機能がある

glEvalCoord2f()は,頂点の座標値を与える関数glVertex()と同様に,頂点リストを作成する関数glBegin()と関数glEnd()の間で呼出す

Page 11: 8 自由曲線・曲面 - shonan-it.ac.jp...8.1 自由曲線と曲面の概要 陽関数 陰関数 パラメータ表現された3次元曲線 パラメータ表現は,x,y,x毎のパラメータによる陽関数表現

8.2 ベジエ曲線と曲面

ベジエ曲面のシャーディング1. 照明の属性や局面の材質を定義し

2. 曲線の法線ベクトルの計算方法やシェーディングの方法を設定する

3. 関数glMap2f()とglEvalMesh2()によっても同様にベジエ曲面の表示が可能

/* Bezier curves generate and display 8-1 */

GLfloat controlpoints[4][3]={{-4.0, -4.0, 0.0}, {-2.0, 4.0, 0.0},{2.0, 4.0, 0.0},{4.0, -4.0, 0.0}};

glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &controlpoints[0][0]);glEnable(GL_MAP1_VERTEX_3);

glBegin(GL_LINE_STROIP);for(i=0; i<=30; ++1){

glEvalCood1f((GLfloat)(i/30.0));}

glEnd();

Page 12: 8 自由曲線・曲面 - shonan-it.ac.jp...8.1 自由曲線と曲面の概要 陽関数 陰関数 パラメータ表現された3次元曲線 パラメータ表現は,x,y,x毎のパラメータによる陽関数表現

8.2 ベジエ曲線と曲面

ベジエ曲面のシャーディング1. 照明の属性や局面の材質を定義し

2. 曲線の法線ベクトルの計算方法やシェーディングの方法を設定する

3. 関数glMap2f()とglEvalMesh2()によっても同様にベジエ曲面の表示が可能

/* Bezier curves generate and display 8-2 */

glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, &controlpoints[0][0][0]);glEnable(GL_MAP2_VERTEX_3);glEnable(GL_AUTO_NORMAL);glMapGrid2f(8, 0.0, 1.0, 8, 0.0, 1.0);

glEvalMesh2(FL_FILL, 0, 8, 0, 8);

/* Bezier curves generate and display 8-3 */for(j=o; j<=8; j++){

glBegin(GL_LINE_STRIP);for(i=0; i<=30; ++i){

glEvalCood2f((GLfloat)(i/30.0), (GLfloat)(j/8.0)));}

glEnd();glBegin(GL_LINE_STRIP);

for(i=0; i<=30; ++i){glEvalCood2f((GLfloat)(i/30.0), (GLfloat)(j/8.0)));}

glEnd();

Page 13: 8 自由曲線・曲面 - shonan-it.ac.jp...8.1 自由曲線と曲面の概要 陽関数 陰関数 パラメータ表現された3次元曲線 パラメータ表現は,x,y,x毎のパラメータによる陽関数表現

8.3 NURBAスプライン関数

制御点群を多項式で近似する場合,長い区間を1つの高次多項式で近似すると,近似は良くなるが,安定性が低下し,扱う係数が増える

複数の短い区間位分け,1つの短い区間を低次の多項式で近似する

Bスプライン曲線と曲面 n+1 個の制御点ベクトルQ0,Q2,・・・,Qnと,

Bスプライン関数NJ,M(t)から形成される,階数M,次数M-1のBスプライン曲線P(t)は,次式で表される

n-M+2個のBスプライン曲線セグメントで構成される

14.80

,

n

jjMj QtNtP

000,0;

15.80

1

0,1

10,

tNttnoteotherwise

ttttN

jjj

jjj

16.8

;1

1,11

1,1

, tNtttt

tNtt

tttN

M

MjjMj

MjMj

jMj

jMj

Page 14: 8 自由曲線・曲面 - shonan-it.ac.jp...8.1 自由曲線と曲面の概要 陽関数 陰関数 パラメータ表現された3次元曲線 パラメータ表現は,x,y,x毎のパラメータによる陽関数表現

8.3 NURBA Bスプライン曲線と曲面

Bスプラインは,m+1個の制御点の列Q0,Q2,・・・Qm(m≧3)をm-2個の3次多項式曲線セグメントから構成される曲線で近似する

m=3は特殊な例でただ1つの曲線セグメントP3が存在し,Q0からQ3までの4つの制御点によりt3≦t<t4の区間で定義される

m≧4となるそれぞれのiに対して,パラメータtiにおけるPi-1とPiの間の接続点(ノット)が存在する,t3とtm+1における始点と終点もノットと呼ばれ,合計m-1個のノットが存在する

18.8111132

3100009876543210

tttttttttt

Page 15: 8 自由曲線・曲面 - shonan-it.ac.jp...8.1 自由曲線と曲面の概要 陽関数 陰関数 パラメータ表現された3次元曲線 パラメータ表現は,x,y,x毎のパラメータによる陽関数表現

8.3 NURBA Bスプライン曲線と曲面

格子状に与えられた制御点ベクトルQ00,Q01,・・・,Q0n,・・・,Qm0,・・・,Qmnとそれぞれの階数が

KとLのBスプライン関数Ni,K(u),N j,L(v)によって生成され

るBスプライン曲面パッチP(u,v)は次式で与えられる

Bスプライン曲面は,局所的な制御点ベクトルによっての

み定義されているため,制御点ベクトルの変更の曲面形状への影響が局所的に限定される

19.8,0 0

,,

m

i

n

jijLjKi QvNuNvuP

20.8,

,

,1

,

10

11110

00100

,,1,0

vN

vNvN

QQQ

QQQQQQ

uNuNuNvuP

Ln

L

Lo

mnmm

n

n

KmKK

Page 16: 8 自由曲線・曲面 - shonan-it.ac.jp...8.1 自由曲線と曲面の概要 陽関数 陰関数 パラメータ表現された3次元曲線 パラメータ表現は,x,y,x毎のパラメータによる陽関数表現

8.3 NURBANURBA曲線と曲面

Bスプライン関数を用いた有理多項式による曲線式と曲面式が考案されている

Bスプライン曲線は,制御点Qiに付随する重みwjを導入して次式で表す

有理Bスプライン間曲面は,制御点Qijに付随する重みwijを導入して次式で表す

20

21.8

0,

0,

Mnt

wtN

QwtNtP n

jjMj

n

jjjMj

20,20

22.8,

0 0,,

0 0,,

LnvKmu

wvNuN

QwvNuNvuP m

i

n

jijLjKi

m

i

n

jijijLjKi

Page 17: 8 自由曲線・曲面 - shonan-it.ac.jp...8.1 自由曲線と曲面の概要 陽関数 陰関数 パラメータ表現された3次元曲線 パラメータ表現は,x,y,x毎のパラメータによる陽関数表現

8.3 NURBAOpenGL

エバリュエータ

曲線や曲面を発生させるための多項式や有理多項式を計算し,表示する

GLU関数NURBA曲線・曲面の生成と表示は, GLU関数群として構築されている

生成・表示の手順

1. gluNewNurbsRenderer() によりNURBSポインタ the NurbaCurve を得る

2. gluNurbsPoperty() によりNURBS曲線の属性や表示方法を定義する

3. NURBSポインタと,配列knoptsに設定されたノットベクトルと配列controlpointsに設定された制御点群の座標値を関数gluNurbsCurve() に与えて,生成と表示を行う

4. 関数gluNurbsCurve() は,関数gluBeginCurve() と関数gluEndCurve() の間で呼出す