3D 図形の描画法
Drawing of 3D Figures
作花 一志（京都情報大学院大学）
Kazushi Sakka（The Kyoto College of Graduate Studies for Informatics）

３Ｄ図形の描画法

'UDZLQJRI')LJXUHV
作花一志 京都情報大学院大学 .D]XVKL6DNND 7KH.\RWR&ROOHJHRI*UDGXDWH6WXGLHVIRU,QIRUPDWLFV）
AbstractDrawing methods of 3D figures are discussed by using gnuplot and R programming. Someapplications for regression analysis, differential equations and planetary orbits are presented.
Abstract
Drawing methods of 3D figures are discussed by using gnuplot and R programming . Some applications forregression analysis ,differential equations and planetary orbits are presented.
3D 描画には splot を用いる。最後の行の命令だけ

1．はじめにでもグラフは描ける（図 1）が他の行を加えるとカの描画範囲の定義,第3 行はカラーパレットの定義, 第ラフルな図を描くことができる（図 2）。第 1 行第4 行はカラー描画の指定を表している。第 5 行第 6 行, 第 3 行はカラーパレッ
2 行は x，y の描画範囲の定義
は細かいオプション指定で，それぞれサンプル解像度,トの定義，第 4 行はカラー描画の指定を表している。
網目表示なしを 第 5 行第 6 行は細かいオプション指定で，それぞれサンプル解像度 , 網目表示なしを指示する。

． はじめに
3 次元図形は想像するのも描くことも困難だがPC で描くには次の 3 つの方法がある。
3 次元図形は想像するのも描くことも困難だが PC
・ブラウザでz ＝ f (x,y) を Google 検索で描くには次の3 つの方法がある。
・gnulot z＝ｆ(x,y)を Google 検索・ブラウザで・R プログラミング・gnulot
第1 の方法は最も簡単ですぐに実行できるが関数形・Rプログラミング
第がｚ＝で与えられた場合だけである。第1 の方法は最も簡単ですぐに実行できるが関数形が2第3のｚ＝で与えられた場合だけである。
第2第3の方法で方法ではシステムをインストールして簡単なプログ
はシステムをインストールして簡単なプログラムコ
ラムコードを書いて実行することになるが，関数形ードを書いて実行することになるが，関数形が媒介変が媒介変数や極座標で表示されている場合また数値数や極座標で表示されている場合また数値で与えらで与えられる 3 次元ベクトルも描くことができる。
れる 3 次元ベクトルも描くことができる。

x＊＊2-y＊＊2- - -2．gnuplot で描く 3D 図形-２．JQXSORW で描く３' 図形 gnuplot は古くからよく使われるグラフ描画用の

フリーソフトである。描画オプションが非常に豊富
gnuplot は古くからよく使われるグラフ描画用のフリーソフトである。描画オプションが非常に豊富でで 2015 年に Ver5.0 が公開された。またプログラ
2015
年に Ver5.0 が公開された。またプログラミング=ミング機能は不十分であるが，増えつつある。z2-y2 を描機能は不十分であるが，増えつつある。z=xx2−y2 を描くには
くには-図１ z=x2-y2
図1

図１----

z = x2 − y2

z=x 2-y2

