10 B 3. ( ) (3)

Similar documents
複雑系科学演習1 コンピュータグラフィックス

第3章 OpenGL の基礎

第3章 OpenGL の基礎

untitled

libaux.dvi

( ) 1 1: 1 #include <s t d i o. h> 2 #include <GL/ g l u t. h> 3 #include <math. h> 4 #include <s t d l i b. h> 5 #include <time. h>

謗域・ュ逕ィppt

コンピューターグラフィックスS

Microsoft PowerPoint - 04.pptx

Microsoft PowerPoint - info_eng3_05ppt.pptx

Gmech08.dvi

A

沼津工業高等専門学校

演算増幅器

i

演算増幅器

1.2 y + P (x)y + Q(x)y = 0 (1) y 1 (x), y 2 (x) y 1 (x), y 2 (x) (1) y(x) c 1, c 2 y(x) = c 1 y 1 (x) + c 2 y 2 (x) 3 y 1 (x) y 1 (x) e R P (x)dx y 2

Kageyama (Kobe Univ.) / 36

(3) (2),,. ( 20) ( s200103) 0.7 x C,, x 2 + y 2 + ax = 0 a.. D,. D, y C, C (x, y) (y 0) C m. (2) D y = y(x) (x ± y 0), (x, y) D, m, m = 1., D. (x 2 y

N cos s s cos ψ e e e e 3 3 e e 3 e 3 e

日本内科学会雑誌第102巻第4号

Microsoft PowerPoint - qcomp.ppt [互換モード]

謗域・ュ逕ィppt

第7章 レンダリング

(iii) 0 V, x V, x + 0 = x. 0. (iv) x V, y V, x + y = 0., y x, y = x. (v) 1x = x. (vii) (α + β)x = αx + βx. (viii) (αβ)x = α(βx)., V, C.,,., (1)

第7章 レンダリング

Part () () Γ Part ,

謗域・ュ逕ィppt

WebGL OpenGL GLSL Kageyama (Kobe Univ.) Visualization / 57

Untitled

x () g(x) = f(t) dt f(x), F (x) 3x () g(x) g (x) f(x), F (x) (3) h(x) = x 3x tf(t) dt.9 = {(x, y) ; x, y, x + y } f(x, y) = xy( x y). h (x) f(x), F (x

1. (8) (1) (x + y) + (x + y) = 0 () (x + y ) 5xy = 0 (3) (x y + 3y 3 ) (x 3 + xy ) = 0 (4) x tan y x y + x = 0 (5) x = y + x + y (6) = x + y 1 x y 3 (

1 return main() { main main C 1 戻り値の型 関数名 引数 関数ブロックをあらわす中括弧 main() 関数の定義 int main(void){ printf("hello World!!\n"); return 0; 戻り値 1: main() 2.2 C main

untitled

7. y fx, z gy z gfx dz dx dz dy dy dx. g f a g bf a b fa 7., chain ule Ω, D R n, R m a Ω, f : Ω R m, g : D R l, fω D, b fa, f a g b g f a g f a g bf a

1 1 x y = y(x) y, y,..., y (n) : n y F (x, y, y,..., y (n) ) = 0 n F (x, y, y ) = 0 1 y(x) y y = G(x, y) y, y y + p(x)y = q(x) 1 p(x) q(

PowerPoint Presentation


II A A441 : October 02, 2014 Version : Kawahira, Tomoki TA (Kondo, Hirotaka )

18 I ( ) (1) I-1,I-2,I-3 (2) (3) I-1 ( ) (100 ) θ ϕ θ ϕ m m l l θ ϕ θ ϕ 2 g (1) (2) 0 (3) θ ϕ (4) (3) θ(t) = A 1 cos(ω 1 t + α 1 ) + A 2 cos(ω 2 t + α

.5 z = a + b + c n.6 = a sin t y = b cos t dy d a e e b e + e c e e e + e 3 s36 3 a + y = a, b > b 3 s363.7 y = + 3 y = + 3 s364.8 cos a 3 s365.9 y =,

OpenGL GLSL References Kageyama (Kobe Univ.) Visualization / 58

6kg 1.1m 1.m.1m.1 l λ ϵ λ l + λ l l l dl dl + dλ ϵ dλ dl dl + dλ dl dl 3 1. JIS 1 6kg 1% 66kg 1 13 σ a1 σ m σ a1 σ m σ m σ a1 f f σ a1 σ a1 σ m f 4

Gmech08.dvi

微分積分 サンプルページ この本の定価 判型などは, 以下の URL からご覧いただけます. このサンプルページの内容は, 初版 1 刷発行時のものです.

1990 IMO 1990/1/15 1:00-4:00 1 N N N 1, N 1 N 2, N 2 N 3 N 3 2 x x + 52 = 3 x x , A, B, C 3,, A B, C 2,,,, 7, A, B, C

コンピュータグラフィックスS 演習資料

() x + y + y + x dy dx = 0 () dy + xy = x dx y + x y ( 5) ( s55906) 0.7. (). 5 (). ( 6) ( s6590) 0.8 m n. 0.9 n n A. ( 6) ( s6590) f A (λ) = det(a λi)

note1.dvi

z f(z) f(z) x, y, u, v, r, θ r > 0 z = x + iy, f = u + iv C γ D f(z) f(z) D f(z) f(z) z, Rm z, z 1.1 z = x + iy = re iθ = r (cos θ + i sin θ) z = x iy

£Ã¥×¥í¥°¥é¥ß¥ó¥°(2018) - Âè11²ó – ½ÉÂꣲ¤Î²òÀ⡤±é½¬£² –

DrawArrays DrawElements References Kageyama (Kobe Univ.) Visualization / 34

変 位 変位とは 物体中のある点が変形後に 別の点に異動したときの位置の変化で あり ベクトル量である 変位には 物体の変形の他に剛体運動 剛体変位 が含まれている 剛体変位 P(x, y, z) 平行移動と回転 P! (x + u, y + v, z + w) Q(x + d x, y + dy,

x h = (b a)/n [x i, x i+1 ] = [a+i h, a+ (i + 1) h] A(x i ) A(x i ) = h 2 {f(x i) + f(x i+1 ) = h {f(a + i h) + f(a + (i + 1) h), (2) 2 a b n A(x i )

2 T ax 2 + 2bxy + cy 2 + dx + ey + f = 0 a + b + c > 0 a, b, c A xy ( ) ( ) ( ) ( ) u = u 0 + a cos θ, v = v 0 + b sin θ 0 θ 2π u = u 0 ± a



1 8, : 8.1 1, 2 z = ax + by + c ax by + z c = a b +1 x y z c = 0, (0, 0, c), n = ( a, b, 1). f = n i=1 a ii x 2 i + i<j 2a ij x i x j = ( x, A x), f =

C による数値計算法入門 ( 第 2 版 ) 新装版 サンプルページ この本の定価 判型などは, 以下の URL からご覧いただけます. このサンプルページの内容は, 新装版 1 刷発行時のものです.

[ ] 0.1 lim x 0 e 3x 1 x IC ( 11) ( s114901) 0.2 (1) y = e 2x (x 2 + 1) (2) y = x/(x 2 + 1) 0.3 dx (1) 1 4x 2 (2) e x sin 2xdx (3) sin 2 xdx ( 11) ( s

z f(z) f(z) x, y, u, v, r, θ r > 0 z = x + iy, f = u + iv C γ D f(z) f(z) D f(z) f(z) z, Rm z, z 1.1 z = x + iy = re iθ = r (cos θ + i sin θ) z = x iy

°ÌÁê¿ô³ØII

f(x) = f(x ) + α(x)(x x ) α(x) x = x. x = f (y), x = f (y ) y = f f (y) = f f (y ) + α(f (y))(f (y) f (y )) f (y) = f (y ) + α(f (y)) (y y ) ( (2) ) f

Chap9.dvi

CG

プログラム

M3 x y f(x, y) (= x) (= y) x + y f(x, y) = x + y + *. f(x, y) π y f(x, y) x f(x + x, y) f(x, y) lim x x () f(x,y) x 3 -

i

WebGL Safari WebGL Kageyama (Kobe Univ.) Visualization / 55

29

tnbp59-21_Web:P2/ky132379509610002944

y π π O π x 9 s94.5 y dy dx. y = x + 3 y = x logx + 9 s9.6 z z x, z y. z = xy + y 3 z = sinx y 9 s x dx π x cos xdx 9 s93.8 a, fx = e x ax,. a =

モデリングとは

I, II 1, A = A 4 : 6 = max{ A, } A A 10 10%


I A A441 : April 21, 2014 Version : Kawahira, Tomoki TA (Kondo, Hirotaka ) Google

WebGL Kageyama (Kobe Univ.) Visualization / 39

3D グラフィックス処理の一般過程 1. 3D グラフィックス処理の一般過程

微分方程式 モデリングとシミュレーション

n Y 1 (x),..., Y n (x) 1 W (Y 1 (x),..., Y n (x)) 0 W (Y 1 (x),..., Y n (x)) = Y 1 (x)... Y n (x) Y 1(x)... Y n(x) (x)... Y n (n 1) (x) Y (n 1)

December 28, 2018

日本内科学会雑誌第98巻第4号

日本内科学会雑誌第97巻第7号

85 4

( ) ( ) 30 ( ) 27 [1] p LIFO(last in first out, ) (push) (pup) 1

多次元レーザー分光で探る凝縮分子系の超高速動力学

() n C + n C + n C + + n C n n (3) n C + n C + n C 4 + n C + n C 3 + n C 5 + (5) (6 ) n C + nc + 3 nc n nc n (7 ) n C + nc + 3 nc n nc n (

1 1 sin cos P (primary) S (secondly) 2 P S A sin(ω2πt + α) A ω 1 ω α V T m T m 1 100Hz m 2 36km 500Hz. 36km 1

I A A441 : April 15, 2013 Version : 1.1 I Kawahira, Tomoki TA (Shigehiro, Yoshida )

[ 1] 1 Hello World!! 1 #include <s t d i o. h> 2 3 int main ( ) { 4 5 p r i n t f ( H e l l o World!! \ n ) ; 6 7 return 0 ; 8 } 1:


.3. (x, x = (, u = = 4 (, x x = 4 x, x 0 x = 0 x = 4 x.4. ( z + z = 8 z, z 0 (z, z = (0, 8, (,, (8, 0 3 (0, 8, (,, (8, 0 z = z 4 z (g f(x = g(


1 1.1 ( ). z = a + bi, a, b R 0 a, b 0 a 2 + b 2 0 z = a + bi = ( ) a 2 + b 2 a a 2 + b + b 2 a 2 + b i 2 r = a 2 + b 2 θ cos θ = a a 2 + b 2, sin θ =

II (10 4 ) 1. p (x, y) (a, b) ε(x, y; a, b) 0 f (x, y) f (a, b) A, B (6.5) y = b f (x, b) f (a, b) x a = A + ε(x, b; a, b) x a 2 x a 0 A = f x (


イントロダクション

SO(2)

2000年度『数学展望 I』講義録

0 21 カラー反射率 slope aspect 図 2.9: 復元結果例 2.4 画像生成技術としての計算フォトグラフィ 3 次元情報を復元することにより, 画像生成 ( レンダリング ) に応用することが可能である. 近年, コンピュータにより, カメラで直接得られない画像を生成する技術分野が生

Transcription:

Augus 5, 009

10 B 3. ( ) (3)

( ) 1 OpenGL CG 1 C OpenGL 3 CG 4 OpenGL 1.

1 OpenGL CG

1 C

1.1 I C [1] es.c C es.obj es.exe *.lib *.obj

C 1. C I C #include < > in main( ) { reurn 0; } { reurn ; }

Hellow World 1.3 Hellow World I Hellow World program 1.c #include <sdio.h> in main(void) { prinf("hellow World!\n"); reurn(0); }

C 1.4 C I char (1bye), shor in or shor (bye), in, long in or long (4bye) unsigned char (1bye), unsigned shor in (bye),unsigned in (4bye), unsigned long in (4bye) enum floa (4bye), doubl (8bye), long double ( 80bi)

C program.c #include <sdio.h> in main(void) { in a; floa b; double c; a = 1; b = 1.5; /* 1.5F */ c = 500.4; /* 5.004E */ prinf("a = %d\n", a); prinf("b = %f\n", b); prinf("c = %e\n", c); reurn(0); }

in 1.5 in I program 3.c #include <sdio.h> #include <mah.h> #include <limis.h> #include <floa.h> in main(void) { /* in ( +3767) */ prinf("int_max = %u\n", INT_MAX); /* floa ( 1E+37 ) */ prinf("flt_max = %e\n", FLT_MAX); /* double ( 1E+37 ) */ prinf("dbl_max = %e\n", DBL_MAX); reurn(0); }

1.6 I (#define ) sin program 4.c #include <sdio.h> #include <mah.h> #define PI (3.141596535897933846) double deg_sin(double deg); void func(void); in main(void){ program_4.c }

OpenGL

OpenGL I 3 [, 3, 4] CAD CG UNIX OS Windows Macinosh

GLUT OpenGL.1 OpenGL I GLUT (OpenGL Uiliy Tooli) OpenGL OpenGL OpenGL GLU GL

OpenGL GLUT I GLUT GUI Tooli

program3 1.c. I void gluini(in *argc, char **argv) GLUT main. in glucreaewindow(char *name). name void gludisplayfunc(void (*func)(void)),, func. void glumainloop(void),.

.3 I program3.c void gluinidisplaymode(unsigned in mode) mode GLUT RGBA: RGB (,,, ) GLUT INDEX: ON / OFF void gluiniwindowsie(in w, in h) void gluiniwindowposiion(in x, in y)

void glclearcolor(glclampf R, GLclampf G, GLclampf B, GLclampf A) R G B A,,, α GLclampf (floa ) 0 1 (0, 0, 0), (1, 1, 1) void glclear(glbifield mas) mas ( ) GL COLOR BUFFER BIT: GL DEPTH BUFFER BIT:, glflush(void) OpenGL void glbegin(glnum mode) void glend(void) mode

glbegin( ) mode GL POINTS: GL LINES: GL LINE STRIP: GL LINE LOOP: v0 v0 v0 v v v v3 v3 v3 v1 v1 v1 GL LINES GL LINE STRIP GL LINE LOOP

glbegin( ) mode ( ) GL TRIANGLES / GL QUADS: 3 4 GL TRIANGLE STRIP / GL QUAD STRIP: GL TRIANGLE FAN: GL POLYGON: v5 v0 v3 v4 v v1 GL TRIANGLES v4 v3 v4 v v3 v0 v1 GL TRIANGLE STRIP v4 v3 v0 v v0 v v1 GL TRIANGLE FAN v1 GL POLYGON

void glverexf(glfloa x, GLfloa y) GLfloa (floa ) 3, 4 (x,y,), (x,y,,w) glverex3f (), glverex4f () double glverex?d(), in glverex?i() void glverex??v() void glcolor3f(glfloa r, GLfloa g, GLfloa b) r, g, b,, 0 1 r, g, b, a void glcolor4f( ) double glcolor?d( ), in glcolor?i( )

.4 I program3 3.c in rand(void): 0 RAND MAX srand() rand() RAND MAX in 1.0 0

I (ani-aliasing) glblendfunc(gl SRC ALPHA, GL ONE MINUS SRC ALPHA); glenable(gl BLEND);

glenable(gl POINT SMOOTH) glenable(gl LINE SMOOTH) glenable(gl POLYGON SMOOTH) glhin(gl POINT SMOOTH HINT, GL FASTEST); glhin(gl LINE SMOOTH HINT, GL FASTEST); glhin(gl POLYGON SMOOTH HINT, GL FASTEST); glhin(gl POINT SMOOTH HINT, GL NICEST); glhin(gl LINE SMOOTH HINT, GL NICEST); glhin(gl POLYGON SMOOTH HINT, GL NICEST);

.5 I program3 4.c lengh /=.0; /* */ if(lengh > 0.01){ draw_gase(x0, y0, lengh); draw_gase(mid_poin(x0, x1), mid_poin(y0, y1), lengh); draw_gase(mid_poin(x, x0), mid_poin(y, y0), lengh); }

3 CG

CG ( ) 3 (geomeric ransformaion) ( ) ( ) 3 (projecive ransformaion) ( )

( ) (viewing ransformaion) ( ) 3

3.1 ( ) n P = (x 1, x,, x n ) T (( ) T ) n + 1 ˆP = (X 1, X,, X n, W) T (homogeneous coordinae) x 1 = X 1 W, x = X W,, x n = X n W ( )

P = (x, y, ) T a = (a 1, a, a 3 ) T P = (x, y, ) T x 1 0 0 a 1 x y 0 1 0 a = y 0 0 1 a 3 1 0 0 0 1 1 x y x + a 1 = y + a + a 3 ˆP = T(a) ˆP

P = (x, y, ) T x, y, θ 1, θ, θ 3 P = (x, y, ) T x 1 0 0 0 x y 0 cos θ = 1 sin θ 1 0 y, 0 sin θ 1 cos θ 1 0 1 0 0 0 1 1 ˆP = R i (θ i ) ˆP (i = 1,, 3) x cos θ 0 sin θ 0 x y 0 1 0 0 y = sin θ 0 cos θ 0 1 0 0 0 1 1 x cos θ 3 sin θ 3 0 0 x y sin θ = 3 cos θ 3 0 0 y 0 0 1 0 1 0 0 0 1 1

( ) ( x y ) = r ( ) cos(α + θ) = r sin(α + θ) ( ) cos α cos θ sin α sin θ = cos α cos θ + sin α sin θ ( ) ( cos θ sin θ x sin θ cos θ y) y P P θ α x

P = (x, y, ) T x, y, b 1, b, b 3 P = (x, y, ) T x b 1 0 0 0 x y 0 b = 0 0 y 0 0 b 3 0 1 0 0 0 1 1 b = (b 1, b, b 3 ) T ˆP = S(b) ˆP

P = (x, y, ) T x P = (x, y, ) T x 1 0 0 0 x y 0 1 0 0 y =, 0 0 1 0 1 0 0 0 1 1 x 1 0 0 0 x y 0 1 0 0 y = 0 0 1 0 1 0 0 0 1 1

P = (x, y, ) T Q = (x 0, y 0, 0 ) T n = (n 1, n, n 3 ) T θ P = (x, y, ) T θ P P n x y

. C OpenGL CG OpenGL 1 Q. ˆP 1 = T( Q) ˆP n = (n 1, n, n 3 ) T α y ˆP = R 3 (α) ˆP 1, cos α = n, sin α = n 1 + n n 1 n 1 + n α x n y x y

. 3 n 1 x β x ˆP 3 = R 1 (β) ˆP, cos β = n 3 4 n θ. ˆP 4 = R 3 (θ) ˆP 3 β x y θ y

. 5 (3) ˆP 5 = R 1 1 (β) ˆP 4. 6 () 7 (1) ˆP 6 = R 1 3 (α) ˆP 5 ˆP 7 = T 1 ( Q) ˆP 6. ˆP 7 = T 1 ( Q)R 1 3 (α)r 1 1 (β)r 3(θ)R 1 (β)r 3 (α)t( Q) ˆP

Euler x y x L y L L Euler (α, β, γ) P L = (x L, y L, L ) T P = (x, y, ) T ˆP = R ( γ)r 1 ( β)r 3 ( α) ˆP L β y L x α γ x L y x

3. ( ) (world coordinae sysem) x y v x v y v v (viewing coordinae sysem) x = x v, y = y v y=y v v x=x v

. (, ) 1 v v (perspecive projecion) v (parallel projecion). y=y v v x=x v y=y v v x=x v

透視投影変換 透視投影変換では視点と投影面の位置を違えた つの変換が使われる. 視点 v =0, 投影面 v =d ( 通常こちらが使われる ) y v v = d ( x, y, ) ( x, y, ) d d d v v v x v v 視点 v = d, 投影面 v =0 (d のとき平行投影変換となる ) y v x, y, x, y, ( ) 0 0 0 ( ) v v v v = d x v v 1

透視投影変換 視点 v =0, 投影面 v =d のとき 点 (x v,y v, v ) と投影点 (x d,y d, d ) の関係は次式となる. xd xv yd yv xv yv =, =, d = d xd =, yd =, d = d d d d d v v v v y v v = d ( x, y, ) ( x, y, ) d d d v v v v x v

透視投影変換 (con.) 視点 v =0, 投影面 v =d のとき (con.) これらの関係を同次座標で表せば次式となる. X d 1 0 0 0 xv Y 0 1 0 0 d y v = Zd 0 0 1 0 v Wd 0 0 1 d 0 1 xv Xd xv v d xd 実際, 次のようになる. Y d y v xv = yd = Zd v v d d Wd v d d 3

透視投影変換 (con.) 視点 v = d, 投影面 v =0 のとき 点 (x v,y v, v ) と投影点 (x 0,y 0, 0 ) の関係は次式となる. x x y y x y =, =, = 0 x =, y =, d = 0 d d d d d d 0 v 0 v v v 0 0 0 v + v + 1+ v 1+ v y v ( x, y, ) 0 0 0 ( x, y, ) v v v v = d x v v 4

透視投影変換 (con.) 視点 v = d, 投影面 v =0 のとき (con.) これらの関係を同次座標で表せば次式となる. X 0 1 0 0 0 xv Y 0 0 1 0 0 y v = Z0 0 0 0 0 v W0 0 0 1 d 1 1 xv X0 xv 1+ v d 実際, 次のようになる. x0 Y 0 y v xv = y0 = Z0 0 1 v d + 0 W0 1 v d + 0 d のとき 平行投影変換となる. 5

OpenGL の変換 コンピュータで実行される変換の順番 OpenGL では同次座標系の変換行列 (4 4) を使って各種変換を行っている. 点情報 A 1 A 幾何変換 A n P 1 投影変換 P 陰線処理画像変換画像 v v = P PA A Av 1 n 1 10

OpenGL の変換 (con.) void glmarixmode(glenum mode) mode に引数 GL_MODELVIEW, GL_PROJECTION, GL_TEXTURE を指定して, 幾何変換, 射影変換, テクスチャー行列のどれを操作するか指定する. void glloadideniy(void) 現在対象としている行列を 4x4 の単位行列にする. 例えば glmarixmode(gl_projection); /* 射影変換の設定 */ glloadideniy(); /* 初期化 */ P = I 0 gluperspecive(60.0, 1.0, 1.0, 10.0); P 1 glmarixmode(gl_modelview); /* 幾何変換の設定 */ glloadideniy(); /* 初期化 */ gltranslaef(-1.0, 0.0, 0.0);/* x 軸方向移動 */ glroaef(-30.0, 0.0, 0.0, 1.0);/* 回転 */ gluwireteapo(1.0);/* ティーポットを描画 */ A = I 0 A1 A = v PA Av 1 1 11

OpenGL による平行投影変換 void glorho(gldouble lef, Gldouble righ, Gldouble boom, Gldouble op, Gldouble near, Gldouble far) y = y v op lef righ v 視点は無限遠方 boom near ( v 軸 ) x= x v far ( v 軸 ) 1

OpenGL による透視投影変換 void gluperspecive(gldouble fovy, Gldouble aspec, GLdouble near, Gldouble far) y = y v aspec=w/h fovy w h v 視点は原点 x= x v near ( v 軸 ) far ( v 軸 ) 13

視点の位置 void glulooa(gldouble ex, GLdouble ey, GLdouble e, GLdouble cx, GLdouble cy, GLdouble c, GLdouble ux, GLdouble uy, GLdouble u) ux, uy, u は ウィンドウに表示される画像の上の方向を示す. y = y v (ex, ey, e) ( 軸 ) (cx, cy, c) ( 軸 ) v x= x v 14

OpenGL の幾何変換 平行移動 void gltranslaef(glfloa x, GLfloa y, GLfloa ) 局所座標系を x, y, 軸に x, y, だけ移動する. 回転 void glroaef(glfloa angle, GLfloa x, GLfloa y, GLfloa ) angle は度数で指定する. 例えば,X-Y 平面で 60 度左に回転する場合 glroaef(60.0, 0.0, 0.0, 1.0); 伸縮 void glscalef(glfloa x, GLfloa y, GLfloa ) 各軸方向へ指定された値で伸縮させる. 例えば,X,Y 方向に半分の大きさにする場合 glscalef(0.5, 0.5, 1.0) 15

OpenGL の幾何変換 (con.) glpushmarix(), glpopmarix() 変換行列を保存する. スタック Push Pop Push Pop I A A 1 A 3 A A 1 A A 1 A 5 A 4 A A 1 A A 1 A A 1 A A 1 glloadideniy() glscalef() gltranslaef() glscalef() draw_quad() gltranslaef() glscalef() glroaef() draw_ri() 16

Program5_1.c ティーポットを平行投影変換で描く 17

Program5_1.c(con.) これ以降 racball.c, racball.h を利用する. glumousefunc(void (*func)(in buon, in sae, in x, in y)) func にはマウスのボタンが押されたときに実行する関数のポインタを与える. buon には押されたボタン (GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON, GLUT_RIGHT_BUTTON), sae には押した (GLUT_DOWN) のか離した (GLUT_UP) のか,x と y にはその位置が渡される. glumoionfunc(void (*func)(in x, in y)) func には, マウスのいずれかのボタンを押しながらマウスを動かしたときに実行する関数のポインタを与える. x と y には 現在のマウスの位置が渡される. 設定を解除するには引数に 0( ヌルポインタ ) を指定する (sdio.h 等の中で定義されている記号定数 NULL を使用しても良い ). 18

ダブルバッファリング ダブルバッファリング gluinidisplaymode(glut_double) を指定して glflush() の代りに gluswapbuffers() を使用する. in gluswapbuffers(void) ダブルバッファリングのつのバッファを交換することでちらつきを防ぐ. ディスプレイのリフレッシュレートが 60H であれば, バッファの交換は 1/60 秒ごとに行われる. 19

Program5_.c ティーポットを透視投影変換で描く 0

Program5_3.c ティーポットと水滴を下図のように移動する. 1

4 OpenGL

OpenGL ( ) (animaion) 1 (+1 ) D.

1 8 10 4 / 30 / 8 1 / CG 4 30 /

program8_1.c, program8_.c ティーポットを回転させる. void gluidlefunc(void (*func)(void)) 入力イベントがない場合, 引数 func ( 関数のポインタ ) で指定した関数を実行する. 1

program8_3.c 回転するドーナツとティーポットのウォークスルーアニメーション

一般化座標表現 一般化座標 q ( r ) = x x ( r ) G1 ( r ) G ( r ) 拘束条件 ( q) θ Φ = 0 Φ 1 11 : R R 一般化外力 P ( L (( 0,T ))) 1 1 3 ( H (( 0,T ))) ( r = 1,,,4) ( 1) Ω Q x q = ( 4), q = q q () 1 ( 4) Q { ( (( ))) ( ) ( ) } 1 1 q H 0,T q 0 = 0, q 0 = 0 Ω ( 1) q ( 4) ( ) Ω x 1 ( ) q ( 3) q ( 3) Ω P

拘束条件 詳細 ( ) Φ q x x = ( 4) ( 1,4) ( 1) ( 4) ( 1,4) ( 1) () 1 ( 1,) () 1 ( ) (,1) ( ) G1 cosθ () 1 ( 1,) () 1 ( ) (,1) ( ) G + l + l x x x x G1 G sinθ ( ) (,3) ( ) ( 3) G1 cosθ ( ) (,3) ( ) ( 3) G + l + l + l + l sinθ θ θ cosθ x x x x ( 3) G ( 3) ( 4) G1 x ( 4) G ( 4) G1 1 G 1 sinθ x x + l + l G1 G x x G1 G cosθ sinθ l l ( 1,4) ( 1, ) ( 4) q ( ),1 l ( 1) q ( ) (,3) l q ( 3) q

制約付変分原理 作用積分の停留化問題 (Hamilon の原理 ) に拘束条件を加えた制約付停留化問題 saionalie q Q, λ R T q T 1 = q Mq d, 0 U 最適性の条件 L q + εδq, λ + εδλ T δl( q, λ) = lim = ε 0 ε 0 T Mq P Φ λ = 0, Φ = 0 拘束条件の時間微分 11 { L( q, λ) = T ( q ) U ( q) λ Φ} ( ) ( q) = T 0 P q d ( ) T ( Mq P Φ λ ) q q δq d Φ Φ Φ Φ Φ d Φ Φ Φ, T T T d q q d q qi qj d + Φ δλ = q + = q = 0 = 0 = q + qq = 0 i j

微分代数方程式 最適性の条件と拘束条件の時間 階微分より微分代数方程式 (DAE: differenial-algebraic equaions) を得る. T M Φ q q P = 0 Φq λ γ M = diag,,,,,, Φ Φ () 1 () 1 () 1 ( 4) ( 4) ( 4) ( m m I m m I ) Φq =, γ = qq T i j q qi qj q = AP Bq A= M M ( M ) M 1 T 1 T = T B M Φq ΦqM Φq Φ T qq q 1 1 T 1 T 1 1 Φq Φq Φq Φq 1 ( ) ( )

微分代数方程式 (con.) 詳細 ( ) ( ) ( ) () ( ) () () ( ) () ( ) ( ) ( ) () ( ) () ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) = 0 0 0 0 0 sin cos sin sin cos cos sin cos,3,3,1 1 1, 1,1 1 1, 1 1 1,4 1 1 1,4 1 θ θ θ θ θ θ θ θ θ θ θ θ θ θ θ θ l l l l l l l l γ

時間積分法 次の Runge-Kua 法 () ( ) ( ) ( ) ( ) ( ) ( ) ( ) () ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) () ( ) ( ) ( ) ( ) ( ) ( ) ( ) Δ + = = Δ + + = = = = = + Δ + Δ + Δ + + = Δ Δ + Δ + + Δ + = Δ Δ + Δ + + Δ + = Δ Δ + + Δ + = Δ + Δ + Δ + = = + Δ = = + + + + b a b b a O b b a O b a O b a b a O N T T n 1 1 1 1 3 1 3 1 1 where 1/ 1/ 1/ 1 and 1 1 1, 0,1,,, 0, : f f f f f f f f f f f R

時間積分法 (con.) 4 次の Runge-Kua 法 () ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) Δ + = Δ + = Δ + = = Δ + + + + = = + Δ = = + + N T n 3 4 3 1 1 4 3 1 1 1 where 6, 0,1,,, 0, : f f f f f R

有限要素モデル Ω の有限要素モデル Femap Ver9.1.0 を使用 総節点数 : 5,491 総要素数 : 11,046

表面要素の描画 要素と節点のデータ構造 要素 ラベル : n 構成されている節点 : i, j, 節点 i n ラベル : i 座標値 : i x, i y, i j for( n=0 ; n<n ; n++ ){ glbegin( GL_TRIANGLES ); glverex3d( n. i. i_x, n. i. i_y, n. i. i_); glverex3d( n. j. j_x, n. j. j_y, n. j. j_); glend(); glverex3d( n.. _x, n.. _y, n.. _); }

アニメーション結果 ピストンクランク機構

I [1] ( ),. C ( ), ( ),., 00. [] Mar J. Kilgard. The opengl uiliy ooli (glu) programming inerface api version 3( ). hp://opengl.jp/glu/index.hml, 001. [3],. OpenGL 3 CG., 003. [4]. Glu opengl. hp://www.waayama-u.ac.jp/ ooi/opengl/libglu.hml, 006. Lins: [], [4]