420 likes | 645 Views
第4回 (2009/10/23). 航空宇宙機設計製図 Ⅱ. 2009 年度 九州大学 工学部 機械航空工学科 航空宇宙工学コース 3年後期 金曜3限 谷 泰寛. ver. 2009/10/30. 図形処理のための幾何学. 拡大・縮小、回転、平行移動. y. ( x’, y’ ). by. ( x, y ). y. x. x. ax. 拡大/縮小. ・原点に対して、x軸方向に a 、y軸方向に b だけ拡大/縮小 . y. ( x’, y’ ). r. ( x, y ). q. y = r sin a. a. x.
E N D
第4回 (2009/10/23) 航空宇宙機設計製図Ⅱ 2009年度 九州大学工学部機械航空工学科航空宇宙工学コース 3年後期 金曜3限 谷 泰寛 ver. 2009/10/30
図形処理のための幾何学 拡大・縮小、回転、平行移動
y (x’, y’) by (x, y) y x x ax 拡大/縮小 ・原点に対して、x軸方向にa、y軸方向にbだけ拡大/縮小
y (x’, y’) r (x, y) q y = r sina a x x = r cosa 回転 ・原点まわりに半時計方向にθだけ回転
平行移動 ・x軸方向にp、y軸方向にq だけ平行移動 y (x’, y’) y+q (x, y) これでも計算可能だが、行列の和の形となってしまう y x x x+p
平行移動 ・x軸方向にp、y軸方向にq だけ平行移動 y (x’, y’) y+q (x, y) これでも計算可能だが、行列の和の形となってしまう y x x 同次座標表現 x+p
同次座標表現 座標点を、以下の形式で表現する形式(2次元の場合) 同次座標表現のメリット ・平行移動が、マトリックスの積で表現できる(前頁)。 ・m=0とすると、特定方向の無限遠点を表現可能。 ・実際の座標値は、 ・3次元の場合は、
移動→対称→移動:合成変換 ① ④ (a, b) ③ 平行移動 ② 平行移動 対称移動
コンピュータによる図形描画 コンピュータ グラフィックスライブラリ ディスプレイ アプリケーション プログラム プロッタ プリンタ OS データ
ウインドウシステム • コンピュータの画面出力 複数のタスクにウインドウを割り当て、画面出力を多重化 • 主なウインドウシステム ・Quartz compositor (Mac OS X ) ・X Window System (Microsoft Windows : OSにウインドウシステムが組込)
グラフィックスライブラリ • アプリケーションとディスプレイとのインターフェイスを行う関数群 • 主なグラフィックスライブラリ ・OpenGL ・Direct2D, Direct3D ・Quartz (古くは、 CORE, GKS, PHIGS など)
本講義での画像表示 ・画面表示・・・X Window System 座標変換等の計算処理部分は自作し、線を引く等の基本的な描画のみを使用するため) ・保存/出力・・・Postscript (EPS) 画像は文書ファイルへ貼り付けて残すものとする。(要すれば、その文書ファイルをプリンタで印刷)
X Window System クライアント・サーバモデルとネットワーク指向 クライアントとサーバの2つのプログラム間で分担して処理 ・サーバ:ウインドウの生成・スクリーン表示、図形の出力、キーボードやマウスの入力処理 ・クライアント:ウインドウの生成を要求、図形の出力を要求 Request サーバ クライアント Reply Event Error
X Window System デバイス独立、OS独立 ・デバイスに依存する部分はサーバが担当するので、アプリケーションはデバイスに依存しない形で書くことが可能 ・サーバ側システムのOSやハードウエアに依存した操作は、サーバが処理を担当 ・アプリケーションは、XlibというC言語で書かれたライブラリの関数をコールし、コールされたXlibの関数がXプロトコルを発生 サーバ クライアント X protocol OS OS
X Window System ソフトウエアの階層とツールキット、グラフィックスライブラリ アプリケーション Widget Xt intrinsics OSF Motif OpenGL / GLX Xlib ※本講義では、直接Xlibをコールするアプリケーションを作成する。
X Window System ビットマップ・ディスプレイを想定 ビットマップディスプレイ: ピクセルと呼ばれる小さな点(画素) の集合で画像を表示する装置
X Window System • ディスプレイ上に画像を描くには、ディスプレイ上のピクセルに個別の色を与える。 • ピクセルの識別のために、ピクセル座標系を利用。 • 左上を原点(0,0)
X Window System ウインドウを表示するプログラム #include <X11/Xlib.h> #include <X11/Xutil.h> #include <stdio.h> main() { Display *d; Window w; d = XOpenDisplay (NULL); w = XCreateSimpleWindow (d, DefaultRootWindow (d), 50, 50, 400, 300, 2, BlackPixel(d,0), WhitePixel(d,0)); XMapWindow (d,w); XFlush (d); getchar (); XCloseDisplay (d); }
X Window System 線を描くプログラム #include <X11/Xlib.h> #include <X11/Xutil.h> #include <stdio.h> int main(){ Display *dsp; Window win; int screenNumber; GC gc; unsigned long white; unsigned long black; long eventMask; dsp = XOpenDisplay( NULL ); screenNumber = DefaultScreen(dsp); white = WhitePixel(dsp,screenNumber); black = BlackPixel(dsp,screenNumber); win = XCreateSimpleWindow (dsp, DefaultRootWindow(dsp), 50, 50, 600, 300, 0, black, white ); XMapWindow( dsp, win ); eventMask = StructureNotifyMask; XSelectInput( dsp, win, eventMask ); XEvent evt; do{ XNextEvent( dsp, &evt ); // calls XFlush }while( evt.type != MapNotify ); gc = XCreateGC( dsp, win, 0, NULL); XSetForeground( dsp, gc, black ); XDrawLine(dsp, win, gc, 10, 10,190,190); XDrawLine(dsp, win, gc, 10,190,190, 10); eventMask = ButtonPressMask|ButtonReleaseMask; XSelectInput(dsp,win,eventMask); do{ XNextEvent( dsp, &evt ); // calls XFlush() }while( evt.type != ButtonRelease ); XCloseDisplay( dsp ); }
X Window System C言語で作成したX Window Systemを使用したプログラムのコンパイル・リンク方法(前頁のサンプル等) (1) ホスト計算機の場合 ・sample.cをコンパイルし、a.outを作成する場合、 X11のライブラリ(Xlib.h, Xutil.h)をライブラリとして指定する必要がある。 gcc sample.c -lX11 (2) その他のX環境の場合(自宅のPCなど) ・ライブラリが置いてある場所がシステムによって異なる場合には、 ライブラリの場所を指定する必要がある。 (例)gcc sample.c -L/usr/X11R6/lib -lX11 22
Tips X Window Systemで描画するプログラムを実行する場合は、 ● 「X11(xterm)」上で実行する。 ● ホスト計算機にログインする際に、 ssh -X ah.s.kyushu-u.ac.jp とする。「-X」を忘れないように。 ● ホスト計算機にログインした時に、「.Xauthorityでエラーが発生」とかいうエラーメッセージが表示される場合は、個人の使用容量制限(100MB?)をオーバーしている可能性がある。(次頁参照)→ 不要なファイルを削除。 だめなら、パソコンから一旦ログアウトしてみる。 ●コンパイルする場合は、「ターミナル」でも良いし、「X11」でも「-X」をつけなくてもよい。 これをきちんとやらないと、 Segmentationなんとかというエラーメッセージが表示される。
Tips 自分がどれくらい容量を使っているかを確認する方法 ● Finderで、自分のIDをクリックした後、 「ファイル」メニュー → 「情報を見る」を選択 「サイズ」の欄を見る(少し時間がかかる)
Tips プログラムは正しそうなのに、コンパイルでエラーが出る場合 エラーメッセージに、「UTF-16がどうしたこうした」と出る場合、Emacsでプログラムを編集した際に、ファイルの先頭に妙な文字が入ってしまっていることがある。(Emacs上では見えないため、原因がわかりづらい。) 確認方法 $ cat ファイル名 として、画面上にファイルの中身が表示されるので、先頭に「??」があるかどうかを 確認する。 対処方法 (「??」があった場合。根本的な解決ではないが。) ・上で、画面に表示されたものの「??」を除く部分をマウスで選択してコピーする。 ・ Emacs等のエディタで、新しいファイルの編集を行い、コピーしたものを貼付けて、 別名のファイルとして保存する。
Tips 「ターミナル」で文字を大きくするには、 ● 「ターミナル」メニュー → 「環境設定」
Tips 「xterm」で文字を大きくするには、 (方法その1) ● 次の内容のファイルを作り、「.Xdefaults」という名前で保存する。 ● xterm上で次のコマンドを実行する。 $ xrdb .Xdefaults ● 「アプリケーション」メニューから、新たに「xterm」を実行する。 (方法その2) ● xtermを実行する際のオプションで、フォントサイズを指定する。 $ xterm -fn 10x20(このように打ち込むと、新しいウインドウが開く) ◯ 使えるフォントサイズは、5x7 5x8 6x9 6x10 6x12 6x13 7x13 8x13 7x14 9x15 8x16 10x20 12x24 など。 対応していないサイズを指定すると、デフォルトのサイズになってしまう模様。 XTerm*VT100*font: 10x20
Postscript と EPS • Adobe社が開発したページ記述言語の1つ。 • 「ページ記述言語」とは、ページ上に印刷される文字、図形、画像などを記述するための言語。プログラミング言語でもあり、計算や繰り返しなどを記述する能力がある。 • EPS (Encapsulated Postscript)とは、Postscriptを利用して作られた画像ファイルデータ形式の1種であり、文書への貼り付け等を考慮されている。(文法は同じ)
Postscriptによる作画例 バッテンを描くEPSファイル %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 400 300 %%Orientation: Portrait %%Pages: 1 %%EndComments /mydict 120 dict def mydict begin gsave 0.0 0.0 1.0 setrgbcolor newpath 10 10 moveto 300 300 lineto 300 10 moveto 10 300 lineto stroke showpage %%Trailer %%EOF Postscriptでは 左下が原点 上の図は、 ・左の内容のテキストファイルを作成 ・「○○.eps」という名前で保存 ・Powerpointでそのファイルを読み込んで挿入 ・外枠の線は、別。(領域明示のために追加) ・Postscriptでは、左下が原点となる。
本講義での使用について X Window System やPostscript をそのまま使うのは若干面倒 ↓ Fortranから簡単な呼び出しで描画できるようなサブルーチン群を用意した。 ただし、機能は限定している。 ・XCgraphics.c : Xlibを使って画面描画 ・PSgraphics.f90 : 作画内容のEPSファイルを作成 ▷両者で、同じ呼び出しとしているため、callする側は修正不要。 ・自作のプログラム+ XCgraphics.c→ 画面表示 ・自作のプログラム+ PSgraphics.f90→EPSファイル出力 のように、コンパイル・リンク時に取り替えればよい。 ▷座標系は、X Window Systemのもので共通(左上が原点、Y軸正は下向き)。 ▷使用マニュアルをWeb ページ上に置いてあるので、参照のこと。
本講義での使用について プログラムのコンパイル・リンク方法(ホスト計算機上) (1) XCgraphics.cの場合 ① XCgraphics.c をコンパイルし、XCgraphics.o を作成 gcc XCgraphics.c -c ② main.f90 をコンパイルし、XCgraphics.o とともにmain.x を作成 f95 main.f90 XCgraphics.o -o main.x -lX11 (2) PSgraphics.f90の場合 main.f90 と PSgraphics.f90 をコンパイル・リンクし、main.x を作成 f95 main.f90 PSgraphics.f90 -o main.x 31
XCgraphics.c, PSgraphics.f90 の使用例 program sample4 implicit none integer i, j, n, xpoint(10), ypoint(10), np real pi character a*1 call xcinit ( 400, 300 ) call xccolor ( 2 ) call xcline ( 10, 10, 300, 300 ) call xccolor ( 5 ) call xclinewidth ( 5 ) call xcline ( 10, 300, 300, 10 ) call xccolor ( 9 ) call xcfillrect ( 30, 100, 50, 30 ) call xcarc ( 90, 200, 60, 100, 0, 360 ) call xccolor ( 7 ) call xcfillarc ( 210, 230, 150, 150, 5, 335 ) call xccolor ( 0 ) call xcstring ( 60, 55, "Sample4.f", 9 ) pi = 4.0 * atan( 1.0 ) np = 6 do i = 1, 6 xpoint (i) = 200 + 40 * cos ((i-1)*72*pi/180.0 ) ypoint (i) = 100 + 40 * sin ((i-1)*72*pi/180.0 ) end do call xccolor ( 6 ) call xcpolygon ( xpoint, ypoint, np ) call xclinewidth ( 3 ) call xccolor ( 3 ) call xclines ( xpoint, ypoint, np ) call xccolor ( 9 ) call xcpoints( xpoint, ypoint, np ) write (6,*) "press enter" read (5,'(a)') a call xcclose end program sample4 sample4.f90
XCgraphics.c, PSgraphics.f90 の使用例 sample4.f90の出力結果 XCgraphics.cによる画面表示 (画面のキャプチャ)※ PSgraphics.f90によるepsファイルを貼付 ※本資料の最終頁を参照。
XCgraphics.c, PSgraphics.f90 の使用例 両者の比較 ・・・ Postscript形式は、拡大しても劣化しない。 前頁の図を拡大したもの XCgraphics.cによる画面表示 (画面のキャプチャ) PSgraphics.f90によるepsファイルを貼付
参考文献~より詳しく知りたいならば X Window Systemについての解説 ・X Window System: The Complete Refecence to Xlib, X Protocol, ICCCM, XLFD https://www.msu.edu/~huntharo/xwin/docs/xwindows/XWINSYS.pdf ・X-Window Ver.11プログラミング-第2版、木村凌一ほか著、日刊工業新聞社 Postscript言語についての解説 ・Adobe社によるPostscript言語のリファレンスマニュアル http://www.adobe.com/products/postscript/pdfs/PLRM.pdf ・Adobe社によるEPSファイル形式の仕様 http://partners.adobe.com/public/developer/en/ps/5002.EPSF_Spec.pdf
課題 2 (1) 辺の数が3(三角形)以上の多角形を描け。また、それを時計回りに90°回転させた図を描け(座標軸を描くこと)。 (2) 不等辺三角形を描け。また、それを基に各辺の長さを2倍に拡大した不等辺三角形を描け(座標軸を描くこと)。 (3) 適当な多角形を描き、その頂点の一つ(原点を除く)を中心として元の図形を時計回りにn(i)°回転させたときの図を描け。ただし、n(i)= 2,3,5,7,11,13,17,19,23,29,37,41(i=1~12)とする(座標軸を描くこと)。 ・提出日:2009年12月4日(金)講義開始前まで ・提出物:プログラム説明書とプログラムリスト、および作図結果をMicrosoft Word文書形式で提出(※次頁参照) ・提出先: tani@aero.kyushu-u.ac.jp 宛てに電子メールにより提出のこと. ファイル名は「自分の氏名2.doc」等とすること.例えば、「谷泰寛2.doc」
出力方法 • ディスプレイ上に表示して、作図結果を見る. • eps形式でファイル出力. それを「プレビュー」で開いて確認.(PDFに変換される) Wordに貼付ける場合は、「挿入」→「図」→「ファイルから..」→「epsファイルを選択」. (古いバージョンのWordでは、貼付後に枠だけしか表示されない場合があるが、PDF形式で出力(またはプリンタで印刷)すると、きちんと表示される.)
(参考) Mac OS Xで画面のキャプチャ • 「アプリケーション」→「ユーティリティ」→「グラブ」 • command+shift+3 : 画面全体 • command+shift+4を押した後、マウスで領域を選択 : 画面の一部(マウスで選択した領域) • command+shift+4を押した後、 マウスカーソルをウインドウに載せて、 スペースバーを押して、マウスでクリック : 一つのウインドウ(マウスで選択したウインドウ)