...

メディア処理演習 CG: 課題 3:Excel によるコンピュータグラフィクス 1

by user

on
Category: Documents
5

views

Report

Comments

Transcript

メディア処理演習 CG: 課題 3:Excel によるコンピュータグラフィクス 1
メディア処理演習 CG:
課題 3:Excel によるコンピュータグラフィクス 1
1. Excel 操作の基本
①
本演習では,Excel2010 の利用を前提としま
す.Excel2010 を起動すると図 1.1 のような画面が表
③
示されます.
タブとリボン
②
数式バー
④
セル
図 1.2 Excel ファイルの作成 名前ボックス
(2) 行列 A, B を定義する(図 1.3)
①セル A1 を選択し「A」と入力する
②セル A2 に「1」,セル A3 に「3」,セル B2 に「2」,
ワークシート
セル B3 に「4」を入力する.
③セル C1 を選択し「B」と入力する
シート見出し
④セル C2 に「5」,セル C3に「6」と入力する.
図 1.1 Excel の起動画面 コンピュータグラフィクス技術を学ぶにあたり,
行列演算は必要不可欠です.ここでは,Excel に組み
込まれている行列演算関数を使って見ましょう.
図 1.3 行列AとBの定義 1.1 行列積
MMULT 関数を使って行列積を計算することがで
きます.以下の行列 A, B の行列積を MMUL 関数を
(3) 行列積 AB を計算する
利用して計算しましょう.
"
"
!
!
1 2
5
, B=
.
A=
3 4
6
①セル D1 を選択し,「AB」と入力する
②行列積 AB を出力するセルの範囲 D2:D3 をマウス
ドラッグにより指定する
(1) Excel ファイルを作成する(図 1.2)
①ファイルタブを選択
②「新規作成」を選択
③「空白のブック」を選択
③数式バーに「=MMULT(」と入力し,ドラッグによ
④「作成」ボタンをクリック
り行列Aを指定する
1
④続いて「,」と入力し,ドラッグにより行列Bを指
定する.
1.3 行列の名前を使った計算
セル範囲に名前をつけることにより,行列計算を
行うときの数式バーへの計算式の入力が容易になる.
例として
1.1 で示し行列 A, B の積を考えよう.
⑤最後に「)」と入力し,Ctrl キーと Shift キーとを押
(1) Excel ファイルを新規作成し,1.1 と同様に A, B を
しながら Enter キーを押す.
定義する
1.2 転置行列
(2)行列 A, B にそれぞれ名前「A」と「B」をつける.
転置行列の計算には TRANSPOSE 関数を利用する.
行列 A の転置を計算してみよう.
①セル範囲 A2:B3 を選択し,名前ボックスに「A」と
入力する.
(1)前節と同様にして Excel ファイルを作成する
(2)前節と同様にして行列Aを定義する
②セル範囲 C2:C3 を選択し,名前ボックスに「B」と
入力する.
(3) 転置行列 AT を計算する
①セル C1 を選択し,「A transpose」と入力する.
②転置行列 AT を出力するセルの範囲 C2:D3 をマウス
ドラッグにより指定する.
(2) 行列積 AB を計算する.
①セル範囲 D2:D3 を選択する.
②数式バーに「=MMULT(A,B)」と入力し,Ctrl キー
と Shift キーとを押しながら Enter キーを押す.
③数式バーに「=TRANSPOSE(」と入力し,ドラッグ
により行列Aを指定する.
(演習 1.1)1.2 で計算した行列 A の逆行列と基の行
④続いて「)」と入力し,Ctrl キーと Shift キーとを押
列 A の積を,MMULT 関数を用いて計算し,その結
しながら Enter キーを押す.
果が単位行列となることを確認しよう.
2
2. VBA プログラミング
VBA とは Visual Basic Application の略であり,Excel
など Microsoft Office の各アプリケーションの処理を
自動化するためのプログラミング言語です.VBA を
使ってプログラミングすることにより, Excel の標
準機能ではない処理や標準機能だけでは実現できな
コードウィンドウ
い複雑な処理をユーザの機能として実装することが
できます.
2.1 Visual Basic Editor の起動
(4)プログラムを実行する
Excel 上で VBA プログラミングをするために,Visual
①「表示」から「Microsoft Excel」をクリックし,
Basic Editor(VBE)を使用します.VBE を使ってプ
Excel の画面に切り替える.
ログラムを記述し,実行する手順は以下の様になる.
②「開発」タブを選択し,
「マクロ」をクリックする.
(1) VBE を起動する
③VBE で作成したプログラム名(Test)を選択し,
「実
①「開発」タブを選択し,
「Visual Basic」をクリック
行」ボタンをクリックする.実行すると,以下の様
する.
な画面が表示されます.
「開発タブ」が無い場合はファイルタブのオプショ
2.2 プロシージャ
ンをクリックし,
「リボンのユーザ設定」内にある「開
Excel で VBA を使ってプログラミングを行う際に
発」にチェックを入れて下さい.
は,プロジェクトという単位でアプリケーションが
(2)標準モジュールを追加する
管理されます.プロジェクト内では複数のモジュー
①挿入をクリックし「標準モジュール」をクリック
ルを定義することができます.前節で使用した「標
する.
準モジュール」もその 1 つです.モジュールは更に
複数のプロシージャから構成されます(図 2.1).VBA
プログラミングでは,複数のプロシージャを連携さ
せ,モジュールとして適切に分類・管理することで
管理が簡易になり,理解しやすくなります.VBA に
は役割によって Sub プロシージャ,Function プロシー
(3) コードを記述する
ジャなどがあります.
①コードウィンドウ内に以下のコードを記述する.
Sub Test()
MsgBox "Hello"
End Sub
3
MsgBox "a + b = " & c
End Sub
プロジェクト
モジュール
' Function プロシージャの例
Function Sum(a, b)
c=a+b
Sum = c
End Function
モジュール
プロシージャ
プロシージャ
プロシージャ
プロシージャ
2.3 変数とデータ
2.3.1 変数
VBA では, Dim を用いて数値や文字列などの変
数を以下の様に定義できます.
図 2.1 プロジェクトとモジュールとプロシージャの
Dim 変数名
関係. value という名前の変数を定義し,その変数に①を代
2.2.1
入する場合は以下の様になります.
Sub プロシージャ
Dim value
value = 1
Sub と End Sub で囲まれた命令を実行するプロシ
ージャです.以下に Sub プロシージャの例を示す.
MsgBox はダイアログボックスに文字を表示する関
さらに,変数に対してデータ型を指定して定義する
数であり,「'」で始まる行はコメント行です.
場合は,以下の様になります.
' sub プロシージャの例
Sub Test()
a=1
b=2
Dim 変数名 As データ型
整数型(Integer 型)の value という名前の変数を定
義する場合には以下の様になります.
' a と b の和を計算しmその結果を c に代入する
c=a+b
Dim value As Integer
'加算結果 c を表示する
MsgBox "a + b = " & c
End Sub
表 2.1 おもなデータ型 2.2.2 Function プロシージャ
Function と End Function で囲まれた命令を実行
するプロシージャであり,実行した後の結果を返し
ます.以下に Function プロシージャを李使用した例
を示します.
' Function プロシージャの利用例
Sub Test()
a=1
b=2
データ型
名称(値の範囲など)
Boolean
ブール型(True または False)
Byte
バイト型(0 ~ 255)
Integer
整数型
Long
長整数型
Single
単精度浮動小数点型
Double
倍精度浮動小数点型
String
文字列型
Variant
バリアント型(あらゆるデータを格納
する)
' Sum プロシージャを呼び出し a と b の和を計算
する
Object
c = Sum(a, b)
オブジェクト型(ワークシートやセル
などのオブジェクトを格納する.)
' 加算結果 c を表示する
4
2.4.2 Select 文
VBA プログラミングで用いられる主な型を表 2.1 に
示します.データ型指定を省略した場合は,全ての
Select 文を利用して処理を分岐することができる.
データ型に対応した Variant 型とみなされます.
If 文とは違い,条件判断を行う 1 つの変数に対して,
複数の条件を指定した場合に以下の様に記述する事
2.3.2 配列
ができます.
Select Case 変数
Case 条件1
処理1
Case 条件2
処理2
Case Else
処理3(何れの条件も満たさなかった場合)
End Select
配列を定義する場合,要素を指定して以下の様に
宣言します.
Dim 変数名(要素数) As データ型
要素③の整数型の配列 values を定義する場合には以
下の様になります.
Dim values (3) As Integer
value が 90 以上なら「よくできる」,60 以上なら「ふ
また,配列にデータを代入する場合,以下の様に
つう」,それ以外では「がんばろう」と表実場合,以
「values(要素番号)」として要素ごとに値を指定する
下の様に記述します.
ことができます.
Select Case value
Case Is >= 90
MsgBox "よくできる"
Case Is >= 60
MsgBox "ふつう"
Case Else
MsgBox "がんばろう"
End Select
Dim values (3) As Integer
values (1) = 1
values (2) = 3
values (3) = 5
2.4 制御文
2.4.1 If 分
2.4.3 For 文
If 分を利用することによって,処理を分岐するこ
指定した回数だけ処理を繰り返すことができます.
とができる.処理を満たすときと見たさないときで
書き方は以下の様になります.
別の処理を行う場合は以下の様に記述する.
For カウンタ変数 = 初期値 To 最終値(Step 加算数)
繰り返し実行する処理
Next (カウンタ変)
If 条件 Then
処理1
Else
処理2
End If
1 から 10 までの奇数和(sum)を計算する場合は以
下の様になります.
複数の条件でそれぞれ別の処理をする場合は以下の
sum = 0
For i=1 To 10 Step 2
sum 0 sum + i
Next i
MsgBox "sum = " & sum
様に記述する.
If 条件1 Then
処理1
ElseIf 条件2 Then
処理2
Else
処理3
End If
2.4.4 Do 文
処理を繰り返すことができます.For 文と異なり,
条件式によって処理を繰り返すかどうかを判断しま
5
す.Do 文には,条件を満たす間繰り返し実行する Do
2.5.2 セルの操作
While 文:
Do while 条件
繰り返し実行する処理
Loop
Range プロパティまたは Cell プロパティを使って
参照することができます.
と条件を満たさない間繰り返し処理を実行する Do
Worksheets(ワークシート名).Range(セル)
Until 文:
Worksheets(ワークシート名).Range(セル範囲)
Do Until 条件
繰り返す実行する処理
Loop
Worksheets(ワークシート名).Cells(行番号,列番号)
があります.
また,参照したセルの Value を読み込み・書き出し
することによってセルに指定された値の読み込み,
2.4.5 Exit 文
セルへの値の代入ができます.以下に使用例を示し
処理を途中で終了することができます.終了する
ます.
'ワークシート Sheet1 のセル A1 に 10 を代入
Worksheets("Sheet 1").Range("A1").Value = 10
処理に応じて次の様にして Exit 文を利用します.
Exit Do
Exit For
Exit Sub
Exit Function
Do 文を終了する
For 文を終了する
Sub プロシージャを終了する
Function プロシージャを終了する
'ワークシート Sheet1 のセル A1:B2 に 10 を代入
Worksheets("Sheet 1").Range("A1:B2").Value = 10
'ワークシート Sheet1 のセル C2 に 10 を代入
Worksheets("Sheet 1").Cells(2, 3).Value = 10
'ワークシート Sheet1 のセル C2 に 10 を代入
Worksheets("Sheet 1").Cells(2, "C").Value = 10
2.5 VBA によるワークシートおよびセルの操作
2.5.1 ワークシートの操作
ワークシート名またはインデックス番号を指定し
'ワークシート Sheet1 のセル A1 の値を読み込む
X = Worksheets("Sheet 1"). Range("A1").Value
て,以下の様にワークシートを参照することができ
る.
参照したセルの Interior.Color に数値(RGB 値)を指
Worksheets(ワークシート名)
定することで,セルの色を変更することができます.
Worksheets(インデックス番号)
RGB 値は赤,青,緑それぞれ 0 ~ 255 の範囲の値を
もちます.
また,ワークシートの選択は,Select メソッドを利
RGB 値 = RGB(Red,
用します.Select メソッドは True, False を引数とし,
True を指定したときは,現在のワークシートを解除
Green,
Blue)
使用例は以下の様になります.
して指定したワークシートを選択し,False を指定し
'ワークシート Sheet1 のセル A1 の色を赤(255,0,0)
Worksheets("Sheet 1").Cells(1, 1).Interior.Color
= RGB( 255, 0, 0)
たときは,選択を解除せず指定したワークシートを
選択します.指定しない場合は,True とみなされま
す.以下に使用例を示します.
RowHight(行高)および ColummWidth(列幅)を指定す
'ワークシート Sheet 2 を選択
Worksheets("Sheet 2").Select
ることによって,セルのサイズを変更することが記
できます.特に,ワークシートの 1 行目および 1 列
'ワークシート Sheet 1 を選択し,その選択を解除せず
Sheet 2 を選択する
Worksheets("Sheet 1").Select
Worksheets("Sheet 2").Select False
目を変更することで,ワークシート内の行高,列幅
を一度に変更することができます.
6
行高に指定する値は文字の大きさ(ポイント),列幅
下の様に記述できます.

 s x 0
 0 s
