Mathematica 9 is now available

Documentation / Mathematica / Mathematicaブック / Mathematicaの仕組み / グラフィックスとサウンド オブジェクトの構造  /

2.10.10 3Dグラフィックスの座標系

3Dグラフィックスでは,どこからどこまでが描画空間なのかを示すため直方体を使いプロット空間の境界を定義している.プロットするオブジェクトはこの直方体(ボックスと呼ぶ)の中におかれ,デフォルトで,ボックスの輪郭に線が描かれるので( Boxed -> Trueの設定が有効時)プロット範囲が視覚的に確認できる.また,オブジェクトがボックスの外にはみ出るようなことがあれば,はみ出た部分は表示されない.

ボックスに包含する , , 方向の各プロット範囲はオプション PlotRangeを使い指定する.2Dグラフィックスのときのように,デフォルトで自動設定(PlotRange -> Automatic)になっており, Mathematica内部のアルゴリズムで決定した「重要な部分」だけが描画の対象になる.つまり,部分によってはボックスの外に出てしまい表示されないものもある.そのようなことがないように,すべてを描画対象にするなら PlotRange -> Allと指定しておく.

多面体パッケージを読み込ませる.

In[1]:= <<Graphics`Polyhedra`

星形の20面体を作る.

In[2]:= stel = Stellate[Icosahedron[ ]] ;

星形20面体をボックス内に表示する.

In[3]:= Show[Graphics3D[stel], Axes -> True]

Out[3]=

プロット範囲を限定する.範囲外になり表示されない部分ができる.

In[4]:= Show[%, PlotRange -> {-1, 1}]

Out[4]=

2Dグラフィックスと同様に3Dでも「実座標」と「スケールされた座標」のどちらでもオブジェクトの位置指定ができる.スケールされた座標は書式 Scaled[sx, sy, sz]で指定し,各座標値は 0から 1の値を取る.ボックスの包含する空間は右手座標系で表される.

3Dオブジェクトの座標指定

ボックスの一角に立方体を配置させる.

In[5]:= Show[Graphics3D[{stel,
Cuboid[Scaled[{0, 0, 0}],
Scaled[{0.2, 0.2, 0.2}]]}]]

Out[5]=

ボックス内の実空間のどこに何を配置するかを指定したなら,次はボックス自体をどう表示させるか指定する.まず,ボックスの縦,横,そして,奥行き長の相対比を決める.これは,2Dプロットにおける縦横比の指定に相当する.3Dでは,縦横比の代りにボックス比のオプション BoxRatiosを使いボックスの各辺(つまり,座標軸の範囲)の相対的な長さを指定する.デフォルトで自動設定になっているので(BoxRatios -> Automatic),比は実座標の範囲から決定される.

3Dオブジェクトにおける境界ボックスの辺の長さ指定

z方向にボックスを引き伸ばして星形20面体を表示する.

In[6]:= Show[Graphics3D[stel], BoxRatios -> {1, 1, 5}]

Out[6]=

立体の描画では,どの位置からどの角度で物体を眺めるかといった位置関係を設定する必要がある.位置関係を表す値を「ビューポイント」と呼び,これはオプション ViewPointを使い指定する.

1.9.6に,よくあるビューポイントの設定例を示したので参考にするとよい.しかしそこにある設定位置にとらわれる必要はなく,どんな設定をしても構わない.実際,ボックスの外にある限りビューポイントはどこでもよい.

ビューポイントの指定書式は ViewPoint -> sx, sy, szである.ここで,各座標値はボックス中心を原点 ({0, 0, 0})とした特殊な座標系で与えられる.座標の取る値はボックスの最長辺を1とするスケールされた相対値とする.ボックスの他の辺の長さはボックス比(BoxRatios)から決定される.ボックスが立方体ならば,各座標軸は から の範囲を取る.ビューポイントは必ずボックスの外になければいけないことに注意する.

デフォルトのビューポイント指定,つまり, {1.3, -2.4, 2}で図を表示する.

In[7]:= surf = Plot3D[(2 + Sin[x]) Cos[2 y],
{x, -2, 2}, {y, -3, 3},
AxesLabel -> {"x", "y", "z"}]

Out[7]=

ビューポイントを境界ボックスの一角に近付けると図はこのようにみえる.

In[8]:= Show[surf, ViewPoint -> {1.2, 1.2, 1.2}]

Out[8]=

ボックスから離れるに従い遠近効果が小さくなる.

