第9回 (2009/12/4) 航空宇宙機設計製図Ⅱ 2009年度 九州大学 工学部 機械航空工学科 航空宇宙工学コース 3年後期 金曜3限 谷 泰寛 ver. 2009/12/3 ワイヤフレームモデル 3次元形状モデルの種類 ワイヤフレームモデル 点と線で表現 サーフェスモデル ソリッドモデル 点、線、面で表現 ソリッド(中身の詰まった 物体)により表現 面の重なりを考える必要がある。 3次元変換マトリックス 操作 変換マトリックス 平行移動 1 0 0 0 0 1 0 0 拡大・縮小 a 0 0 0 0 0 0 b 0 0 0 c 0 0 0 1 0 0 1 0 p q r 1 備考 x 軸方向に p y 軸方向に q z 軸方向に r だけ移動 原点に対して x 軸方向に a 倍 y 軸方向に b 倍 z 軸方向に c 倍 3次元変換マトリックス(回転) x x y y z z 1 1 z x' x (x’, y’, z’) y' y cos z sin (x, y, z) z' y sin z cos x y 1 0 0 0 cos sin 0 sin cos 0 0 0 cos 0 sin 0 1 0 sin 0 cos 0 0 0 cos sin 0 sin cos 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 物体をいろいろな方向から見る方法 視点 平面図 視点 視点 y x y x 側面図 (a) 視点を動かす (b) 物体を動かす 投影変換 z z 投影平面 投影平面 投影中心 投影線 投影線 x x y (a) 平行投影 (機械製図で用いられる) y (b) 透視投影 3次元図形を透視変換によって スクリーン上に表示するプロセス ① 3次元ワールド座標系 ③ ② 視点座標系 正規透視座標系 スクリーン座標系 ① 物体が記述されている XYZ直交座標系から視点を原点 にとった視点座標系への変換 ② 視点座標系から正規透視座標系への変換 ③ 正規透視座標系からディスプレイ上のスクリーン座標系 への変換 3次元図形を透視変換によって スクリーン上に表示するプロセス ① 3次元ワールド座標系 ③ ② 視点座標系 正規透視座標系 A∞ Ye Yw スクリーン座標系 Ye D∞ Ze A B∞ B D Ze 投影面 Xe Xw C∞ C Xe Zw 3次元ワールド座標系 ( Xw, Yw, Zw ) 視点座標系 ( Xe, Ye, Ze ) 3次元図形を透視変換によって スクリーン上に表示するプロセス ① 3次元ワールド座標系 ③ ② 視点座標系 A∞ Ye スクリーン座標系 正規透視座標系 Yp D∞ Ze A∞ A B∞ Zp A B D B∞ 投影面 D∞ C∞ B C D 投影面 C∞ Xe 視点座標系 ( Xe, Ye, Ze ) C 正規透視座標系 ( Xp, Yp, Zp ) Xp 3次元図形を透視変換によって スクリーン上に表示するプロセス ① 3次元ワールド座標系 ③ ② 視点座標系 正規透視座標系 スクリーン座標系 Yp 1024 0 A B 1.0 1.0 -1.0 A B D C Xp 投影面 768 D -1.0 C Ys 正規透視座標系 ( Xp, Yp, Zp ) スクリーン座標系 ( Xs, Ys ) Xs 3次元図形を透視変換によって スクリーン上に表示するプロセス 視点座標系 ( Xe, Ye, Ze ) から正規透視座標系 ( Xp, Yp, Zp ) への変換 Ye h k A Ze 投影面 Xe x p 1 y p 0 z p 0 w p 0 0 0 0 x e 1 0 0 y e 0 k /h k ze 0 k /h 0 1 Yp A 1.0 Zp 1.0 Xp 正規透視座標系での図形は、0≦Zp≦1の 範囲のもののみが表示されると考える。 ・Zp=0 → Ze=h ・Zp=1 → Ze=∞ 航空機の表現 Start エンジン λ,γ,φ,θ,ψ 主翼 [ T(φ,θ,ψ) ] 水平尾翼 胴体 垂直尾翼 End 座標系 回転 3面図(正面図、平面図、側面図) 直線による曲線表現 NACA4桁 翼型 肉厚曲線 NACA4桁 翼型 2 3 4 x x x x x t1.4845 0.6300 1.7580 1.4215 0.5075 c c c c c 平均キャンバ曲線 yA y 2 x 2x A x for 0 x x A xA yA y for x A x c 2 c x c x 2x A c x A yA /c = 0.02 xA /c = 0.4 NACA 2 4 0 9 t/c = 0.09 Four digits wings 作品(1) 作品(2) 作品(3) 作品(4) 隠れ線処理 隠れ線処理航空機 隠れ線(面)処理法の例 (1) 機体の表面を多数のポリゴン(四角形、三角形等)で表現. (2) 各ポリゴンが視点の方を向いている → 見える(描く) 向いていない → 見えない(描かない) ※ポリゴンの法線ベクトルと、視線の方向ベクトルの内積を利用 単純な物体(球など)では、これでOK. 重なりがあるような場合には、以下の処理を追加 (3) 見える面について、視点から遠くの面から近くの面の順に 次々と重ね描いていく. 課題 3 (1) 航空機のワイヤフレーム平行投影図を描くプログラムを作成せよ. (2) 上記プログラムを使用して,航空機の平面図,左側面図および正面 図、斜め上方前方より投影した図を出力せよ. (3) プレゼンテーション用のパワーポイントデータを作成せよ. 提出物と提出期限 ・プログラム説明書,プログラムリスト,計算結果出力図 2010年1月22日(金) 講義前までに提出 (課題2と同様にWord形式で) ・プレゼンテーション用パワーポイントデータ 2010年1月20日(水) ・[email protected] 宛てに電子メールにより提出のこと. ファイル名は「自分の氏名3.ppt」等とすること.例えば、「谷泰寛3.ppt」 PowerPointによる発表 発表日 : 2010年1月22日(金) 発表時間: 2分間 質疑時間: 1分間 選んだ機体の概要、プログラミングや作図で工夫し た点、作図結果の解説等を発表のこと. 31 補足 グラフィックス表示ルーチン群の改訂(ver.2) グラフィックス表示ルーチン群 ・XCgraphics.c : Xlibを使って画面描画 ・PSgraphics.f90 : 作画内容のEPSファイルを作成 に、座標値等に単精度実数型を使えるルーチンを追加した。 (例)直線を引くルーチン: ・call xcline ( x1, y1, x2, y2 ) : x1, y1, x2, y2 は整数型変数 ・call xcliner ( x1, y1, x2, y2 ) : x1, y1, x2, y2 は実数型変数 ・実数型のルーチン名は、整数型ルーチン名の最後に「r」を付けたものと なっている。 ・プログラムの所在、コンパイル法はこれまでと同じ。 32 XCgraphics.c, PSgraphics.f90 のサブルーチン(1/3) ・Windowの生成、終了 機能 整数型ルーチン Create Window 幅screen_width高さ screen_heightのウインドウを 生成する call xcinit ( screen_width, screen_height ) integer screen_width, screen_height Close Window ウインドウを閉じる call xcclose ( pi1 ) integer pi1 実数型ルーチン call xcinitr ( screen_width, screen_height ) real screen_width, screen_height ・引数の型に依存しないもの 機能 Set Color 描画する色を設定する. Fortranからの呼び出し,引数 call xccolor ( cn ) integer cn 0: black, 1: white, 2: blue, 3: red, 4: magenta, 5: green, 6: cyan, 7: yellow, 8: orange Set line width 線の太さをline_widthピクセルに設定する call xclinewidth ( line_width ) integer line_width 33 XCgraphics.c, PSgraphics.f90 のサブルーチン(2/3) 機能 整数型ルーチン 実数型ルーチン Draw point 座標(x,y)に点を描く call xcpoint ( x, y ) integer x, y call xcpointr ( x, y ) real x, y Draw points np個の座標(xpoint(i),ypoint(i)) に点を描く call xcpoints ( xpoint, ypoint, np ) integer np, xpoint(np), ypoint(np) call xcpointsr ( xpoint, ypoint, np ) integer np real xpoint(np), ypoint(np) Draw line 座標(x1,y1),(x2-y2)点間に直 線を描く call xcline ( x1, y1, x2, y2 ) integer x1, y1, x2, y2 call xcliner ( x1, y1, x2, y2 ) real x1, y1, x2, y2 Draw line 座標(x1,y1),(x2-y2)点間に直 線を描く call xcline ( x1, y1, x2, y2 ) integer x1, y1, x2, y2 call xcliner ( x1, y1, x2, y2 ) real x1, y1, x2, y2 Draw lines 座標(xpoint(i),ypoint(i)), i=1, npに与えられた点を結んだ折 れ線を描く call xclines ( xpoint, ypoint, np ) integer np, xpoint(np), ypoint(np) call xclinesr ( xpoint, ypoint, np ) integer np real xpoint(np), ypoint(np) Draw rectangle 座標(x,y)に幅width高さ heightの長方形を描く call xcrect ( x, y, width, height ) integer x, y, width, height call xcrectr ( x, y, width, height ) real x, y, width, height 34 XCgraphics.c, PSgraphics.f90 のサブルーチン(3/3) 機能 整数型ルーチン 実数型ルーチン Fill rectangle 座標(x,y)に幅width高さheight の長方形を塗りつぶす call xcfillrect ( x, y, width, height ) integer x, y, width, height call xcfillrectr ( x, y, width, height ) real x, y, width, height Fill polygon 座標(xpoint(i),ypoint(i)), i=1, npを頂点とする多角形の内部を 塗りつぶす call xcpolygon ( xpoint, ypoint, np ) call xcpolygonr ( xpoint, ypoint, np ) integer np, xpoint(np), ypoint(np) integer np real xpoint(np), ypoint(np) Draw arc 座標(x,y)を中心として、幅width 高さheightの円弧を描く call xcarc ( x, y, width, height, angle1, angle2 ) integer x, y, angle1, angle2, width, height call xcarcr ( x, y, width, height, angle1, angle2 ) real x, y, angle1, angle2, width, height Fill arc 座標(x,y)を中心として、幅width 高さheightの円弧の内部を塗り つぶす call xcfillarc ( x, y, width, height, angle1, angle2 ) integer x, y, angle1, angle2, width, height call xcfillarcr ( x, y, width, height, angle1, angle2 ) real x, y, angle1, angle2, width, height Draw string 座標(x,y)にn文字の文字列strを 出力する call xcstring ( x, y, str, n ) integer x, y, n character str call xcstringr ( x, y, str, n ) integer n real x, y character str 35 XCgraphics.c, PSgraphics.f90 の使用例 sample5.f90 program sample5 implicit none integer i, j, n, xpoint(10), ypoint(10), np real xpointr(10), ypointr(10) real pi character a*1 ! call xcinit ( 400 , 300 ) call xcinitr ( 500.5, 400.5 ) call xccolor ( 2 ) call xcpoint ( 60 , 10 ) call xcpointr ( 66.0, 10.0 ) call xccolor ( 2 ) call xcline ( 10 , 10 , 300 , 300 ) call xcliner ( 10.0, 20.0, 300.0, 310.0 ) call xccolor ( 5 ) call xclinewidth ( 5 ) call xcline ( 10 , 300 , 300 , 10 ) call xcliner ( 20.0, 310.0, 310.0, 20.0 ) call xccolor ( 9 ) call xcfillrect ( 30 , 100 , 50 , 30 ) call xcfillrectr ( 40.0, 110.0, 60.0, 40.0 ) call xccolor ( 4 ) call xclinewidth ( 1 ) call xcrect ( 30 , 100 , 50 , 30 ) call xcrectr ( 40.0, 110.0, 60.0, 40.0 ) call xcarc ( 90 , 200 , 60 , 100 , 0 , 360 ) call xcarcr (100.0, 210.0, 70.0, 110.0, 0.0, 360.0 ) call xccolor ( 8 ) call xcfillarc ( 220 , 230 , 150 , 150 , 5 , 335 ) call xccolor ( 7 ) call xcfillarcr ( 200.0, 240.0, 160.0, 160.0, 5.0, 335.0 ) call xccolor ( 0 ) call xcstring ( 60 , 55 , "Sample5.f", 9 ) call xcstringr ( 70.0, 65.0, "Sample5.f / real", 16 ) pi = 4.0 * atan( 1.0 ) np = 6 do i = 1, 6 xpointr (i) = 200.0 + 40.0 * cos ( ( i - 1 ) * 72.0 * pi / 180.0 ) ypointr (i) = 100.0 + 40.0 * sin ( ( i - 1 ) * 72.0 * pi / 180.0 ) xpoint (i) = int( xpointr (i) + 10.0 ) ypoint (i) = int( ypointr (i) + 10.0 ) end do call xccolor ( 6 ) call xcpolygon ( xpoint , ypoint , np ) call xcpolygonr ( xpointr, ypointr, np ) call xclinewidth ( 3 ) call xccolor ( 3 ) call xclines ( xpoint , ypoint , np ) call xclinesr ( xpointr, ypointr, np ) call xccolor ( 9 ) call xcpoints ( xpoint , ypoint , np ) call xcpointsr ( xpointr, ypointr, np ) write (6,*) "press enter" read (5,'(a)') a call xcclose end program sample5 36 XCgraphics.c, PSgraphics.f90 の使用例 sample5.f90の出力結果 XCgraphics.cによる画面表示 PSgraphics.f90によるepsファイルを貼付 Tips 画面の表示を拡大したいとき、 ● 「control」キーを押しながら、マウスのスクロールボタンを 動かす。 37
© Copyright 2024 ExpyDoc