y
S = 
 0 0
0 0
に指定する値は標準フォントの数字の文字数です.
3 次元空間での回転には様々な表現方法があるが,こ
以下に例を示します.
こでは最も簡単な軸まわりの回転について考える.x
'ワークシート Sheet 1 の列幅を 5(数字 5 文字文)
Worksheets("Sheet 1"). Rows(1).ColumnWidth = 5
軸まわりの回転行列 Rx, y 軸まわりの回転行列 Ry, z 軸
Worksheets(ワークシート名).Rows(1).ColumnWidth
Worksheets(ワークシート名).Columns(1).RowHeight
0
0
sz
0
0
0
0
1



 ,


(3.2)
まわりの回転行列 Rz はそれぞれ回転角を θ x , θy , θz と
'ワークシート Sheet 1 の行高を 18(18 ポイントの文
字高)
Worksheets("Sheet 1"). Columns(1).RowHeight = 18
すると以下の通りになります.

0
0
 1
 0 cos θ − sin θ
x
x
R x = 
 0 sin θ x cos θ x
0
0
0
0
0
0
1



 ,


く塗りつぶす.「3.1.xls」を完成させなさい.

 cos θy

0
Ry = 
−
sin
θy

0
0
0
0
1



 ,


3. 幾何変換

 cos θz
 sin θ