VHW[UDQJH>@
VHW\UDQJH>@
VHWSDOHWWHGHILQHG EOXHJUHHQUHG VHWSPG
VHWLVRVDPSOHVXQVHWVXUIDFHVSORW[ \ 34





3D 描画には splot を用いる。
最後の行の命令だけでもグラフは描ける（図 1）が他の行を加えるとカラフルな図を描くことができる（図2）。第 1 行第 2 行は x,yNAIS
Journal1

図２ z=x2-y2
図2z = x2 − y2
図 4 テキストファイルより
サイクロイド面を表示するには媒介変数（u,v）宣言
サイクロイド面を表示するには媒介変数（u,v）宣３．5で描く３'3．Rで描く図形
3D 図形をして言をして 関数のプロット xx=u-sin(u)= u − sin(u) 3-1 関数のプロット
y=v
グラフィックの方法はいくつかあるが，
y=v
Rでで 3D
3D グラフィックの方法はいくつかあるが，こR
ここではrgl ライブラリ，persp3d関数を使って鳥
zz=-1+cos(u)= − 1 + cos(u)こではrgl ライブラリ，persp3d関数を使って鳥瞰図をプロットする。
x2−y2をプロットする。
瞰図を描いてみよう。曲面は前述の関数を描いてみよう。曲面は前述の関数
z=x2-yz2 =である。
である。
 VHWSDUDPHWULF
 VHWXUDQJH>SLSL@
図 3 サイクロイド面
 OLEUDU\ UJO   VHWSDOHWWHGHILQHG EODFNEOXHJUHHQ [VHT OHQJWK    F\DQ\HOORZPDJHQWD  \[これは有名な最速降下曲面で寺院の屋根などに使わ VSORW XVLQ X YFRV X ZLWKSPG IIXQFWLRQ [\ ^[A\A`
れている。頂上に降った雨がこの曲面に沿って移動す]RXWHU[\I
図 4 テキストファイルよりるとき要する時間は最も短い。


SDUG
ZLQGRZ5HFWF  (u-sin(u)) v -1+cos(u)-.

SHUVSG[\]FRO F JUHHQJROG

-.
-.


-.
-. -.

３．5 で描く３' 図形
-. -.
-.
- -.
-.

 関数のプロット-. -.
-.
- . -"テキストファイル.txt" using 1:2:4-.
splot- という命令でテキストファイルの第 1 列，第 2 列，第R で 3D グラフィックの方法はいくつかあるが，こ- 4 列の数値を- x,y,z
他のこでは rgl ライブラリ，persp3d 関数を使って鳥瞰図- として表示することができる。
プログラミング言語で求めた数値をマトリックスとを描いてみよう。曲面は前述の関数 z=x2-y2 である。
して算出しデータファイルにすることが多い。図４は
図 3 サイクロイド面
渦状銀河 NGC2403 のスペクトルを makalli を用いて
これは有名な最速降下曲面で , 寺院の屋根などに輝度のデータファイルを作り3D 表示させたものであ
図 3 サイクロイド面
 OLEUDU\ UJO 使われている。頂上に降った雨がこの曲面に沿ってる。
 [VHT OHQJWK  移動するとき要する時間は最も短い。
z \[splot " テキストファイル .txt" using 1:2:4
これは有名な最速降下曲面で寺院の屋根などに使わ
IIXQFWLRQ [\ ^[A\A`という命令でテキストファイルの第 1 列，第 2 列，れている。頂上に降った雨がこの曲面に沿って移動す[\I  ]RXWHU
図 5 z=x2-y2 yるとき要する時間は最も短い。
第 4 列の数値を x，y，z として表示することがで SDUG ZLQGRZ5HFW F 22
図5z=x−yきる。他のプログラミング言語で求めた数値をマトSHUVSG [\]FRO F JUHHQJROG
2
リックスとして算出しデータファイルにすることが３－３３－２ 重回帰分析
多い。図 4 は渦状銀河 NGC2403 のスペクトルを3.-2重回帰分析
makalli を用いて輝度のデータファイルを作り 3Dy が与えられるとその点次元の場合ベクトル 線形2 2次元の場合ベクトルx,yx,が与えられるとその点列にsplot "テキストファイル.txt" using 1:2:4表示させたものである。
列に最もよくフィットする直線（回帰直線）が求まとして最もよくフィットする直線（回帰直線）が求まるようという命令でテキストファイルの第 1 列，第 2 列，第 るように，3線形代に，3 次元の場合は回帰平面が求まる。
lm 関数を用い次元の場合は回帰平面が求まる。lm"../data/2403-2D"using
1:2:4て重回帰係数を求め persp3d(x,y,z)で鳥瞰図を描く。
4 列の数値を x,y,zとして表示することができる。
他の 関数を用いて重回帰係数を求め
persp3d（x, y, z）で
プログラミング言語で求めた数値をマトリックスと 鳥瞰図を描く。
して算出しデータファイルにすることが多い。図４は 未知数DOPOP ]a[\ 重回帰３元
渦状銀河 NGC2403 のスペクトルを makalli を用いて;
FRHI DOP >@>@>@重回帰係数
輝度のデータファイルを作り 3D 表示させたものであY <[VHT OHQJWK  る。


図4

テキストファイルより\VHT OHQJWK  ]IIXQFWLRQ [\ 
FRHI DOP >@FRHI DOP >@ [FRHI DOP >@ \] RXWHU [\]I  2 2
図 5 z=x -y
SHUVSG [\]FRO DGG 7 2
NAIS Journal=
 dvGA の固有u1，u2，固有ベ
一般解v=35であり
c1,c2,c3

.
.

.

zyx
図6

最良近似平面

図7

黒点は与えられたデータ，赤点は予測値で最良近線形連立微分方程式ｖ ʼ ＝ Av の解の解くしかないが，解を 3D で表示すると興味ある似平面上にある。

結果が得られる。
3-3

初期値を X =1，Y =1，Z=1 として連立微分方程式

線形連立微分方程式の解を一次変換・固有値の応用として求める方法が [1] に紹介されている。微積
分と線形代数との融合問題として特筆される。
dX/dt = 2X − Y − Z

dY/dt = b* (Y − Z)dZ/dt =−X*Y + c*Y – Zをさまざまなパラメータについて解いてみよう。

dY/dt = − X + 3Y

解法は [2] に従って，ode 関数を用い，t は 0 から

dZ/dt = − X + 3Z
未知数ベクトル

dX/dt = a*X + Y*Z

係数の行列⎡ 2 −1 −1 ⎤A =⎜−130⎜⎜⎜0 3 ⎦ とすると⎣−1dv/dt ＝ Av である。
⎡ X⎤
v =⎜Y ⎜⎜ ⎜⎣Z ⎦100 までステップ 0.01 で計算し，結果は 10000 行4 列のマトリクスに収めた。
a = –4，b = –10，c = 25 の場合の解を図示すると10A の固有値をλ1λ2λ3，それに対する固有ベクトル2030

40 10 0を u1，u2，u3 とする。 固有値は eigen(A)$valuesより，固有ベクトルは eigen(A)$vectors より求まる。

一般解は c1，c2，c3 を任意定数として
v =c1u1exp(λ１t)+c2u2 exp(λ2t)+c3u3 exp(λ3t)

2010であり初期値を X =1，Y =1，Z = −１とすると0(c1，c2，c3) ＝ (1/3，1，1/3) であるから-10

X=(2exp(t) + exp(4t))/3Z

Y=(exp(t) +3 exp(3t) − exp(4t))/3
Z=(exp(t) − 3exp(3t) − exp(4t))/3となり t をパラメータとして 0 から 2 までグラフを描いたものが図 7 である。非線形の場合は数値的36NAIS Journal

YX-10a = −4b = −10c = 15 の場合は5101020304020151520Z

10100-105Z-20Y1210864Y2X

図8X3-4-20-1010020

非線形連立微分方程式の解

惑星の公転軌道

惑星はケプラーの法則に従い太陽を焦点とする楕
a = −4b = −10c = 5 の場合は円運動する。軌道の形状は軌道要素といわれる 6 つのパラメータで1234554Z435P'決 ま る [3]。 各軌 道 要 素 a，e，i，Ω，ω，M はPÁO

惑星ごとの定数SA
S……太 陽P……惑 星A……近日点Á……遠日点（正確には 2 体

3問題ではないの2るときは変化を考慮しなければならない）である。

1

楕円上の点はパラメータｔ（0 ≦ｔ≦ 2 π）を使って2Y
1で長期間にわた

図9

楕円軌道

楕円の長半径を a，離心率を e（0 ≦ e ＜１）とし，
X ＝ a*cos(t)―――Y ＝ a*sin(t) √(1-e2) と書ける。
これらを次式で太陽中心のｘｙｚ座標（日心黄道座標という）に変換する。

a の値を変化させても興味ある図が描かれる。
a = – 8/3，b = –10，c = 28 の場合にはカオスで有名なローレンツのアトラクターが描かれる⎛ｘ⎛ ＝⎛ cos Ω −sin Ω 0 ⎛⎛ 1 0 ⎛⎛ cos ω −sin ω⎛⎛ X−ae ⎛cos ω⎝⎝ Y ⎝⎜ y ⎜ ＝⎜ sin Ω cos Ω 0 ⎜⎜ 0 cos i⎜⎝ sin ω⎝ z ⎝ ＝⎝ 001 ⎝⎝ 0 sin i⎝

いずれも初期点は左端（1，1，1）であり，左方で収束する。

惑星は軌道面上で地球は黄道面上で公転し，両面が交わってできる角 i，Ω，ω は図 10 の通りである。
プロットするには plot3d(x，y，z) を使えばよい。
さらにこの図を planet というフォルダーに収めて Web にアップロードするには

NAIS Journal37

writeWebGL(dir="planet",width=700,height=500)

本研究は「国際化を考慮した社会的ネットワーキ
ング指向の次世代 e ラーニング基盤の開発（日本学術振興会科学研究費課題番号 16H03087，研究者代z面
軌道表・岡本敏雄氏）」の研究補助金のサポートの基で行われている。
【参考文献】[1] 田島一郎「線形代数」共立出版 p174, 970[2] 作花一志 NaisJ. Vol.10, p61, 2015[3] 作花一志 中西久崇「天文学入門」オーム社

近日点
太陽春分点xωΩ昇交点y2001

黄道面……………………………………………………………………
◆著者紹介

遠日点作花
図 10

日心黄道座標

8 惑星の軌道面はすべて異なるが，実際にはそれらの i は 10°以下なのでほぼ同じ平面上で，同方向に公転している。ただし彗星ではほぼ垂直（i 〜 90°）になったり，公転が逆方向（i ＞ 90°）になることも珍しくない。図 11 の扁平な楕円はハレー彗星の軌道である。
R プログラミングではこのような計算結果を視覚的に表示する時に有効である。

zc-xc--yc-

図 1138NAIS Journal-

8 惑星とハレー彗星の公転軌道

一志Kazushi Sakka

京都情報大学院大学教授。
京都大学理学研究科宇宙物理学専攻修了，京都大学理学博士 専門分野は古天文学，統計学。
元京都大学理学部・総合人間学部講師，
元京都コンピュータ学院鴨川校校長，
元天文教育普及研究会編集委員長