In[9]:= Show[surf, ViewPoint -> {5, 5, 5}]

Out[9]=

3Dオブジェクトの配置と方向付け

3次元グラフィックスでは,描画するオブジェクトをどこから眺めるかだけでなく,表示領域の中にどうオブジェクトを「枠組み」するかを指定する必要もある.後者の設定では2つのオプション, ViewCenter ViewVerticalを使う.

ViewCenterはオブジェクトのどこの点が表示領域の中心に現れるか指定するために使用する.中心点はスケールされた特殊座標( 0から 1)で与える.例えば, ViewCenter -> {1/2, 1/2, 1/2}と指定すれば,ボックスの中心と表示領域の中心を一致させることになる.ただし,ビューポイントの設定によってはボックスが対照に表示されないため,必ずしも表示領域の中心にボックスの中心をもっていけない.そのようなときは,自動設定(ViewCenter -> Automatic)にした方がよいかもしれない.

次に, ViewVerticalはオブジェクトのどの方向が表示領域で上を向くか指定するのに使う ViewVerticalの指定は,表示領域上でオブジェクトのどの方向が上を向くかをスケールされた座標で与えることである.デフォルト値は ViewVertical -> {0, 0, 1}で,これは 軸が表示領域の垂直方向になるよう表示することを意味する.

表示領域の中心を境界ボックスの一角に移動する.

In[10]:= Show[surf, ViewCenter -> {1, 1, 1}]

Out[10]=

軸が垂直方向に表示するように ViewVerticalを設定する.

In[11]:= Show[surf, ViewVertical -> {1, 0, 0}]

Out[11]=

このように, ViewPoint ViewCenter ViewVerticalの一連の設定は,物理的なオブジェクトをどう表示するか指示するために使う.ViewPointはオブジェクトを眺める位置を指定し,ViewCenterはオブジェクトのどこを中心に見るかを指定し,また,ViewVerticalは表示上の垂直方向がオブジェクトのどの方向になるかを指定する.

これら3つの条件設定は一種の座標変換とも考えられる.つまり,3つの条件設定を使い,実空間における物体の各座標を表示領域の座標に変換している,とも考えられる.

描画指定によっては,最終的な表示領域を3Dの座標系としてとらえられると都合がいい.そこで,表示面を 平面と平面ととらえ,表示面に対して垂直入射方向を正の 軸方向とする座標系を考え,それ を表示座標系と呼ぶことにする.この座標系の特徴は ViewPoint等の指定によらず空間が固定している. このため,次節で説明する擬似照明用の光源の配置指定に適している.

3Dグラフィックスの座標系

3Dオブジェクトの2Dのイメージを得たなら,次にそれをどう描画するかを指定する.グラ フィックスオプションは2Dグラフィックスで使ったものと同じである.つまり,縦横比のオプション AspectRatioを使い最終表示領域の縦横の尺度を変えたり,プロット領域のオプション PlotRegionを限定し表示面全体のどこの領域にイメージを表示させるかなどの指定ができる.

表示領域の縦横比を変更する.

In[12]:= Show[surf, Axes -> False, AspectRatio -> 0.3]

Out[12]=

グラフィックスの表示段階で,立体のイメージが描画領域に対してなるべく大きくなるように尺度が調整される.多くのグラフィックスではこの調整処理は好ましいが,オブジェクトの向きによってはイメージの大きさが変わってしまう場合がある.そのような効果が出てしまうときは, SphericalRegion -> Trueの条件を指定する.すると,境界ボックスを包含する球が想定され(ボックスの中心と球の中心はマッチする),最終イメージの尺度調整が球に対して行われるようになる.つまり,球全体が表示領域に収まるようスケールされる.

プロット領域を引き伸ばした形で表示する.

In[13]:= Show[surf, BoxRatios -> {1, 5, 1}]

Out[13]=

SphericalRegion -> Trueとすると, ボックスの周りに張った球がちょうど表示領域に入るようスケールが調整される.

In[14]:= Show[%, SphericalRegion -> True]

Out[14]=

このように, SphericalRegion -> Trueと指定しておくと,オブジェクトの大きさがそのオブジェクトの方向によらず一定となる.1つの立体オブジェクトをいろいろな角度からみたアニメーションをつくるときに便利になる.

3Dグラフィックスの表示尺度の調整



Any questions about topics on this page? Click here to get an individual response.Buy NowMore Information
THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.