z
Rz = 
 0
0
0
0
0
1



 .


(演習 1-1)セル範囲 A1:A20 に 1 から 20 までの自
然数を入力し,3 の倍数又は3のつく数値のセルを赤
表示対象となるデータのスケーリング(拡大・縮
0 sin θy
0
0
0 cos θy
0
0
− sin θz
cos θz
0
0
0
0
1
0
(3.3)
小),平行移動,回転操作は幾何変換と呼ばれ,行列
演算をもとに計算されます.
3.2 Excel による幾何変換
3.1 合成変換
1 章で述べた行列演算を用いて3次元空間上の点
スケーリング,平行移動,回転を統一的に扱うこ
の幾何変換について確認しよう.新規ファイルを作
とによって,スケーリングと平行移動,回転と平行
成した後,以下の手順に従って幾何変換用のワーク
移動といった複数の変換をまとめて計算することが
シートを作成します.
できます.これを合成変換と言います.スケーリン
(1) ワークシートを準備する
グや回転は行列の積で表される一方で平行移動はベ
①シート見出しをダブルクリックする
クトルの和として計算されるため,点の座標に1次
②ワークシート名を「Transformation」とする.
元加えた( x, y, z, 1 )という座標(同次座標)を考えま
す.(x, y, z) を x 軸方向に tx, y 軸方向に ty, z 軸方向に
tz 傾向移動するための平行移動行列 T は以下の様に表
すことができます.

 1
 0
