表 計 算 ソフト エクセル を 用 いたコンピュータグラフィックス 岡 山 理 科 大 学 情 報 科 学 科 澤 見 英 男 この 資 料 は,3 次 元 空 間 における 座 標 変 換 について 学 び, 表 計 算 ソフト エクセル の 計 算 / 作 図 機 能 を 用 いた3D-CGの 簡 単 な 演 習 を 通 して, 膨 大 なオブジェクトから 構 成 さ れているCGの 一 端 についての 理 解 を 深 めるべく 用 意 されたものである. 1 2D-CGの 作 図 例 座 標 の 回 転 および 平 行 移 動 については(2)3D-CGの 基 礎 知 識 にて 扱 うので,ここ ではエクセルを 用 いた 作 図 例 を 取 り 上 げ, 計 算 機 を 用 いた 製 図 法 2 次 元 座 標 上 のコ ンピュータグラフィックスの 一 端 を 実 感 してみることにする.エクセルを 立 ち 上 げ, 以 下 のワークシート 表 示 例 を 参 考 にしながら, 作 図 作 業 に 慣 れるための 練 習 から 始 めよう. 図 1 各 種 定 数 とコメントなどの 入 力 絶 対 参 照 し 用 いるセル$D$2 は 式 =pi()または 円 周 率 の 値 3.14159265358979323846 を, セル$E$2 には 半 径 R の 値 5 を 入 力 する. 次 に, 相 対 参 照 するセル A4 には 角 度 θ( 工 学 単 位 )の 初 期 値 0を,セル A5 には 式 =A4+10 を 入 力 する. 相 対 参 照 セル A5 をポインタが 太 い 十 文 字 になるようマウスで 指 示 し, 左 ボタンを 抑 えたままで 下 向 きにドラッグすると, 以 下 のような 結 果 が 得 られる. 角 度 θが 360 になるまで 行 う. 絶 対 / 相 対 参 照 は 行 とか 列 の 前 の 記 号 $の 有 / 無 で 識 別 できることから, 以 降 では, 絶 対 / 相 対 参 照 の 説 明 を 略 する. 図 2 作 図 する 範 囲 を 角 度 で 指 定 円 周 を 36 分 割 する 頂 点 のx 座 標 に 対 応 するセル B5 は 式 =$E$2*COS($A4/180*$D$2), 1
y 座 標 に 対 応 するセル C5 は 式 =$E$2*SIN($A4/180*$D$2)により, 座 標 値 を 計 算 する. 座 標 の 値 が 正 しく 求 まったことを 確 認 してからセル B4 と C5 を 選 択 する.ポインタが 太 い 十 文 字 になるようマウスで 指 示 し, 左 ボタンを 抑 えたまま 下 向 きにドラッグすることで, 自 動 計 算 機 能 により, 以 下 のような 結 果 を 得 ることができる. 角 度 θ が 360 になるまで 行 う. 図 3 絶 対 参 照 と 相 対 参 照 を 使 い 分 けた 座 標 の 自 動 計 算 上 の 例 では,セルB5の 値 は5(=5*cos(0))そしてセルC5の 値 は0(=5*sin(0))など と 正 しく 計 算 されている. 必 要 な 範 囲 で 正 しく 計 算 のできていることを 確 認 したら, 以 下 に 示 すように, 作 図 に 用 いる 頂 点 のxy 座 標 を 選 択 する. 次 に 挿 入 リボンを 選 択 し,その 中 の 散 布 図 プルダウンメニューから 散 布 図 ( 直 線 )を 選 ぶことにする. 図 4 作 図 メニューの 中 から 散 布 図 を 選 択 こうして 得 られた 結 果 に 手 を 加 えることにより, 以 下 のような 円 を 描 くことができる. グラフの 体 裁 については, 大 まかな 形 はマウスで 整 え,その 他 についてはキィワード 凡 例, 座 標 軸 など を 用 いヘルプを 使 って 調 べ, 好 みのものになるよう 仕 上 げると 良 い. 2
図 5 縦 軸 と 横 軸 のスケールを 調 整 して 描 画 必 要 な 個 数 だけ 頂 点 のxy 座 標 を 求 め, 幾 何 的 な 図 形 を 描 くことができる. 例 として, 螺 旋 状 の 図 形 とスピログラフ 様 の 描 画 例 を 示 す. 座 標 を 計 算 する 式 だけが 異 なっている. 図 6 螺 旋 の 描 画 3
図 7 スピログラフ 曲 線 を 折 線 により 近 似 して 描 画 する 例 を 幾 つか 見 てきたが, 同 じようにして 直 線 による グラフを 描 くこともできる. 例 として, 半 径 Rの 円 周 をN 等 分 して 得 られるN 個 の 頂 点 か ら 間 隔 がkのものを 選 び 直 線 で 結 ぶと,どのような 図 形 が 得 られるのかを 確 かめてみよう. 表 計 算 ソフトの 作 図 機 能 を 用 いた 製 図 作 業 に 親 しみを 感 じてきたのではないだろうか. 図 8 多 角 形 または 星 形 の 図 形 4
2 基 本 的 な 座 標 変 換 と 表 計 算 ソフトについて ここでは3 次 元 CGの 基 本, 座 標 の 回 転 操 作 と 平 行 移 動 について 理 解 しておこう. 先 ず, 3 次 元 座 標 における 点 (X,Y,Z)をx 軸 の 周 りで 角 度 αだけ 回 転 操 作 して 得 られる 点 の 座 標 (x,y,z)は, 行 列 Rx とベクトルにより 表 すと, 次 のように 計 算 することができる. x 1 0 0 X X y = 0 cosα sinα Y = Rx Y z 0 sinα cosα Z Z 同 様 にして,3 次 元 座 標 における 点 (X,Y,Z)をy 軸 の 周 りでβ 回 転 操 作 して 得 られる 点 の 座 標 (x,y,z)を, 行 列 Ry を 用 いて 次 のように 表 すことができる. x cosβ 0 sinβ X X y = 0 1 0 Y = Ry Y z sinβ 0 cosβ Z Z さらに,3 次 元 座 標 における 点 (X,Y,Z)をz 軸 の 周 りでγ 回 転 操 作 して 得 られる 点 の 座 標 (x,y,z)を, 行 列 Rz を 用 いて 次 のように 表 すことができる. x cosγ sinγ 0 X X y = sinγ cosγ 0 Y = Rz Y z 0 0 1 Z Z これらの 結 果 を 用 いると, 点 (X,Y,Z)を 最 初 はx 軸 の 周 りでα 回 転 し, 次 にy 軸 の 周 りで β, 最 後 にz 軸 の 周 りでγ 回 転 操 作 して 得 られる 点 の 座 標 (x,y,z)は 次 のように 表 すことが できる. 勿 論,3 個 の 行 列 をひとまとめにしてひとつの 行 列 により 表 すこともできる. x cosγ sinγ 0 cosβ 0 sinβ 1 0 0 X X y = sinγ cosγ 0 0 1 0 0 cosα sinα Y = RzRyRx Y z 0 0 1 sinβ 0 cosβ 0 sinα cosα Z Z 同 様 にして,3 次 元 座 標 における 点 (X,Y,Z)を 最 初 はz 軸 の 周 りでγ 回 転 し, 次 にy 軸 の 周 りでβ, 最 後 にx 軸 の 周 りでα 回 転 操 作 して 得 られる 座 標 (x,y,z)を 求 めることができる. x 1 0 0 cosβ 0 sinβ cosγ sinγ 0 X X y = 0 cosα sinα 0 1 0 sinγ cosγ 0 Y = RxRyRz Y z 0 sinα cosα sinβ 0 cosβ 0 0 1 Z Z ところで, 点 (X,Y,Z)をxyz 軸 方 向 に(a,b,c) 平 行 移 動 操 作 した 点 の 座 標 (x,y,z)を 次 の ように4 次 元 の 行 列 を 用 いて 表 すことができる( 同 次 座 標 系 における 平 行 移 動 ). x 1 0 0 a X y 0 1 0 b Y = z 0 0 1 c Z 1 0 0 0 1 1 この 同 次 座 標 系 を 用 いると,3 次 元 座 標 における 点 (X,Y,Z)をx 軸 の 周 りでα 回 転 操 作 し て 得 られる 点 の 座 標 (x,y,z)は 次 のようになる( 同 次 座 標 系 におけるx 軸 周 りの 回 転 ). x 1 0 0 0 X y 0 cosα sinα 0 Y = z 0 sinα cosα 0 Z 1 0 0 0 1 1 5
同 様 に, 点 (X,Y,Z)をy 軸 またはz 軸 の 周 りで 角 度 βまたはγ 回 転 操 作 して 得 られる 点 の 座 標 (x,y,z)は 次 のようになる( 同 次 座 標 系 におけるyまたはz 軸 周 りの 回 転 ). x cosβ 0 sinβ 0 X y 0 1 0 0 Y = z sinβ 0 cosβ 0 Z 1 0 0 0 1 1 x cosγ sinγ 0 0 X y sinγ cosγ 0 0 Y = z 0 0 1 0 Z 1 0 0 0 1 1 これより,3 次 元 座 標 における 点 (X,Y,Z)をx 軸 の 周 りで 角 度 α 回 転 操 作 した 後 にxyz 軸 方 向 に(a,b,c) 平 行 移 動 操 作 して 得 られる 点 の 座 標 (x,y,z)は 次 のようになる. x 1 0 0 a X y 0 cosα sinα b Y = z 0 sinα cosα c Z 1 0 0 0 1 1 さらに, 点 (X,Y,Z)をy 軸 またはz 軸 の 周 りでβまたはγ 回 転 操 作 した 後 に, 任 意 の 方 向 (d,e,f)または 別 の 方 向 (p,q,r)へと 平 行 移 動 操 作 した 点 の 座 標 (x,y,z)は 次 のようになる. x cosβ 0 sinβ d X y 0 1 0 e Y = z sinβ 0 cosβ f Z 1 0 0 0 1 1 x cosγ sinγ 0 p X y sinγ cosγ 0 q Y = z 0 0 1 r Z 1 0 0 0 1 1 このような 行 列 を 用 い, 軸 周 りの 回 転 操 作 とそれに 続 く 平 行 移 動 とをひとまとめに 表 す ことができる.ところで, 各 座 標 軸 周 りの 回 転 操 作 をひとまとめに 済 ませてからxyz 軸 方 向 (a,b,c)に 平 行 移 動 するようにすると, 回 転 軸 の 順 序 により 行 列 の 成 分 (A11,,A33) の 値 は 異 なるが, 一 般 に, 以 下 のような 形 式 で 表 すことができる.この 場 合, 回 転 を 表 す 成 分 は 計 算 手 順 により 変 化 するものの, 平 行 移 動 を 表 す 成 分 はそのままになる. x A11 A12 A13 a X y A21 A22 A23 b Y = z A31 A32 A33 c Z 1 0 0 0 1 1 一 方, 点 (X,Y,Z)をxyz 軸 方 向 (a,b,c)に 平 行 移 動 操 作 してからx 軸 の 周 りで 角 度 αだけ 回 転 操 作 して 得 られる 座 標 (x,y,z)は 次 のようになり, 演 算 の 順 序 により 結 果 の 異 なること が 分 かる( 非 可 換 ). 先 の 結 果 とは 異 なり, 回 転 操 作 によって 平 行 移 動 成 分 の 値 は 変 化 する. x 1 0 0 a X y 0 cosα sinα (bcosα csinα) Y = z 0 sinα cosα (bsinα + ccosα) Z 1 0 0 0 1 1 6
このような 行 列 およびベクトルを 用 いた 計 算 を 表 計 算 ソフト エクセル で 行 うのには, 以 降 で 示 すような, 絶 対 参 照 / 相 対 参 照 / 複 合 参 照 による 計 算 式 を 用 いると 便 利 である. 図 9 行 列 (Rx, Ry, Rz)を 定 義 する 例 として,3 次 元 の 回 転 操 作 を 表 す 行 列 (Rx, Ry, Rz)を 取 り 上 げる.ワークシート 上 で, 行 列 Rx の(1,1) 成 分 を 値 1に,(1,2) 成 分 と(1,3) 成 分 そして(2,1) 成 分 は 値 0に 設 定 する.さら に(2,2) 成 分 と(2,3) 成 分 を 式 =COS($A$3*PI()/180),=-SIN($A$3*PI()/180),(3,1) 成 分 は 値 0に,(3,2) 成 分 と(3,3) 成 分 を 式 =SIN($A$3*PI()/180),=COS($A$3*PI()/180) により 設 定 する( 図 9). 式 中 の 絶 対 参 照 セル $A$3 は,x 軸 周 りの 回 転 角 αを 工 学 単 位 に より 表 している. 工 学 単 位 による 角 度 は, 理 学 単 位 に 基 づき 三 角 関 数 (COS, SIN)を 計 算 し ていることから, 係 数 (π/180) 倍 する. 行 列 Ry と Rz についても 同 様 にして 設 定 する. 図 10 行 列 の 積 (RxRy, RyRx, RzRyRx)を 計 算 する 複 合 参 照 による 式 =$B5*H$5+$C5*H$6+$D5*H$7 により, 行 列 の 積 (RxRy)の(1,1) 成 分 をセル B12 上 に 求 める. 次 に,このセル B12 に 求 めた(1,1) 成 分 を, 残 る 8 成 分 に 対 応 したセルへとコピーし 行 列 の 積 (RxRy)を 得 る. 同 様 に, 行 列 の 積 (RyRx)の(1,1) 成 分 を 式 =$H5*B$5+$I5*B$6+$J5*B$7 によりセル H12 に, 行 列 の 積 (RzRyRx) の(1,1) 成 分 を 式 =$N5*H$12+$O5*H$13+$P5*H$14 によりセル N12 に 求 め,こ れらを 対 応 する 残 りのセルにコピーして, 行 列 の 積 を 得 る.ここで 示 した 例 では, 座 標 軸 周 りの 回 転 角 度 α,β,γいずれも45 度 になっている( 図 10).このような 表 計 算 の 機 能 を 用 いると, 行 列 とベクトルの 積 や 内 積 も 簡 単 に 計 算 できることを 注 記 しておく. 7
3 平 行 投 影 を 用 いた 簡 単 な3D-CGについて 3 次 元 空 間 における 対 象 物 (3Dオブジェクト)を2 次 元 平 面 上 に 線 画 として 描 くには, 3D-2D 変 換 が 必 要 となる.ここでは 簡 単 のため,3Dオブジェクトへの 回 転 操 作 のみ を 考 え,2D 変 換 には 平 行 光 線 による 投 影 ( 平 行 投 影 )を 用 いることにする.ところで, 投 影 面 の 定 義 は2 軸 で 済 むが,3D 空 間 での 扱 いは3 軸 を 必 要 とすることを 注 記 しておく. 平 行 投 影 では,3D 空 間 中 のオブジェクト( 対 象 物 )を 平 行 投 影 する 平 面 である 投 影 面 を, 原 点 とx 軸 およびy 軸 に 対 応 する2 本 の3D 単 位 ベクトルにより 定 義 する. 次 に,3 Dオブジェクト 上 の 点 を 表 す3D 座 標 を3Dベクトルとして 扱 い,この3Dベクトルと2 本 の3D 単 位 ベクトルそれぞれとの 内 積 を 求 め,この 値 を 投 影 面 上 の2D 座 標 とする. このように3D-2D 変 換 には,(1) 回 転 操 作 を3Dオブジェクト 上 の 点 である3D 座 標 (3Dベクトル)に 適 用 してから, 得 られた3Dベクトルと2 本 の3D 基 本 ベクトル( 例 えば e1 と e2)との 内 積 を 計 算 するか,(2) 回 転 操 作 を2 本 の3D 単 位 ベクトルに 適 用 し てから,3Dオブジェクト 上 の 点 でもある3Dベクトルとの 内 積 を 計 算 することにより2 D 座 標 を 求 める 方 法 がある( 右 手 座 標 系 もしくは 左 手 座 標 系 に 対 応 させることができる). ここでは 簡 単 のため, 視 点 の 移 動 と 向 きの 変 更 に 対 応 する,(2)2 本 の3D 単 位 ベクト ルに 座 標 変 換 を 適 用 する 方 法 を 用 いることにする.なお,3Dオブジェクト 上 の 点 をベク トルで 表 す 際 の 基 準 点 を 平 行 移 動 することで, 平 行 移 動 操 作 を 行 うことができる.これら のことから, 同 次 座 標 系 ではなく 通 常 の 座 標 系 を 用 いた 作 図 手 順 を 示 すことにする. 例 としてx 軸 およびy 軸 に 相 当 する,3D 基 本 ベクトル e1 と e2 を 選 ぶことにする. 1 0 e1= 0,e2= 1 0 0 これら2 本 の 基 本 ベクトルに 回 転 操 作 を 加 えることにより, 投 影 面 を 定 義 する2 本 の3D 単 位 ベクトル u1 と u2 を 得 ることができる. u11 u21 u1= u12,u2= u22 u13 u23 3Dオブジェクト 上 の 各 点 を 表 すベクトルとこれら 単 位 ベクトルとの 内 積 を 順 次 求 める ことにより, 投 影 面 上 の2D 座 標 が 決 まることから,3Dオブジェクト 上 の 各 点 の 連 結 関 係 に 従 って, 線 画 (ワイヤーフレーム)として 投 影 面 に3D 対 象 物 を 描 くことができる. 以 下 に 表 計 算 ソフト エクセル を 用 いた 上 記 の3D-2D 変 換 および 描 画 の 例 を 示 す. ここでは,3 次 元 空 間 における 対 象 物 として 螺 旋 状 に 巻 かれた 針 金 のようなものを 取 り 上 げることにする. 例 として,3D 対 象 物 上 の 座 標 を 以 下 のようにして 与 えている. X 1 + sin(θ/k) Rcos (θ) Y = 1 + sin(θ/k) Rsin (θ) Z sθ 螺 旋 形 1 個 であれば 一 筆 書 きにより 描 画 できることから,エクセルの 散 布 図 による 描 画 機 能 を 用 い,3D-CGの 雰 囲 気 を 十 分 味 わうことができる. 以 下 に 作 業 手 順 の 例 を 示 す. 8
図 11 3Dオブジェクトの 座 標 計 算 セル A5 には 開 始 角 度 0を 与 えておく.そして,セル A6 には 計 算 式 =A5 +10 を 入 力 し, 自 動 計 算 により 値 が1000 程 度 になるよう 下 向 きにドラッグする. セル B5 ではx 座 標 値 1 + sin(θ/k) Rcos θ を 計 算 する. 角 度 θはセル $A5 に 与 えられており,この 例 では0 度 ( 工 学 単 位 )となっているので,セル $D$2 の 円 周 率 (180 度 に 相 当 )を 用 いて 理 学 単 位 に 直 している.そして, 何 回 転 で 元 に 戻 るかを 表 す 変 数 k を 変 化 率 としセル $J$2]に 指 定 する.この 例 では26となる. 半 径 Rはセル $E$2 に 指 定 する. 同 様 にしてセル C5 ではy 座 標 値 1 + sin(θ/k) Rsin θ を 計 算 している.セル D5 では 工 学 単 位 による 角 度 とスケール 因 子 sを 用 い 式 =$A5*$F$2 によりz 座 標 値 の 値 sθを 計 算 するようにしている. 計 算 できていることを 確 認 したら,3D 座 標 セルB5からD5まで を 選 び, 下 にド ラッグしてコピーすることで 作 図 に 必 要 な 範 囲 に 関 する 自 動 計 算 を 行 うようにする.これ までの 操 作 により,3Dオブジェクトの 座 標 を 全 て 得 ることができる. 次 は2 本 の3D 基 本 ベクトル e1 と e2 をセル V7~V9 とセル V12~V13 に 設 定 しておく. 図 12 2 本 の3D 基 本 ベクトル e1 と e2 基 本 ベクトル e1 と e2 を 行 列 Rxによりx 軸 の 周 りでγ 度 回 転 させる. 行 列 Rxの 成 分 はセル T3~V6 に 設 定 する. 行 列 Rxの2 行 2 列 目 の 成 分 は 式 =COS($D$2*$I$2/180) 9
により 計 算 する.ただし,セル $I$2 は 回 転 角 度 γである. 同 様 にして 行 列 Rxの 2 行 3 列 目 の 成 分 (=-SIN($D$2*$I$2/180)),3 行 2 列 目 の 成 分 (=SIN($D$2*$I$2/180)) そして3 行 3 列 目 の 成 分 (=COS($D$2*$I$2/180))も 計 算 するようにしておく. 図 13 行 列 と 基 本 ベクトルとの 積 を 計 算 する 次 に 行 列 (Rx)と2 本 の 基 本 ベクトル(e1, e2)との 積 を 求 める.ベクトル(Rx)e1 のx 成 分 =$T$3*V$7+$U$3*V$8+$V$3*V$9),y 成 分 =$T$4*V$7+$U$4*V$8+$V$4*V$9, z 成 分 =$T$5*V$7+$U$5*V$8+$V$5*V$9 を 計 算 する. 同 様 にして(Rx) e2 のxyz 成 分 =$T$3*V$12+$U$3*V$13+$V$3*V$14,=$T$4*V$12+$U$4*V$13+$V$4*V$14, =$T$5*V$12+$U$5*V$13+$V$5*V$14 も 計 算 しておく. 行 列 とベクトルの 積 を 求 めるた め,ベクトル 成 分 3 個 についての 計 算 式 をセルの 絶 対 参 照 を 用 い 書 き 表 している. 先 に 示 したように, 成 分 ひとつだけを 式 により 計 算 し, 残 りは 自 動 計 算 により 求 めるこ ともできる. 例 えば,ベクトル(Rx)e1 のx 成 分 を 式 =$T3*V$7+$U3*V$8+$V3*V$9) により 与 え, 残 るy 成 分 とz 成 分 はこの 計 算 式 をコピーして 済 ませることもできる. 同 様 に (Rx)e2 のx 成 分 を 複 合 参 照 による 式 =$T3*V$12+$U3*V$13+$V3*V$14 により 計 算 するようにし, 残 り2 個 のyz 成 分 はコピーによる 自 動 計 算 で 済 ますことができる. ところで,ベクトル 成 分 の 計 算 式 を 全 て 相 対 参 照 により 書 き 表 すこともできる.この 場 合, 例 えばベクトル(Rx)e1 の 各 成 分 =T3*V7+U3*V8+V3*V9),=T4*V7+U4*V8+V4*V9, =T5*V7+U5*V8+V5*V9 の 計 算 式 は 随 分 とすっきりした 感 じになる.しかし, 行 列 やベ クトルを 用 いた 計 算 をこのような 相 対 参 照 だけによる 計 算 式 で 行 おうとすると,この 式 を コピーするだけではなく, 正 しい 式 へと 書 き 換 えるための 手 間 が 必 要 になる. 10
図 14 投 影 面 上 の 単 位 ベクトル u1 と u2 を 求 める 基 本 ベクトル e1 および e2 と 回 転 操 作 に 対 応 する 行 列 (Rx, Ry, Rz)との 積 を 順 次 求 める ことにより, 投 影 面 上 の 単 位 ベクトル u1 および u2 を 計 算 した. 上 に 示 した 例 では, 回 転 角 度 が 全 てゼロであることから u1 = e1 および u2= e2 となっている. 正 しく 計 算 でき ていることを 確 かめるには, 例 えば, 各 回 転 角 度 として 45( 度 )とか 90( 度 )さらには 180( 度 ) などの 値 を 入 力 し, 行 列 (Rx, Ry, Rz)の 各 成 分 や 基 本 ベクトル e1 および e2 との 積 がどうな るのかを 見 ると 良 いであろう.これで3D-2D 変 換 の 準 備 が 整 ったことになる. 3D 対 象 物 上 の 点 を 表 す3Dベクトルと, 投 影 面 を 表 す 基 本 ベクトル(u1, u2)との 内 積 は, 投 影 面 上 の2D 座 標 に 対 応 する.したがって,このような3D-2D 変 換 を 順 次 行 い, 得 られた2D 座 標 を 使 い 作 図 機 能 を 用 いて, 平 行 投 影 による 図 を 描 画 することができる. 図 15 基 本 ベクトルと3D 対 象 物 上 の 点 を 表 すベクトルとの 内 積 上 に 示 した 例 では,3D 空 間 中 の 点 を 表 すセル B5~D5 と 基 本 ベクトル u2 を 表 す 11
セル J7~J9 を 用 い,2D 平 面 上 でのx 座 標 に 相 当 するセル E5 をベクトルの 内 積 を 表 す 計 算 式 =$B5*$J$7+$C5*$J$8+$D5*$J$9 により 求 めている.y 座 標 に 相 当 するセル F5 は 式 =$B5*$J$12+$C5*$J$13+$D5*$J$14 により 計 算 している. 計 算 式 を, 投 影 面 上 の 単 位 ベクトル u1 および u2 を 絶 対 参 照 で,3D 対 象 物 上 の 点 を 表 す ベクトルを 絶 対 参 照 と 相 対 参 照 を 交 えた 複 合 参 照 で 書 き 表 している.また3Dベクトルは 全 て 相 対 参 照 することもできる.しかし, 複 合 参 照 により,セルの 再 利 用 は 容 易 になる. 角 度 θは10 度 刻 みで 与 えることにする. 先 に 述 べた 式 により,3D 対 象 物 上 の 点 をベ クトルとして 列 B~D に 自 動 計 算 により 求 める. 平 行 投 影 に 基 づく3D-2D 変 換 に より, 列 E~F に3D 投 影 面 上 の2D 座 標 値 を 求 めておく.こうして 得 られた2D 座 標 値 を 選 択 し, 散 布 図 として3D 対 象 物 の 平 行 投 影 図 を 描 くことができる( 図 16). 図 16 上 から 見 た 半 径 の 変 化 する 回 転 螺 旋 形 (α=β=γ=0) この3D 対 象 物 はz 軸 周 りで 半 径 を 変 えながら 回 転 させている 螺 旋 形 なので, 試 しにス ケール 因 子 s=0.03 とs=0.02 について,x 軸 周 りに+10 度 y 軸 周 りに-10 度 回 転 さ せてみることにする.これは, 投 影 面 をx 軸 周 りに-10 度 y 軸 周 りに+10 度 回 転 させ たことに 相 当 する.これは,ここで 示 した3D-2D 変 換 に 左 手 座 標 系 を 用 いていること を 意 味 している.この 例 では, 主 な 計 算 は3Dベクトルの 内 積 になっており, 従 って 計 算 機 への 負 荷 の 軽 い 計 算 量 の 少 ない 手 法 になっている( 図 15). 右 手 座 標 系 を 用 いて 作 図 するためには,3D 対 象 物 上 の 全 ての 点 を 表 す3Dベクトルに 対 し 行 列 (Rx, Ry, Rz)を 用 いた 回 転 処 理 を 行 う 必 要 がある.そのためには, 計 算 量 を 減 らす べく 回 転 操 作 を 表 す3 個 の 行 列 の 積 を 予 め 求 めておき,こうして 得 られた 行 列 により3D 12
ベクトルの 回 転 操 作 をまとめて 行 い,その 後 に, 投 影 面 上 の2 本 の 基 本 ベクトル(または 単 位 ベクトル)との 内 積 を 計 算 することにより3D-2D 変 換 する.それでも, 主 な 計 算 が 行 列 と3Dベクトルの 積 および3Dベクトルの 内 積 になるので, 負 荷 は 少 し 重 くなる. 右 手 座 標 系 か 左 手 座 標 系 のどちらを 用 いるかの 選 択 は 自 由 であるが,このような 工 夫 を するかしないかにより3D-2D 変 換 のための 計 算 量 は 大 幅 に 異 なってくる. 図 17a 回 転 操 作 により 少 し 傾 けた3D 対 象 物 (α=0,β=10,γ=-10,s=0.03) 図 17b 回 転 操 作 により 少 し 傾 けた3D 対 象 物 (α=0,β=10,γ=-10,s=0.02) 13
対 象 物 が 1 個 の 場 合 について, 平 行 投 影 を 用 いた3D-2D 変 換 により, 表 計 算 ソフト による 作 図 機 能 を 用 いたコンピュータグラフィックスの 例 を 見 てきた.このような 作 図 処 理 は, 今 日 良 く 用 いられているCGの 基 盤 技 術 を 構 成 している.そして, 一 般 的 な 表 計 算 ソフトによりこのような 背 景 となる 処 理 を 具 体 例 により 体 験 することを 通 して,3DCG をより 身 近 に 感 じることができるものと 考 えている. 4 マクロを 用 いた 作 図 について ここで 試 した 計 算 処 理 は, 見 かけ 上 並 列 に 行 われていること,そして 回 転 角 度 などのデ ータを 入 力 すると 同 時 にこの 値 を 用 いた 計 算 処 理 が 流 れるように(データーフロー 形 式 で) 行 われたことに 気 付 いたであろうか.CGのための 多 くの 処 理 は 並 列 化 が 容 易 になってお り,しかも 大 部 分 はデータ 入 力 されると 即 実 行 できるのが 特 徴 と 言 える.このデータ 入 力 に 関 して, 各 種 入 力 装 置 やファイルなどを 自 由 に 使 えるようにすると 便 利 である. データが 揃 えば 実 行 されるデータフロー 形 式 による 処 理 の 簡 単 な 例 として,マウスとキ ィボードおよび 時 計 を 用 いるものを 紹 介 しておく. 表 計 算 ソフト EXCEL のマクロ 機 能 によりワークシート 中 に 時 間 を 表 示 し,この 表 示 内 容 中 の 秒 を 用 いた 計 算 式 により 各 種 変 数 を1 秒 毎 に 計 算 し, 表 示 されている 図 を 秒 単 位 で 変 化 させるものである. マクロには, 例 として 以 下 のものを 用 いることにする.マクロの 名 称 DigitalClock に あるように,ワークシート 3D 螺 旋 中 のセル Q1 にデジタル 形 式 hh:mm:ss に より 時 間 表 示 をする. 変 数 TimeValue("00:00:00") は 標 準 時 変 更 用 のオフセットでもあ るので 省 略 しても 構 わない. 特 定 のセル 例 としてS1 に 秒 の 値 (0~59)だけを 取 り 出 す 式 =SECOND(Q1) を 書 いておくと 利 用 し 易 くなる.マクロの 作 成 編 集 実 行 は 開 発 タブからマクロを 選 んで 行 う.マクロの 動 作 や 停 止 などの 制 御 をマクロ 編 集 画 面 か らも 行 えるが, 秒 の 値 の 表 示 されているセルを 選 び, 直 接 に 式 を 書 き 換 え 変 更 したり 消 去 することにより 行 うのが 簡 単 かもしれない. Sub DigitalClock() With Sheets("3D 螺 旋 ").Range("Q1").Value = Time.NumberFormatLocal = "hh:mm:ss" End With Application.OnTime Now + TimeValue("00:00:00"), "DigitalClock" End Sub このマクロを 実 行 することによりワークシート 3D 螺 旋 中 のセル Q1 にデジタ ル 時 計 が 表 示 される. 他 のワークシートからこれを 参 照 し 利 用 するには, 式 ='3D 螺 旋 '!Q1 または ='3D 螺 旋 '!S1 を 用 いると 良 い. 秒 値 の 表 示 されているセル 例 えばT1 を 用 い, 回 転 角 度 であれば 計 算 式 例 えば=T1*6 などを 使 うと,データフロー 形 式 の 描 画 シス テムを 操 作 しているかのようにして, 簡 単 ではあるが 動 くCGを 試 すことができる. 14
5 複 数 の 線 を 用 いた 描 画 について 散 布 図 を 用 いて 複 数 の 対 象 物 を 描 くこともできる. 簡 単 な 例 として, 直 方 体 1 個 を4 組 の 四 辺 形 により 描 いたものを 示 す. 例 では, 斜 め 右 上 向 きがx 軸, 斜 め 左 上 向 きがy 軸, 上 向 きがz 軸 になるように 表 示 している. 結 果 ( 図 18)は, 頂 点 を 原 点 に 置 いた 立 方 体 を,x 軸 周 りで30 度,y 軸 周 りで15 度 回 転 させたものを 平 行 投 影 により 描 いている. 図 18 散 布 図 により 直 方 体 を 描 く 立 方 体 らしいものを 構 成 するため, 面 1から 始 めて 面 4の 順 に 描 いているので, 最 初 に 描 いた 辺 は 後 から 描 く 辺 により 重 ね 書 きされることになる. 面 4を 最 後 に 描 くことから, この 正 方 形 の 全 ての 辺 が 同 じ 色 の 線 で 描 かれていることを 確 認 することができる. 表 計 算 ソフトによる 作 図 なので,この 立 方 体 を 構 成 している4 面 のデータを 表 すため, 1 面 毎 にセル1 列 分 を 用 いている. 多 数 の 面 から 成 る 複 雑 な 対 象 物 を 描 こうとすると,ワ ークシートの 幅 はその 数 だけ 増 えて 行 くことから, 修 正 作 業 などは 煩 雑 になる. 一 方 描 画 用 ソフトウェアは,データ 表 現 と 管 理 および 加 工 や 再 利 用 などの 利 便 性 に 配 慮 している. なお,CG では 表 示 範 囲 などを 定 義 するためにビューポート 指 定 をするのが 一 般 的 である. しかし, 標 準 設 定 ( 軸 のオプション= 自 動 )では 全 範 囲 を 表 示 するようになっているため, 表 示 する 対 象 物 の 向 きなどにより 軸 の 比 率 が 変 わることになる.これに 対 し, 軸 のオプシ ョンを 固 定 に 変 えると, 最 小 値 および 最 大 値 などを 適 切 に 設 定 する 必 要 はあるものの,ビ ューポート 指 定 した 様 な 結 果 が 得 られることを 注 記 しておく(グラフィクツール->レイ アウト-> 軸 -> 主 横 軸 などと 辿 りオプション 設 定 をする). 15
6 透 視 投 影 を 用 いた 簡 単 な 作 図 について 視 点 (point of view ;POV)と 注 目 点 との2 点 により 注 目 点 を 通 る 投 影 面 を 定 義 する.これ より,3D 空 間 中 の 視 点 と 対 象 物 上 の 座 標 点 を 通 る 直 線 が 決 まることから,この 直 線 と 投 影 面 との 交 点 すなわち 平 面 上 の 座 標 が 得 られる.この 透 視 変 換 により,3D-2D 変 換 を 実 行 すると, 遠 近 感 のある 図 を 作 成 することができる. 以 下 にその 手 順 の 例 を 示 す. 簡 単 のため,x 軸 上 に 視 点 (d+d,0,0)と 注 目 点 (D,0,0)を 置 くことにする.これは yz 平 面 に 平 行 な 投 影 面 ( 注 目 点 は x 軸 上 )を 原 点 から 距 離 D 離 れた 位 置 に 設 定 し,x 軸 上 の 視 点 ( 観 測 者 )はこの 投 影 面 から 距 離 d だけ 離 れていることを 意 味 している( 図 19). 図 19 透 視 投 影 による 座 標 の 求 め 方 三 角 形 の 相 似 から,3D 対 象 物 上 の 点 (x,y,z)と 視 点 を 結 ぶ 直 線 と 投 影 面 との 交 点 (X,Y,Z) は 簡 単 な 計 算 により 求 めることができ,これらからyz 平 面 上 の2D 座 標 (Y,Z)を 得 る. X=D, Y=y*d/(d+D-x), Z=z* d/(d+d-x), 透 視 投 影 を 用 いたこの3D-2D 変 換 では, 先 ず 視 点 (d+d,0,0)と 注 目 点 (D,0,0)とにより yz 平 面 に 平 行 な 投 影 面 を 定 義 している. 次 に,3D 回 転 行 列 の 積 RzRyRx を 計 算 し,こ の 行 列 を 用 いて 回 転 操 作 をした 対 象 物 の3D 座 標 点 を 求 める. 最 後 に,こうして 得 られた 3D 座 標 点 のyz 座 標 成 分 から2D 座 標 (Y,Z)を 求 める. 以 下 にその 手 順 を 示 す. 座 標 軸 周 りの 回 転 を 表 す 行 列 の 積 を 順 次 求 める. 行 列 (Ry)(Rx)の 各 成 分 は 次 のようになる. 図 20 回 転 操 作 を 表 す 行 列 (Ry)(Rx)を 計 算 16
式 =$S3*W$3+$T3*W$4+$U3*W$5,,=$S5*W$3+$T5*W$4+$S*W$5 により 行 列 の1 行 1 列 から3 行 1 列 までの 成 分 を 計 算 する. 同 様 にして,1 行 2 列 から3 行 3 列 までを 式 =$S3*X$3+$T3*X$4+$U3*X$5,,=$S5*Y$3+$T5*Y$4+$U5*Y$5 により 得 る. 図 21 回 転 操 作 を 表 す 行 列 (Rz)(Ry)(Rx)を 計 算 次 に, 式 =$O3*S$8+$P3*S$9+$Q3*S$10,,=$O5*U$8+$P5*U$9+$Q5*U$10 により, 回 転 操 作 に 用 いる 行 列 (Rz)(Ry)(Rx)の1 行 1 列 から3 行 3 列 までの 成 分 を 得 る( 図 19). こうして 得 られた 行 列 (Rz)(Ry)(Rx)を 用 い, 対 象 物 の3D 座 標 (xp,yp,zp)から 回 転 操 作 後 の3D 座 標 (x,y,z)を 計 算 する.x 座 標 E5 を 式 =$O$8*$A5+$P$8*$B5+$Q$8*$C5+$J$2 により 計 算 する. 同 様 に,y 座 標 とz 座 標 の 値 を 式 =$O$9*$A5+$P$9*$B5+$Q$9*$C5+$K$2 と =$O$10*$A5+$P$10*$B5+$Q$10*$C5+$L$2 により 計 算 する( 図 22 X,Y1,Y2,Y3,Y4). ただし 式 の 中 にある 最 後 の 項 目,セル $J$2 はx 軸 方 向,セル $K$2 はy 軸 方 向, セル $L$2 はz 軸 方 向 に 関 する 平 行 移 動 を 表 している. 図 22 回 転 操 作 をした3D 座 標 の 計 算 17
先 に 触 れたように, 行 列 の 各 成 分 の 計 算 については,(1,1) 成 分 の 計 算 式 をコピーするこ とで 残 り8 成 分 が 求 まるよう, 絶 対 参 照 と 相 対 参 照 表 記 とを 混 在 させている. 相 対 参 照 の みによると, 同 じ 結 果 は 得 られるのものの,かなり 非 効 率 になることを 注 意 しておく. このような3D-2D 変 換 処 理 により, 作 図 することができる.3D 対 象 物 の 例 として 辺 の 長 さが2の 立 方 体 を 選 び, 中 心 を 原 点 に, 各 辺 を 座 標 軸 と 平 行 になるように 置 き, 注 目 点 (D=2,0,0)と 注 視 点 (d=3,0,0)を 決 め, 透 視 投 影 をする. 回 転 操 作 の 例 として,x 軸 周 り で30 度 回 転 させたものを 示 す.なお,12 角 形 を 追 加 し, 軸 の 書 式 設 定 メニュー 軸 の オプション, 線 の 色 などから 座 標 軸 や 目 盛 などを 描 かないように 設 定 している( 図 21). 図 23 立 方 体 を 平 行 移 動 または 回 転 操 作 して 透 視 投 影 7 レポート 課 題 指 示 された 課 題 に 従 った 内 容 のレポートを 作 成 し 提 出 してください. 提 出 する 課 題 としては 以 下 のようなものを 予 定 している. (1) 座 標 が 簡 単 な 式 により 与 えられる2D 図 形 を 描 き 解 説 せよ. (2) 座 標 が 簡 単 な 式 により 与 えられる3D 図 形 を 描 き 解 説 せよ. 図 24 各 種 図 形 メモ:この 資 料 は 商 業 目 的 外 なら 自 由 に 利 用 することができる. 関 連 の 資 料 が http://cafe.mis.ous.ac.jp/sawami/ にて 公 開 されている. 18