航空宇宙機設計製図 Ⅱ
DESCRIPTION
第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. - PowerPoint PPT PresentationTRANSCRIPT
航空宇宙機設計製図Ⅱ2009 年度
九州大学 工学部 機械航空工学科 航空宇宙工学コース 3年後期 金曜3限
谷 泰寛
第4回 (2009/10/23)
ver. 2009/10/30
2
図形処理のための幾何学
拡大・縮小、回転、平行移動
3
拡大/縮小・原点に対して、x軸方向に a 、y軸方向に b だけ拡大/縮小
byy
axx
=='
'
€
x '
y '
⎛
⎝ ⎜
⎞
⎠ ⎟=
a 0
0 b
⎛
⎝ ⎜
⎞
⎠ ⎟x
y
⎛
⎝ ⎜
⎞
⎠ ⎟
y
(x, y)
(x’, y’)
xx
ax
y
by
4
・原点まわりに半時計方向に θ だけ回転
回転
y
x = r cos
(x, y)
(x’, y’)
r
y = r sin
x
⎟⎟⎠
⎞⎜⎜⎝
⎛⎟⎟⎠
⎞⎜⎜⎝
⎛ −=⎟⎟
⎠
⎞⎜⎜⎝
⎛y
x
y
x
θθ
θθ
cossin
sincos
'
'
( )
sincos
sinsincoscos
cos'
yx
rr
rx
−=
−=
+=
22,sin,cos yxrryrx +===
( )
cossin
cossinsincos
sin'
yx
rr
ry
+=
+=
+=
5
平行移動・x軸方向に p 、y軸方向に q だけ平行移動
qyy
pxx
+=+=
'
'
⎟⎟⎠
⎞⎜⎜⎝
⎛+⎟⎟
⎠
⎞⎜⎜⎝
⎛⎟⎟⎠
⎞⎜⎜⎝
⎛=⎟⎟
⎠
⎞⎜⎜⎝
⎛q
p
y
x
y
x
10
01
'
'
y
(x, y)
(x’, y’)
xx
x+p
y
y+q
これでも計算可能だが、行列の和の形となってしまう
6
平行移動・x軸方向に p 、y軸方向に q だけ平行移動
qyy
pxx
+=+=
'
'
⎟⎟⎠
⎞⎜⎜⎝
⎛+⎟⎟
⎠
⎞⎜⎜⎝
⎛⎟⎟⎠
⎞⎜⎜⎝
⎛=⎟⎟
⎠
⎞⎜⎜⎝
⎛q
p
y
x
y
x
10
01
'
'
y
(x, y)
(x’, y’)
xx
x+p
y
y+q
⎟⎟⎟
⎠
⎞
⎜⎜⎜
⎝
⎛
⎟⎟⎟
⎠
⎞
⎜⎜⎜
⎝
⎛=
⎟⎟⎟
⎠
⎞
⎜⎜⎜
⎝
⎛
1100
10
01
1
'
'
y
x
q
p
y
x同次座標表現
これでも計算可能だが、行列の和の形となってしまう
7
同次座標表現
座標点を、以下の形式で表現する形式(2次元の場合)
同次座標表現のメリット
・平行移動が、マトリックスの積で表現できる(前頁)。 ・ m=0 とすると、特定方向の無限遠点を表現可能。
⎟⎟⎟
⎠
⎞
⎜⎜⎜
⎝
⎛=
m
y
x
u)/,/( mymx・実際の座標値は、
⎟⎟⎟⎟⎟
⎠
⎞
⎜⎜⎜⎜⎜
⎝
⎛
=
m
z
y
x
u・3次元の場合は、
8
2次元変換マトリックス
操作 変換マトリックス 備考
平行移動 x 軸方向に p 、 y 軸方向に q だけ移動
拡大・縮小 原点に対して x 軸方向に a 倍、 y 軸方向に b 倍
回転 原点を中心に反時計方向に だけ回転
⎟⎟⎟
⎠
⎞
⎜⎜⎜
⎝
⎛
100
00
00
b
a
⎟⎟⎟
⎠
⎞
⎜⎜⎜
⎝
⎛
100
10
01
q
p
⎟⎟⎟
⎠
⎞
⎜⎜⎜
⎝
⎛ −
100
0cossin
0sincos
θθ
θθ
9
例題 : 左右対称図形を描く
10
移動→対称→移動:合成変換
①
② ③
④
⎟⎟⎟
⎠
⎞
⎜⎜⎜
⎝
⎛−
100
010
001⎟⎟⎟
⎠
⎞
⎜⎜⎜
⎝
⎛−−
100
10
01
b
a
⎟⎟⎟
⎠
⎞
⎜⎜⎜
⎝
⎛
100
10
01
b
a
対称移動
(a, b)
⎟⎟⎟
⎠
⎞
⎜⎜⎜
⎝
⎛
⎟⎟⎟
⎠
⎞
⎜⎜⎜
⎝
⎛−=
⎟⎟⎟
⎠
⎞
⎜⎜⎜
⎝
⎛
⎟⎟⎟
⎠
⎞
⎜⎜⎜
⎝
⎛−−
⎟⎟⎟
⎠
⎞
⎜⎜⎜
⎝
⎛−
⎟⎟⎟
⎠
⎞
⎜⎜⎜
⎝
⎛=
⎟⎟⎟
⎠
⎞
⎜⎜⎜
⎝
⎛
1100
010
201
1100
10
01
100
010
001
100
10
01
1
'
'
y
xa
y
x
b
a
b
a
y
x
平行移動平行移動
11
コンピュータによる図形描画
グラフィッ
クスライ
ブラリ
OS
データ
アプリケーション
プログラム
ディスプレイ
プロッタ
プリンタ
コンピュータ
12
ウインドウシステム コンピュータの画面出力 複数のタスクにウインド
ウを割り当て、画面出力を多重化
主なウインドウシステム ・ Quartz compositor (Mac OS X )
・ X Window System
( Microsoft Windows : OS にウインドウシステムが組込)
13
グラフィックスライブラリ アプリケーションとディスプレイとのインターフェ
イスを行う関数群
主なグラフィックスライブラリ ・ OpenGL
・ Direct2D, Direct3D
・ Quartz
(古くは、 CORE, GKS, PHIGS など)
14
本講義での画像表示
・画面表示 ・・・ X Window System
座標変換等の計算処理部分は自作し、線を引く等の基本的な描画のみを使用するため)
・保存 / 出力 ・・・ Postscript (EPS)
画像は文書ファイルへ貼り付けて残すものとする。(要すれば、その文書ファイルをプリンタで印刷)
15
X Window System
クライアント・サーバモデル と ネットワーク指向 クライアントとサーバの2つのプログラム間で分担して処理
・サーバ: ウインドウの生成・スクリーン表示、図形の出力、キーボードやマウスの入力処理
・クライアント: ウインドウの生成を要求、図形の出力を要求
クライアント サーバ
Request
Reply
Event
Error
16
X Window Systemデバイス独立、OS独立 ・デバイスに依存する部分はサーバが担当するので、アプリケーショ
ンはデバイスに依存しない形で書くことが可能
・サーバ側システムのOSやハードウエアに依存した操作は、サーバが処理を担当
・アプリケーションは、 Xlib という C 言語で書かれたライブラリの関数をコールし、コールされた Xlib の関数が X プロトコルを発生
X protocol
デバイス独立
OS依存
デバイス依存
OS
アプリケーション
Xlib
OS
サーバクライアント
17
X Window System
ソフトウエアの階層とツールキット、グラフィックスライブラリ
Xlib
アプリケーション
Widget
Xt intrinsics
OSF Motif
OpenGL / GLX
※ 本講義では、直接 Xlib をコールするアプリケーションを作成する。
18
X Window System
ビットマップ・ディスプレイを想定ビットマップディスプレイ: ピクセルと呼ばれる小
さな点(画素)の集合で画像を表示する装置
19
X Window System
ディスプレイ 上に画像を描くには、ディスプレイ 上のピクセルに個別の色を与える。
ピクセルの識別のために、ピクセル座標系を利用。
左上を原点(0,0)
20
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);}
21
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 );}
22
X Window SystemC 言語で作成した 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
23
X Window System で描画するプログラムを 実行実行する場合は、
● 「 X11 ( xterm )」上で実行する。
● ホスト計算機にログインする際に、
ssh -X ah.s.kyushu-u.ac.jp
とする。「 -X」を忘れないように。
● ホスト計算機にログインした時に、 「 .Xauthority でエラーが発生 」とかいうエラーメッセー ジが表示される場合は、個人の使用容量制限( 100MB? )をオーバーしている可能性がある。(次頁参照) → 不要なファイルを 削除。
だめなら、パソコンから一旦ログアウトしてみる。
●コンパイルする場合は、 「ターミナル」でも良いし、「 X11」でも「 -X」をつけなくてもよい。
Tips
これをきちんとやらないと、Segmentation なんとかというエラーメッセー ジが表示される。
24
自分がどれくらい容量を使っているかを確認する方法
● Finder で、自分の ID をクリックした後、
「ファイル 」メニュー → 「情報を見る」を選択
「サイズ」の欄を見る(少し時間がかかる)
Tips
25
プログラムは 正しそうなのに、コンパイルでエラーが出る場合
エラーメッセー ジに、「 UTF-16 がどうしたこうした」と出る場合、 Emacs でプログラムを 編集した際に、ファイルの 先頭に妙な文字が入ってしまっていることがある。( Emacs上では見えないため、原因がわかりづらい。)
確認方法 $ cat ファイル 名 として、画面上にファイルの中 身が表示されるので、先頭に「 ??」があるかどうかを 確認する。
対処方法 (「 ??」があった場合。根本的な解決ではないが。)
・ 上で、画面に表示されたものの「 ??」を除く部分をマウスで選択してコピーする。 ・ Emacs 等のエディタで、 新しいファイルの 編集を行い、コピーしたものを貼付けて、 別名のファイルとして保存する。
Tips
26
「ターミナル」で文字を大きくするには、
● 「ターミナル」メニュー → 「環境設定」
Tips
27
「 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
Tips
28
Postscript と EPS
Adobe社が開発したページ記述言語の1つ。
「ページ記述言語」とは、ページ上に印刷される文字、図形、画像などを記述するための言語。プログラ ミング言語でも あり、計算や繰り返しなどを記述する能力がある。
EPS (Encapsulated Postscript) とは、 Postscript を利用して作られた画像ファイルデータ形式の 1種であり、文書への貼り付け等を考慮されている。(文法は同じ)
29
Postscript による作画例バッテンを描く EPS ファイル
%!PS-Adobe-3.0 EPSF-3.0%%BoundingBox: 0 0 400 300%%Orientation: Portrait%%Pages: 1%%EndComments/mydict 120 dict defmydict begingsave 0.0 0.0 1.0 setrgbcolornewpath 10 10 moveto 300 300 lineto 300 10 moveto 10 300 linetostrokeshowpage%%Trailer%%EOF
上の図は、 ・左の内容のテキストファイルを作成 ・「○○ .eps」という名前で保存 ・ Powerpoint でそのファイルを 読み込んで挿入 ・外枠の線は、別。(領域明示のために追加) ・ Postscript では、左下が原点となる。
Postscript では左下が原点
30
本講義での使用についてX Window System や Postscript をそのまま使うのは若干面倒 ↓Fortran から簡単な呼び出しで描画できるようなサブルー チン群を用意した。 ただし、機能は限定している。
・ XCgraphics.c : Xlib を使って画面描画 ・ PSgraphics.f90 : 作画内容の EPS ファイルを作成
▷両者で、同じ呼び出しとしているため、 call する側は修正不要。 ・自作のプログラム + XCgraphics.c → 画面表示 ・自作のプログラム + PSgraphics.f90 → EPS ファイル出力 のように、コンパイル・リンク時に 取り替えればよい。
▷座標系は、 X Window System のもので共通 (左上が原点、 Y 軸正は下向き)。 ▷使用マニュアルを Web ページ上に置いてあるので、参照のこと。
31
本講義での使用について
プログラムのコン パイル・リンク方 法 (ホスト計算機上)
(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
32
XCgraphics.c, PSgraphics.f90 のサブルー チン (1/2)
機 能 Fortran からの呼び出し,引数
Create Window幅 screen_width高さ screen_height のウインドウを生成する.
call xcinit ( screen_width, screen_height )integer screen_width, screen_height
Set Color描画する色を設定する.0: black, 1: white, 2: blue, 3: red, 4: magenta,5: green, 6: cyan, 7: yellow, 8: orange
call xccolor ( cn )integer cn
Set line width線の太さを line_width ピクセルに設定する.
call xclinewidth ( line_width )integer line_width
Draw point座標 (x,y) に点を描く.( PS では非表示 . 下も同様)
call xcpoint ( x, y )integer x, y
Draw pointsnp個の座標 (xpoint(i),ypoint(i)) に点を描く.
call xcpoints ( xpoint, ypoint, np )integer np, xpoint(np), ypoint(np)
Draw line座標 (x1,y1),(x2-y2) 点間に直線を描く.
call xcline ( x1, y1, x2, y2 )integer x1, y1, x2, y2
Draw lines座標 (xpoint(i),ypoint(i)),i=1,np に与えられた点を結んだ折れ線を描く.
call xclines ( xpoint, ypoint, np )integer np, xpoint(np), ypoint(np)
33
XCgraphics.c, PSgraphics.f90 のサブルー チン (2/2)
機 能 Fortran からの呼び出し,引数
Draw rectangle座標 (x,y) に幅 width高さ height の長方形を描く.
call xcrect ( x, y, width, height )integer x, y, width, height
Fill rectangle座標 (x,y) に幅 width高さ height の長方形を塗りつぶす.
call xcfillrect ( x, y, width, height )integer x, y, width, height
Fill polygon座標 (xpoint(i),ypoint(i)),(i=1,np) を頂点とする多角形の内部を塗りつぶす.
call xcpolygon ( xpoint, ypoint, np )integer np, 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
Fill arc座標 (x,y) を中心として、幅 width高さ heightの円弧の内部を塗りつぶす.
call xcfillarc ( x, y, width, height, angle1, angle2 )integer x, y, angle1, angle2, width, height
Draw string座標 (x,y) に n 文字の文字列 str を出力する.
call xcstring ( x, y, str, n )integer x, y, ncharacter str
Close Windowウインドウを 閉じる.
call xcclose ( pi1 )integer pi1
34
XCgraphics.c, PSgraphics.f90 の使用例
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
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 ) sample4.f90
35
XCgraphics.c, PSgraphics.f90 の使用例
sample4.f90 の出力結果
XCgraphics.c による画面表示(画面のキャプチャ)※
PSgraphics.f90 による eps ファイルを貼付
※ 本資料の最終頁を参照。
36
XCgraphics.c, PSgraphics.f90 の使用例
両者の比較 ・・・ Postscript 形式は、拡大しても劣化しない。
XCgraphics.c による画面表示(画面のキャプチャ)
PSgraphics.f90 による eps ファイルを貼付
前頁の図を拡大したもの
37
参考文献 ~ より詳しく知りたいならば
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
38
課題 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 文書形式で提出(※次頁参照)
・提出先: [email protected] 宛てに電子メールにより提出のこと.ファイル 名は「自分の氏名 2.doc」等とすること.例えば、「谷泰寛 2.doc」
39
出力方法
ディスプレイ 上に表示して、作図結果を見る.
eps 形式でファイル出力 .それを「プレビュー」で開いて確認.( PDF に変換される)
Word に貼付ける場合は、「挿入」→「図」→「ファイルから..」→「 eps ファイルを 選択」.(古いバージョンの Word では、貼付後に枠だけしか表示されない場合があるが、 PDF 形式で出力(またはプリンタで印刷)すると、きちんと表示される.)
40
(参考) Mac OS X で画面のキャプチャ
「アプリケーション」→「ユーティリティ 」→「グラブ 」
command+ shift+3 : 画面全体 command+ shift+4を押した後、マウスで領域を選択 : 画面の一部(マウスで選択した領域) command+ shift+4を押した後、 マウスカーソルをウインドウに 載せて、 スペースバーを押して、マウスでクリック
: 一つのウインドウ(マウスで 選択したウインドウ)