T = 
 0
0
0
1
0
0
0
0
1
0
tx
ty
tz
1



 .

(2) 幾何変換パラメタを定義する
(3.1)
①セル B2 に「After transformation」と入力する.
②セル B3 に「scaling」と入力し,セル C3, D3, E3 に
同様にして,x 軸方向の倍率 sx, y 軸方向の倍率 sy, z
スケーリングパラメータ sx, sy, sz の初期値 1, 1, 1 を
軸方向の倍率 sz,を用いて,スケーリング行列 S は以
入力する.
7
③セル B4 に「transformation」と入力し,セル C4, D4,
E4 に平行移動パラメタの初期値 0, 0, 0 を入力する.
④セル B5 に「rotation」と入力し,セル C5, D5, E5 に
回転パラメタ θ x , θy , θz の初期値 0, 0, 0 を入力する.
ただし,指定する角度の単位は度とする.
(3) パラメタの定義領域を編集する
①セル範囲 B2:E5 を選択する.
②「ホーム」タブの「フォント」から「罫線」アイ
コン横の小三角形をクリックする.
③表示されている罫線の中から「外枠太罫線」を選
(4) スケーリング行列 S を定義する
択する.
①セル L2 を選択し,「S」と入力する.
②下表のようにセル範囲 L3:O6 に値を入力する.
L
M
N
O
3
=C3
0
0
0
4
0
=D3
0
0
5
0
0
=E3
0
6
0
0
0
1
③セル範囲 L2:O6 および L2:O2 に「外枠太罫線」を
かける
④セル範囲 L3:O6 に対し,
「灰色(白,背景1,黒+
基本色 25%)」をつける
④同様にして,セル範囲 B2:E2 および C3:E5 を選択
し,「外枠太罫線」をかける
⑤セル範囲 C3:E5 を選択し,
「フォント」から「塗り
つぶし色」アイコン横の小三角形をクリックし,
「黄」
を選択する.
(5)平行移動行列 T を定義する
①セル P2 を選択し,「T」と入力する.
②セル範囲 P3:S6 に下表のように値を入力する.
8
P
Q
R
S
3
1
0
0
=C4
4
0
1
0
=D4
5
0
0
1
5
0
0
0
表 3.1 回転行列 Rx AB
AC
AD
AE
2
=COS(RADIANS(E5))
=-SIN(RADIANS(E5))
0
0
=E4
3
=SIN(RADIANS(E5))
=COS(RADIANS(E5))
0
0
1
4
0
0
1
0
5
0
0
0
1
③S と同様に,罫線,色をつける.
(7) 各行列に名前をつける
①スケーリング行列 S(セル範 L3:O6)に名前「S_xyz」
をつける
②同様にして平行移動行列 T(セル範囲 P3:S6)に名
(6) 回転行列 Rx, Ry, Rz を定義する
前「T_xyz」,回転行列 Rx(セル範囲 T3:W6),回転
①セル T2, X2, AB2 に対して,それぞれ「R_x」「
,R_y」,
行列 Ry(セル範囲 X3:AA6)回転行列 Rz(セル範囲
「R_z」と入力する.
AB3:AE6)にそれぞれ名前「R_x」,「R_y」,「R_z」
②下表の表に従って値を入力する.ただし,COS お
をつける.
よび SIN は,引数で指定される角度(ラジアン)の
(8)合成変換行列 M を定義する
コサインおよびサインの値を返す関数である.また,
①セル G2 を選択し,「M」と入力する.
RADIANS は引数で指定される数値(度)をラジアン
②行列 S, T, Rx, Ry, Rz を組み合わせて合成変換行列
に変換する関数である.
M を作成する.ここでは,Rx と Ry の積を合成変換
③S と同様に,罫線,色をつける.
として計算する.セル G3:J6 を選択し,数式バーに
表 3.1 回転行列 Rx 「=MMULT(R_x, R_y)」と入力し,Ctrl キーと Shift
T
U
V
W
キーとを押しながら Enter キーを押す.
2
1
0
0
0
③セル範囲 G2:J6 および G2:J2 に「外枠太罫線」をか
3
0
=COS(RADIANS(C5))
=-SIN(RADIANS(C5))
0
け,G3:J6 に対して「薄い青」を色つけて名前に「M」
4
0
=SIN(RADIANS(C5))
=COS(RADIANS(C5))
0
と入力する.
5
0
0
0
1
(9) 点 P を幾何変換する
①点 P を定義する.ここでは,点 P の座標を(8, 3, 0)
表 3.2 回転行列 Ry とする.セル B8 を選択し,
「P」と入力する.続いて
セル B9~12 にそれぞれ「8」「3」「0」「1」と入力す
X
Y
Z
AA
2
=COS(RADIANS(D5))
0
=SIN(RADIANS(D5))
0
る.
3
0
1
0
0
②セル範囲 B9:B12 を選択し,名前「P」をつける.
4
=-SIN(RADIANS(D5))
0
=COS(RADIANS(D5))
0
③幾何変換後の点 P'の座標を計算する.セル C8 を選
5
0
0
0
1
択し,「P'」と入力する.続いてセル範囲 C9:C12 を
選択し,数式バーに「=MMULT(M,P)」と入力し,Ctrl
キーと Shift キーとを押しながら Enter キーを押す.
9
Fly UP