グラフィックスとサウンドオブジェクトの構造

グラフィックスオブジェクトの構造
「グラフィックスとサウンド」において,PlotListPlot等のプロット関数の使い方を説明した.ここでは,プロット関数で生成したグラフィックスがWolfram言語内部でどのような形式で保管されているか,また,より複雑なグラフィックスを作成するにはWolfram言語をどのようにプログラムしたらよいかを説明していく.
基本的にグラフィックスはプリミティブ(基本単位)の集合体である.これはすべてのグラフィックスで共通である.プリミティブとはグラフィックスの各基本要素に当たるPointLinePolygon等のオブジェクトのことである.また,RGBColorThicknessの指示子もプリミティブに当たる.
データ点を生成した後,プロットする:
グラフィックスをInputForm(入力形)に変換し,グラフィックスが内部でどう表現されているか見てみる.グラフィックスプリミティブであるPointの座標で各データ点が表されており,また,グラフィックス設定値も与えられている:
グラフィックスとして自立する要素は,グラフィックスオブジェクトとして扱われる.グラフィックスオブジェクトには各型に応じていくつか種類があり,そのひとつひとつには型を指定する頭部が付いている.
Graphics[list]
通常の2Dグラフィックス
Graphics3D[list]
通常の3Dグラフィックス
グラフィックスオブジェクトの種類
「グラフィックスとサウンドオブジェクトの構造」で説明したPlotListPlot等のプロット関数はすべてグラフィックスオブジェクトを組み合せることで最終的に表示するグラフィックスを構成している.
ユーザ定義のグラフィックスオブジェクトを組み合せ,上記以外のグラフィカルイメージが作成できる.さらに,グラフィックスオブジェクトも式として表すので,標準的なWolfram言語の関数を使いグラフィックスをいろいろ操作できる.
グラフィックスオブジェクトは,Wolframシステムフロントエンドにより,出力の際のグラフィックスとして自動的にフォーマットされる.グラフィックスはPrintコマンドを使った二次的出力として出力されることもある.
GraphicsオブジェクトはWolfram言語で計算されるが,その出力はセミコロンを使うことで表示されない:
Printコマンドを使うと,二次的出力が生成できる.その場合は二次的出力であるため,Out[]ラベルは付かない:
Show[g,opts]
新しいオプションを opts で指定して,グラフィックスオブジェクトを表示する
Show[g1,g2,]
g1 からのオプションを使って,いくつかのグラフィックスオブジェクトを組み合せて表示する
Show[g1,g2,,opts]
新しいオプションを opts で指定していくつかのグラフィックスオブジェクトを表示する
グラフィックスオブジェクトの描画
Showは,既存のグラフィックスのオプションを変更するため,あるいは複数のグラフィックスを組み合せるために使うことができる.
以下ではShowを使い,既存のグラフィックスのBackgroundオプションを調整する:
これはShowで2つのグラフィックスを組み合せる. PlotRangeおよび他のオプションに使われる値は,最初のグラフィックスに設定された値に基づいている:
ここでは,グラフィックス全体に対して新しいオプションが指定されている:
グラフィックス指示子
グラフィックスオプション
グラフィックス変更のための局所的手法と大域的手法
グラフィックスプリミティブをもとにしたグラフィックスの作成では,普通,各種の修正操作を繰り返すことで最終的な形を得る.Wolfram言語では修正作業のため2つの方法が用意されている.そのひとつは,グラフィックスにグラフィックス指示子を与える方法である.グラフィックス指示子をグラフィックスプリミティブのリストに加えると,指示内容が続くグラフィックス要素に適用される.すると,グラフィックス単位で描画要素をどう表示するか指定できるようになる.グラフィックス指示子の一例にRGBColorがある.
Polygonグラフィックスプリミティブを含む2Dのグラフィックスオブジェクトを生成する:
InputFormは完全なグラフィックスオブジェクトを表示する:
上で作成されたグラフィックスプリミティブを使い,グラフィックス指示子RGBColorEdgeFormを追加する:
グラフィックス指示子を与えることで,特定の描画要素をどう表示したらよいかを指定することができる.しかし,多くの場合,グラフィックス全体の構図等の設定は大域的に変更したい.設定を変更するにはグラフィックスオプションを使う.
グラフィックスオプションFrameを加えることで,グラフィックス全体の見栄えを修正することができる:
InputFormを使い調べてみると,オプションが結果のGraphicsオブジェクトに含まれていることが分かる:
Showではグラフィックスオプションを指定できる.オプションの設定値をいろいろ変えながら同じプロットデータをもとにグラフィックスをいろいろと再表示でき,違った描画条件下でグラフィックスがどう映るかをすばやく見ていけるので便利である.
注意点として,Showの返すグラフィックスオブジェクトは表示したままのものである.つまり,Showで設定条件を変更した場合,変更した条件もShowの返すオブジェクトに入る.このため,再度同じオブジェクトにShowを使うと,設定条件を変更しない限り,前と同じ仕様で表示されることになる.新たに設定値を指定すれば,もとの値は上書きされる.
Options[g]
グラフィックスオブジェクトに指定されている全オプションの値をリストアップする
Options[g,opt]
指定されている特定オプションの値を出力する
グラフィックスオブジェクトに付随したグラフィックスオプションの参照
グラフィックスオプションの中には,グラフィックスを生成する関数を可視化するオプションとして使えるものもある.右辺にAutomaticを取ることのできるオプションは,可視化関数により特定の値へと分解されることがある.
プロットしてみる:
Wolfram言語は結果のグラフィックスのPlotRangeに対する明示的な値を計算するために,内部アルゴリズムを使う:
FullGraphics[g]
グラフィックスオプションによって仕様を指定したオブジェクトをプリミティブとしてリスト形式で出力する
グラフィックス構成の詳細参照
グラフィックスオプションを指定すると,Wolfram言語は指定された通りに,軸等のオブジェクトを自動的に描画する.Axesがよい例である.オブジェクトはグラフィックスプリミティブの特定のリストによってではなく,オプション値によってのみ表される.これらのオブジェクトをグラフィックスプリミティブのリストとして表すことは,ときに有用なものである.関数FullGraphicsはオプションを使わずに,特定のプロットを生成するのに必要なグラフィックスプリミティブのリストを生成する.
数値データをプロットする:
FullGraphicsを使い座標軸等のプリミティブも含むグラフィックスオブジェクトを生成する:
2Dグラフィックスの要素
Point[{x,y}]
座標 xy に点を描く
Line[{{x1,y1},{x2,y2},}]
座標点{x1,y1}, {x2,y2}, を結ぶ線を引く
Rectangle[{xmin,ymin},{xmax,ymax}]
領域を塗り潰した長方形を描く
Polygon[{{x1,y1},{x2,y2},}]
領域を塗り潰した多角形を描く
Circle[{x,y},r]
半径が r で,中心座標が xy の円を描く
Disk[{x,y},r]
領域を塗り潰した,半径が r で,中心座標が xy の円板を描く
Raster[{{a11,a12,},{a21,},}]
グレースケール0から1の明暗度の方形セルの配列模様を描く
Text[expr,{x,y}]
文字列 expr を,その中心が座標 xy を取るように配置する(「テキスト用グラフィックスプリミティブ」を参照のこと)
2Dグラフィックスの基本要素
線のプリミティブをオブジェクト化しておく:
2Dグラフィックスとしてオブジェクトを描画させる:
座標軸を加える:
関数Plot等によって生成したグラフィックスプリミティブから構成されたグラフィックスオブジェクトは,1つのグラフィックスにまとめることができる.
プロット関数でグラフを作る:
前に作った折れ線のオブジェクトと合成させる:
複数のグラフィックス要素を合成したいときは,要素をリスト形式で入力すればよい.2Dグラフィックスでは,入力した順序で要素が描画される.後で入力したものは先に入力したものの上に重ねて描かれるので注意する.
2つの青い長方形(Rectangle)要素である:
折れ線を先に入力し,その後に長方形を入力する.表示させると,長方形は折れ線にかぶさるように描かれる:
多角形のプリミティブPolygonを2D座標点のリストで入力する.各座標点が多角形の頂点を表し,最初と最後の座標点が結ばれ多角形が完結する.多角形の領域は塗り潰される.
正5角形の頂点の座標を計算しておく:
5角形を描画する.標準縦横比を使っているので,やや潰れてみえる:
Point[{pt1,pt2,}]
pt1pt2からなるマルチポイント
Line[{line1,line2,}]
line1line2からなるマルチライン
Polygon[{poly1,poly2,}]
多角形 poly1poly2からなる多重多角形
複数の要素を取ることのできるプリミティブ
多数の点を表すためには,1つのPointプリミティブの内部に座標のリストを置くとよい.同様に,多数の線や多角形も座標のリストのリストとして表すことができる.このように表現すると効率的であり,通常Wolframシステムフロントエンドでより速く描画される.RGBColorのようなグラフィックスプリミティブはプリミティブ全体の集合に一様に適用される.
すでに定義した座標集合に基づく多重多角形を生成する:
青で彩色されたマルチポイントである:
Circle[{x,y},r]
半径 r,点{x,y}を中心とする円
Circle[{x,y},{rx,ry}]
半軸 rx および ry の楕円
Circle[{x,y},r,{theta1,theta2}]
円弧
Circle[{x,y},{rx,ry},{theta1,theta2}]
楕円弧
Disk[{x,y},r]
, etc.
塗り潰された円板
円と円板
半径2である2つの円を表示する:
座標軸の正方向に行くに従い 軸方向に増やし, 軸方向に縮小する:
円や楕円の弧も描画できる.どちらの形の弧でも,始点と終点を指定する2つの角度が必要である.角度は反時計回りに計ったもので,ラジアンで指定する.角度ゼロは 座標軸上の正方向を指す.
原点を中心とする140°のクサビ形を描く:
Raster[{{a11,a12,},{a21,},}]
グレースケール0から1の明暗度の方形セルからなる縞模様を描く
Raster[{{{a11,o11},},}]
不透明度が0から1間までのグレースケールの配列
Raster[{{{r11,g11,b11},},}]
RGB値が0から1までの配列
Raster[{{{r11,g11,b11,o11},},}]
不透明度が0から1までのRGB値の配列
Raster[array,{{xmin,ymin},{xmax,ymax}},{zmin,zmax}]
対角座標が{xmin,ymin}{xmax,ymax}の長方形領域に, グレースケール幅 zmin から zmax の明暗度の配列の各要素をセルとした縞模様を描く
ラスター関数を使った縞模様要素の生成
0から1の値を持った4×4要素の配列を作っておく:
配列の各要素を明暗度とした方形の縞模様を描く:
同じ縞模様を入れ子状に表示する:
ColorFunctionオプションを使うと,Rasterが彩色されるデフォルトの方法を変更することができる:
グラフィックス指示子とグラフィックスオプション
グラフィックスオブジェクトを作成するには,通常,構成要素を列記したリストを与える.また,リストにグラフィックス指示子を加えておけば,指示子に続く要素をどう描画したらよいかを指示することができる.
グラフィックスオブジェクトは普通ネストしたリストの集合体として与えられる.このとき,各サブリストは描画要素を表す.グラフィックス指示子をこのような集合体に与えると,指示子を加えたリストにおいて,指示子に続くすべての要素(要素がサブリストであればその要素も)が指示子の影響を受ける.しかし,リストの外まで影響は及ばない.
先頭のサブリストにグラフィックス指示子GrayLevelを加え,明暗度を指定しておく:
表示すると,最初のサブリストだけがGrayLevelで指定された明暗度で描画される:
GrayLevel[i]
グレースケール幅0(黒)から1(白)のグレー値で明暗度を指定する
RGBColor[r,g,b]
赤緑青の各原色についてそれぞれ0から1で色合いを指定する
Hue[h]
幅0から1で色調 h を指定する
Hue[h,s,b]
幅0から1で色調,飽和度,明暗度を指定する
描画色の指定に使う基本機能
Wolfram言語は多くの色の名前を直接色指定として受け入れる.RedGrayLightGreenPurple等の色は,評価してRGBColor指定となる変数として実装される.色の名前は色指示子と互換に使うことができる.
最初のプロットは色の名前で,2つ目のプロットは微調整されたRGBColor指定である:
書式Hue[h]を使うと1つのパラメータで色調指定ができ便利である.h で指定する色調値は0から1の値を取る.Hue[h]の値の範囲は赤,黄色,緑,水色,青,紫,そして再び赤に戻る色の輪に対応している.さらに,拡張書式Hue[h,s,b]を使えば,色調だけでなく,色の飽和度と明暗度も指定できる.飽和度1で「原色」が得られ,0に減少していくと「あせた色」が得られる.
RGBColor等のグラフィックス指示子は一度指定したら,その時点から,指定に続く同じリスト内の全要素に適用される.このような無差別に作用する指示子に対して,特定のグラフィックス要素だけに作用する指示子もある.
例えば,PointSize[d]がその一例である.この指示子をグラフィックスオブジェクトに適用すると,すべてのPoint要素が直径 d の円として描画されるようになる.PointSizeでは,直径 d はプロット領域の幅を1としたときの相対的な割合で表す.
さらに,指示子AbsolutePointSize[d]を使えば絶対単位で直径を指定することができる.1ポイントはインチでプリンタの1ポイントにほぼ等しい.
PointSize[d]
すべての点要素を直径 d(相対値で,プロット領域幅に対する割合)で描く
AbsolutePointSize[d]
すべての点要素を直径 d(絶対値で,単位はポイント)で描く
点のグラフィックス指示子
点要素のリストを作っておく:
各点を,プロット領域の幅の10分の1の直径を持つ円として描かせる:
今度は,3ポイントの絶対サイズを指定する:
Thickness[w]
すべての線を w の太さで描く(太さ値は相対値で,プロット領域幅に対する割合)
AbsoluteThickness[w]
すべての線を w の太さで描く(太さ値は絶対値で,単位はポイント)
Dashing[{w1,w2,}]
すべての線を破線として描く(破線の区間 w1, w2, は相対値で指定する)
AbsoluteDashing[{w1,w2,}]
すべての線を破線として描く
CapForm[type]
すべての線に,指定されたタイプのキャップを使う
JoinForm[type]
すべての線に,指定されたタイプの継ぎ目を使う
線のグラフィックス指示子
太さを変えた線のリストを作る.太さを絶対値で指定する:
描画してみる:
Dashingの描画指定を行うと任意な形の破線が引ける.破線を引く基本的なやり方は短い実線区間と空の区間を交互に繰り返すことである.区間の長さを変えることで破線の形を変える.また,Dashingでは実線の区間と空の区間の単純パターンだけでなく,複雑な区間の組合せパターン(例えば,一点鎖線)を構成することも可能である.
一定の長さの線分をつなげて,破線を引いてみよう:
点と破線区間を連ねて,一点鎖線を引いてみよう:
Dashingは空リストを指定することで無効にすることができる.ここでは2つ目の線に対してのみDashingが無効になっている:
数値サイズ指定を必要とするグラフィックス指示子はTinySmallMediumLarge等の値をとることもできる.各指示子に対して,これらの値は微調整されており,人間の目に適した外観を生成するようになっている.
以下は太さは大で破線間隔は中が指定されている:
以下ではすべてのマルチポイントで大きい緑色の点を使うよう指定されている:
CapForm指示子を使うと,線の両端に付けるキャップを指定することができる.キャップの形は"Butt""Square""Round"とすることができる.
以下はCapFormで利用可能な異なる形状を示す:
CapForm["Butt"]では線が厳密にその終点で終了することを指定する."Square"というキャップは線の終点から線の幅の二分の一だけはみ出した形となる."Round"キャップは線の幅を直径とする半円である.
またJoinForm指示子を使うと,線分間の継ぎ目の形を指定することができる.
JoinFormでは次のような形状が利用できる:
JoinForm[{"Miter",d}]
線の幅のほぼ d 倍だけ接合を拡張する
斜め接合の最大の長さを指定する
隣接する線分同士の角度が小さい場合,斜め接合の点は非常に長くなることがある.過剰に長い点は,デフォルトで面取りされた接合に切り取られる.これが起る長さ,斜め接合限界は,5つの頂点の星の点は鋭いがそれより鋭い接合は面取りされるよう設定されている.この限界はJoinFormを使って指定し,厳密にいつ鋭い接合を面取りするかを制御することができる.斜め接合の限界は,接合における点が面取りされる前に,接合の頂点を超えることを許されている線の幅の数である.
この7つの頂点の星の点は,デフォルトの斜め接合限界により切り取られている:
斜め接合の限界を明示的に大きく指定すると,各頂点が鋭くなる:
RoundingRadius->r
角を半径 r で丸めるよう指定する
RectangleRoundingRadiusオプション
Rectangleプリミティブの角はRoundingRadiusオプションで丸めることができる.これは長方形の角の半径を指定するオプションである.実際の丸まり方は,隣接する辺の半分の長さに制限されている.
以下は長方形の角の丸め方のいろいろな例である:
グラフィックス指示子の使い方の1つは,グラフィックスオブジェクトの構成要素であるグラフィックスプリミティブのリストに直接挿入し局所的に適用させる使い方である.しかし,場合によっては,もっと大域的な描画指定を使いたい.例えば,特定のグラフィックス要素に指示子を適用し,その要素がどこで現れても描画指定を有効にしたい.これは,いわゆる要素の描画スタイルを設定することに相当する.次の表のグラフィックスオプションを使いスタイルを指定することができる.また,各オプションにはスタイルを実際に形作るグラフィックス指示子が割り当てられる.
PlotStyle->style
Plotで描く全曲線に対してスタイルを指定する
PlotStyle->{{style1},{style2},}
Plotで描く曲線に順番にスタイルを指定する
MeshStyle->style
密度・面グラフにおけるメッシュに対してスタイルを指定する
BoxStyle->style
3Dグラフィックスにおけるプロット境界域を示すボックスに対してスタイルを指定する
スタイル定義・設定用のグラフィックスのオプション
すべての曲線が同じスタイルを使うよう指定されたプロットを生成する:
それぞれの曲線に特定のスタイルを与えるように,異なるPlotStyle式を使うことができる:
「スタイル設定のオプション」がいくつか用意されているので,それらを使いプロットするときに特定の描画要素をどう表示するかを指定することができる.さらに,プロット全体の描画様式を決めるオプションも用意されている.
Background->color
プロットで使う表示面の背景色を指定する
BaseStyle->color
プロットに対するベーススタイルを指定し,PlotStyleの影響を受けない要素に影響を与える
Prolog->g
プロット開始前に描画するグラフィックスを与える
Epilog->g
プロット終了後に描画するグラフィックスを与える
プロット全体の描画様式を決めるグラフィックスオプション
背景色を灰色にして曲線を白でプロットする:
以下のようにすると矢印も白くなる:
2Dグラフィックスの座標系
グラフィックスオブジェクトを構成する各描画要素にはプロット空間における実座標が与えられる.オブジェクトを描画するため,Wolfram言語は実座標を表示用座標に変換する.表示用座標を使うことではじめて各要素を表示面内の適切な位置に配置することができるようになる.
PlotRange->{{xmin,xmax},{ymin,ymax}}
プロットするデータ,関数値の範囲を示す対角座標を実座標で指定する
実座標と表示座標によるプロット領域の指定
グラフィックス処理でまず行われることは,もとの および 座標のどの範囲をプロット領域として実際に表示するかの決定である.一旦領域が決まったなら,その外にはみ出たグラフィックス要素は「クリップ」され,表示には現れない.
オプションPlotRangeを使い実座標における描画範囲を指定することができる.「プロット仕様の変更」にあるように,デフォルト値はPlotRange->Automaticである.つまり,重要と思われるプロット部分が選択され,その部分だけが描画領域に入れられる.不必要と判断された部分は表示されない.設定をPlotRange->Allとすれば,全領域が描画の対象になる.このオプションで特定範囲を指定することも可能である.
多角形オブジェクトを作っておく.各コーナーがおおよそ単位円()内に入るように指定している:
描画すると全表示領域を埋め尽くしてしまうほど大きい:
明示的にPlotRangeを指定すると,グラフィックスの断面をズームインすることができる:
AspectRatio->r
表示領域の高さ対幅の割合を r とする
AspectRatio->Automatic
実座標系での範囲から縦横比を自動計算する
表示領域の縦横比設定
これまでは,実座標上の点がどのようにして最終表示面の点に移されるか,またどう指定するかを説明してきた.次に,実際のグラフが表示上どう映るか,また,どう映すかを見ていく.
使用するモニタやオペレーティングシステムによっても違うが,モニタ表示面で見やすく表示されるには縦横比が適切な値になっていることが必要不可欠である.縦横比を指定するにはオプションAspectRatioを使う.
AspectRatioを指定したからといって,スケールされた座標と表示座標の意味合いが変わるというものではない.後者は0から1の値を取り,1が全表示面の幅を示すことに変わりない.AspectRatioで変わるものは表示領域の縦横の形である.
2Dグラフィックスでは,AspectRatioはデフォルトでAutomaticに設定されている.これは縦横比を固定値に設定する代りに,もとの座標系から決定するものである.もとの座標系の 方向への1単位は,最終的な表示において 方向の1単位と同じ距離に対応する.このように,もとの座標系で定義したオブジェクトは,「自然な形」で表示される.
以下は正六角形に対応するグラフィックスオブジェクトである.デフォルト値のAspectRatio->Automaticでは,最終的な表示領域の縦横比はもとの座標系から求められ,六角形は「自然な形」で表示される:
表示する際に,縦横比を3にし,六角形の高さが幅の3倍になるようにする:
たまに,グラフィカル要素の表示座標を直接指定することが便利な場合がある.これには {x,y} ではなくスケールされた座標Scaled[{sx,sy}]を使う.スケールされた座標は および の0から1までで,原点がプロット範囲の左下隅となるよう定義される.
{x,y}
もとの座標
Scaled[{sx,sy}]
プロット範囲にスケールされた座標
ImageScaled[{sx,sy}]
表示範囲にスケールされた座標
2Dグラフィックスの座標系
枠にラベルが付いているため,表示範囲がプロット範囲よりかなり大い:
Scaled座標を使うと,長方形は指定されたプロット範囲の中心に位置する原点に置かれる:
ImageScaled座標を使うと,長方形はグラフィックスの中心に置かれる.グラフィックスの中心はプロット範囲の中心とは一致しない:
{x,y}Scaled[{sx,sy}]ImageScaled[{sx,sy}]を使う場合,完全にもとの座標か完全にスケールされる座標かで位置を指定する.しかし,この両方の座標系を組み合せる必要がある場合もある.例えば,長さがプロットの一定分量となっているような線をある点に描画する場合,線の基本的な位置を指定するためにはもとの座標を,線の長さを指定するためにはスケールされる座標を使わなければならない.
Scaled[{dsx,dsy},{x,y}]を使うと,もとの座標とスケールされた座標の両方を使った位置が指定できる.この場合 {x,y} はもとの座標の位置を与え,{dsx,dsy} はスケールされる座標の位置からのオフセットを与える.
Circle[{x,y},Scaled[sx]]
半径がプロット範囲の幅にスケールされる円
Disk[{x,y},Scaled[sx]]
半径がプロット範囲の幅にスケールされる円板
FontSize->Scaled[sx]
プロット範囲の幅にスケールされるフォントサイズの指定
Scaledが1つの引数で使える場合
次では,円の半径とフォントの大きさの両方がScaledの値で指定されている:
Scaled[{sdx,sdy},{x,y}]
もとの座標からスケールされたオフセット
ImageScaled[{sdx,sdy},{x,y}]
もとの座標からスケールされた画像のオフセット
Offset[{adx,ady},{x,y}]
もとの座標からの絶対オフセット
Offset[{adx,ady},Scaled[{sx,sy}]]
スケールされた座標からの絶対オフセット
Offset[{adx,ady},ImageScaled[{sx,sy}]]
画像スケールされた座標からの絶対オフセット
オフセットとして指定される位置
ここで描かれる線分はすべて6プリンタポイントの絶対長を持つ:
Circleの中で1つだけ引数を持つOffsetを使い,一定の絶対半径を持つ円を描画することもできる:
ほとんどの種類のグラフィックスでは,プロットの座標あるいは全体的な大きさを変更したときに,異なるオブジェクトの相対的な位置が自動的に適応されるようになっていた方がよいだろう.しかし,1つのオブジェクトから別のオブジェクトまでのオフセットが固定されたままの状態に保たれていた方がよい場合もあるかもしれない.例えば,異なるプロットが異なる形式を持つとしても,ある特性に一貫性を持たせたプロットを集めている場合等である.
Offset[{adx,ady},position] を使うと,もとの座標もしくはスケールされた座標で指定される位置から絶対オフセットを与えることにより,オブジェクトの位置を指定することができる.オフセットの単位はプリンタポイント(インチ)である.
プロットにテキストを入れる場合,使用されるフォントの大きさもプリンタポイントで指定する.例えば,10ポイントのフォントは,その基本的な高さが10プリンタポイントの文字である.プロット内部でテキストを動かしたり,テキストサイズにマッチしたシンボルやアイコンを作成したりするときはOffsetを使う.
スケールされた座標を使うと,グラフィカル要素のサイズを表示領域の大きさの割合として指定することができる.しかし,特定のグラフィカル要素を描画する実際の物理的サイズを指定することはできない.もちろんこのサイズは最終的には使用するグラフィックス出力デバイスの詳細に依存するため,Wolfram言語内部で確実に決定することはできない.それでも「グラフィックス指示子とグラフィックスオプション」で説明してあるAbsoluteThickness等のグラフィックス指示子を使うと,特定のグラフィカル要素に対して使用する「絶対サイズ」を指定することができる.この方法で要求するサイズは,すべてではないがほとんどの出力デバイスで有効である(例えば,画像を光学的に投影する場合,その中のグラフィカル要素を同じ絶対サイズに維持することは可能でもなければ望ましくもない).
2Dグラフィックスにおけるラベル付け
Axes->True
水平・垂直軸を表示する
GridLines->Automatic
方眼線を表示する
Frame->True
プロット領域の周りを枠で囲む
PlotLabel->"text"
文字列をプロットのラベルとして表示する
2Dプロットにおけるラベル設定
プロットする.特に指定しないので,デフォルトのAxes->Trueにより座標軸が引かれる:
Frame->Trueに設定する.囲み枠ができ,軸目盛が消えてしまうことに注目:
薄いグレーの方眼線を引く:
Axes->False
軸の表示を禁止にする
Axes->True
軸と 軸を表示する
Axes->{False,True}
軸は表示せず, 軸だけを表示する
AxesOrigin->Automatic
軸の交差点を自動決定する
AxesOrigin->{x,y}
軸の交差点を指定する
AxesStyle->style
両軸のスタイルを指定する
AxesStyle->{xstyle,ystyle}
それぞれの軸のスタイルを指定する
AxesLabel->None
軸ラベルはなしとする
AxesLabel->ylabel
軸にラベルを付ける
AxesLabel->{xlabel,ylabel}
軸と 軸の両方にラベルを付ける
プロット軸の設定条件
軸を座標点{5,0}で交差させ,ラベルを付けるよう指定する:
Ticks->None
目盛表示を禁止にする
Ticks->Automatic
自動設定の位置に目盛を付ける
Ticks->{xticks,yticks}
指定条件に従いそれぞれの軸に目盛をふる
Ticksオプションの設定
目盛の描画を自動設定にすると(Ticks->Automatic),目盛の座標値の桁数が最小になるような軸上の位置で主・副目盛を設けてくれる.場合によっては,ユーザ自身で間隔等を指定したいだろう.例えば, の整数倍の間隔で目盛を打つとか.また,非線形な尺度の軸を使っているときは特別に指定した方がいいだろう.
None
目盛表示を禁止する
Automatic
自動設定の位置に目盛を付ける
{x1,x2,}
各指定位置に目盛を付ける
{{x1,label1},{x2,label2},}
各指定位置に目盛を付け,その位置に各ラベルを表示する
{{x1,label1,len1},}
各目盛の線長をスケールされた座標で指定する
{{x1,label1,{plen1,mlen1}},}
正方向と負方向の各目盛の線長をスケールされた座標で指定する
{{x1,label1,len1,style1},}
各目盛にスタイルを指定する
func
xminxmax に適用して目盛オプションを決める関数
目盛設定において指定可能な条件
軸に打つ目盛の位置を指定する. 軸は自動設定にしておく:
の整数倍の目盛にはラベルは付けないようにしておく:
特に複雑な目盛を描画するときは,「目盛関数」を用意し,それを使い目盛を描画するよう指定しておく.関数の実行時に,対象軸の最小値と最大値が引数として関数に与えられるので,それらの値に応じた目盛の設定条件が生成できるように関数を記述しておく.
目盛間隔1の指定条件を生成する関数を用意しておく:
軸の目盛に関数unitsを応用してみる:
Frame->False
枠表示を禁止にする
Frame->True
プロット領域を枠で囲む
FrameStyle->style
枠のスタイルを指定する
FrameStyle->{{left,right},{bottom,top}}
枠の各辺のスタイルを指定する
FrameLabel->None
枠に付けるラベルをなくする
FrameLabel->{{left,right},{bottom,top}}
枠の各辺に付けるラベルを指定する
RotateLabel->False
ラベルの回転表示を禁止にする
FrameTicks->None
枠の各辺に目盛は打たないものとする
FrameTicks->Automatic
枠の目盛を自動設定の位置に打つ
FrameTicks->{{left,right},{bottom,top}}
枠の各辺に打つ目盛の表示条件を指定する
枠のグラフィックスオプション
プロット軸のオプションAxesを使い,プロットに入れる水平軸と垂直軸の指定が可能である.プロットによっては,描画領域の周りに枠線を引き,その各辺に目盛を打つとよい.それをするには,オプションFrameを使い枠の4辺を軸に見立て必要に応じて目盛を表示させる.枠の4辺の指定順序は底辺から始まり,時計方向に進む.
枠を描きラベルを各辺に付ける:
GridLines->None
方眼線を表示禁止にする
GridLines->Automatic
方眼線を自動設定の位置に引く
GridLines->{xgrid,ygrid}
目盛付けの場合と同様に方眼線を指定する
方眼線のオプション
方眼線の描画設定は目盛の設定とほとんど同じである.目盛の場合と同様に,方眼線にも配置位置を特別に指定できる.また,描画スタイルも指定することが可能である.ただし,方眼線の場合はラベルを付けることはできない.
方向の方眼線は付けるが, 方向には付けない:
グラフィックスへのオブジェクトの挿入
「プロットの再描画と組合せ」では,GraphicsGridを使って規則的にプロットを配列する方法を説明している.しかし,Insetグラフィックスプリミティブを使うと,プロットをどのように組み合せることも重ねることもできる.
Inset[obj, pos]
埋込みがグラフィックスの位置 pos に置かれるよう指定する
Inset[obj,pos, opos, size]
obj の点 opos が,グラフィックスの点 pos に位置するよう,オブジェクトを指定の size で描画する
Inset[obj,pos, opos, size, dirs]
埋込みの軸が,方向 dirsに揃うよう指定する
埋込みの作成
プロットである:
パラメトリックプロットの内部でプロットを生成する:
3Dプロットである:
以下では3Dプロットの異なるサイズの複製を含む2Dグラフィックスオブジェクトを生成する:
グラフィックスに回転したプロットと歪んだプロットを埋め込む:
Wolfram言語はInset内でプロット,任意の2Dおよび3Dグラフィックス,セル,テキストを描画することができる.一般にグラフィックスオブジェクトの表示領域は,Insetの少なくとも1対の辺が触れるようサイズ調整される.
密度プロットと等高線プロット
DensityPlot[f,{x,xmin,xmax},{y,ymin,ymax}]
f の密度プロットを生成する
ContourPlot[f,{x,xmin,xmax},{y,ymin,ymax}]
xy の関数として f の等高線プロットを生成する
密度プロットと等高線プロット
の密度プロットを返す.明るい部分は関数値が高いことを示す:
オプション名
デフォルト値
ColorFunctionAutomatic
陰影付けに使用する色を指定する(Hueでは色のシーケンスが使われる)
MeshNone
メッシュを描くかどうか指定
PlotPointsAutomatic
各方向における初期のサンプル点の数
MaxRecursionAutomatic
細分化の最大繰返し数を指定
DensityPlotのオプションの例
以下のようなメッシュを含むこともできる:
密度プロットでは,各点の色がプロットされている関数のその点での値を示す.デフォルトでは,関数の値が増加するにつれ,色は黒から中間色の青をへて白へと変わる.しかし一般に,任意の点における値とその色の関係を示す別の「色の対応表」を指定することもできる.オプションColorFunctionを使うと,任意の点での色を見付けるために関数値に適用される関数を指定することができる.色付け関数はGrayLevelHueRGBColor等のWolfram言語の色指示子を返す.一般的な設定は,ColorFunction->Hueである.
異なる値を示すために異なる色を使う:
カスタマイズされる色関数のためのリソースはColorData関数である.ColorDataColorFunctionで直接使うことのできるカスタマイズされた多数の色集合を提供する.
ColorDataを使ってアクセスすることのできるグラデーションのリストである:
このDensityPlotは上と同じであるが"SolarColors"というグラデーションを使っている:
これは,関数の等高線プロットである:
等高線プロットとは関数の値を「地形図」のようにプロットしたものである.等高線は同じ高さを持つ表面にある点をつなぐ.デフォルトは,等間隔の z 値の列に対応する等高線をもつものである.Wolfram言語で生成される等高線プロットはデフォルトで陰影の度合が高い z ほど明るくなるように陰影処理が施されている.
オプション名
デフォルト値
ColorFunctionAutomatic
陰影付けに使用する色を指定する(Hueでは色のシーケンスが使われる)
ContoursAutomatic
等高線の合計数,あるいは等高線のz 値のリスト
PlotRange{Full,Full,Automatic}
含む値の範囲.{zmin,zmax}AllAutomatic,あるいはリスト{xrange, yrange, zrange}として指定
ContourShadingAutomatic
陰影処理を使うかどうか. Noneでは領域は空白である.色のリストを与えることができる
PlotPointsAutomatic
各方向における初期サンプル点の合計数
MaxRecursionAutomatic
細分化の最大反復回数
ContourPlotのオプションの例
陰影処理のないプロットである:
等高線領域に薄い赤と薄紫を交代に使う:
DensityPlotContourPlotはどちらも,プロットしている関数がより滑らかになるようより多くのサンプル点を獲得するために,プロット領域を細分化する適応アルゴリズムを使用する.しかし,サンプル点の数は常に有限なので,関数の機能が発揮できないこともある.必要に応じてPlotPointsMaxRecursionの値を増やし,サンプル点の数を増加することができる.
1点注意したいのは,関数がある特定の領域で急速に変化する場合,Plotにより生成される曲線が不正確になる場合もありうるのに対して,関数があまりに遅く変化する場合は,ContourPlotで生成される等高線の形状は不正確でありえるということである.急速に変化する関数は等高線の決まったパターンを与えるが,ほとんど平坦な関数は不規則な等高線を与える.これは通常PlotPointsまたはMaxRecursionの値を増やすことで解決する.
3Dグラフィックスのプリミティブ
Wolframシステムのグラフィックス機能をさらに強力にするものに3Dグラフィックスがある.3Dグラフィックスのプリミティブを組み合せることで立体オブジェクトを描画することが可能になる.
Point[{x,y,z}]
x, y, z の座標に点を打つ
Line[{{x1,y1,z1},{x2,y2,z2},}]
{x1,y1,z1}, {x2,y2,z2}, の各座標点を結ぶ折れ線を引く
Polygon[{{x1,y1,z1},{x2,y2,z2},}]
指定座標点が頂点の多角形を描画する (中は塗り潰す)
Cuboid[{xmin,ymin,zmin},{xmax,ymax,zmax}]
対角座標で決まる直方体を描画する
Arrow[{pt1,pt2}]
pt1 から pt2 を向いた矢印
Text[expr,{x,y,z}]
テキストを座標点{x,y,z}に表示する(「テキスト用グラフィックスプリミティブ」を参照のこと)
3Dグラフィックスの要素
3D座標を乱数で返す関数rcoordを定義しておく:
3D空間の座標点を20個用意しておく:
各座標に点を打つ:
10個のランダムな点を結ぶ折れ線を3Dでプロットする:
2Dグラフィックスではプロットする要素のリストを与えると,各要素が入力順に描画された.このため,後に描画した要素が先に描いたものを隠してしまうこともあった.これに対して,3Dでは,描画要求のあった全要素がまとめられ,立体オブジェクトとして一括で表示される.このため,投影角度によっては,前景にくる要素が背景にまわる要素を隠すことがある.
三組の乱数の3D座標を結ぶ三角形オブジェクトを返す関数rantriを定義しておく:
乱数による三角形を1つ描く:
乱数による三角形を5つまとめて作る.前の方にある三角形が後ろのものを隠すように表示される:
適当な形の多角形を適切に組み合せることでどんな形の立体オブジェクトでも構築できる.例えば,3Dパラメトリックプロット(ParametricPlot3D)で作った立体面はすべて多角形のリストからなるものである.
Point[{pt1,pt2,}]
pt1, pt2, における点から構成される多点
Line[{line1,line2,}]
line1, line2, から構成される多線
Polygon[{poly1,poly2,}]
多角形 poly1, poly2, から構成される複数ポリゴン
複数要素をとることのできるプリミティブ
二次元プリミティブの場合と同様に,3Dグラフィックスプリミティブのなかにはより効率的な表現である多座標形式を持つものもある.非常に多数のプリミティブを扱う際に,可能な部分でこのような多座標形式を使うことにより,結果のグラフィックスのメモリ使用量を減らし,描画をずっと速くすることができる.
rantricoordsはランダムな三角形の座標だけを定義する:
Polygonの多座標形式を使うことで,非常に多数の三角形を効率的に表現する:
Wolframシステムでは3Dの多角形に任意の設定でいくつの頂点でも持たせることができる.頂点の位置により,結果の多角形は一平面上あるいは一般的な凸でない可能性がある.一平面上ではない多角形を描画する場合は,Wolframシステムは描画する前に,その多角形を定義により平面的な三角形に分解する.
一平面的でない多角形は三角形に分解される.三角形を繋ぐ内部の辺は,Polygonプリミティブの外側の辺のように輪郭が描かれない:
自己交差の凸でない多角形は,各交差点で塗潰すか否かを交代に行う偶数奇数規則に従い塗り潰される:
Cone[{{x1,y1,z1},{x2,y2,z2}}]
底辺の中心が{x1,y1,z1}で半径が1,頂点が{x2,y2,z2}の円錐
Cone[{{x1,y1,z1},{x2,y2,z2}},r]
底辺の半径が r の円錐
Cuboid[{x,y,z}]
対角が座標{x,y,z}{x+1,y+1,z+1}である単位立方体を作る
Cuboid[{xmin,ymin,zmin},{xmax,ymax,zmax}]
対角が指定座標にある直方体を作る
Cylinder[{{x1,y1,z1},{x2,y2,z2}}]
終点が{x1,y1,z1}{x2,y2,z2}である半径1の円筒
Cylinder[{{x1,y1,z1},{x2,y2,z2}},r]
半径 r の円筒
Sphere[{x,y,z}]
中心{x,y,z}の単位球
Sphere[{x,y,z},r]
半径 r の球
Tube[{{x1,y1,z1},{x2,y2,z2},}]
指定された点を繋ぐチューブ
Tube[{{x1,y1,z1},{x2,y2,z2},},r]
半径 r のチューブ
直方体要素
3D空間に乱数座標からなる単位立方体と単位球を描画する:
ConeCylinderSphereTubeは高質の描画を生成するが,使用法はスケール可能である.1つの画像にこれらのプリミティブが何千も含まれることもある.それほど多くのプリミティブを描画するとき,デフォルトでConeCylinderSphereTubeを描画するために使われる点の数を変更する特殊なオプションを使うことにより,描画の効率を向上させることができる.Graphics3D"ConePoints" Methodオプションはそれぞれの描画の質を低下させるのに使うことができる.円筒,球,チューブの質も同様にそれぞれ"CylinderPoints""SpherePoints""TubePoints"を使って調整することができる.
円筒は非常に小さいので,それらを描画するために使われた多数の点はほとんど分からないように減らすことができる:
3Dグラフィックス指示子
2Dグラフィックスと同じように3Dグラフィックスも詳細なグラフィックス指示子を指定することができる.
2Dで有効なグラフィックスオプションはすべて3Dでも使える.3Dだけで有効なグラフィックス指示子もある.
2Dのときのように,PointSizeThicknessDashingのグラフィックス指示子を使い,3D空間における点や線(PointLine)の大きさ,太さ,線の形態を指定できる.ただし,3Dでは,それらの条件で指定する長さとは全表示領域の幅に対する割合を示すので注意が必要である.
乱数による3D座標を20組作っておく:
各座標点に直径が表示幅の5%の円を描画する:
2Dにおける絶対単位の長さ指定は3Dでも有効である.点の絶対サイズ(AbsolutePointSize),線の絶対太さ(AbsoluteThickness),破線の絶対区間長(AbsoluteDashing)がこれに当たる.
ランダムな3D座標点を10個作り,線で結んだオブジェクトを生成する:
オブジェクトの折れ線を破線表示する.線の太さは2ポイントである:
PointLine(点と線の描画)の場合は,色付けにかかわる指示子は3Dでも2Dの場合と同様に働く.ただし,Polygon(多角形)に関しては,その限りではない.
2Dでは,多角形には特定色が常に1つ割り付けられ,その色はRGBColorOpacity等のグラフィックス指示子により画一的に決められる.これに対して,3Dでは,擬似照明法に基づいたより物理的な手法で多角形の色付けができるようになっている.多角形は色指示子により定義される内色素を引き続き持つが,グラフィックスが描画されたときに見られる最終的な色は,その多角形にあたる光の値により異なる.多角形はデフォルトでは内的に白である.
Lighting->Automatic
デフォルトの光配置と値を使う
Lighting->None
すべての光を無効にする
Lighting->"Neutral"
白色光源だけを使い照明する
3Dグラフィックスにおける多角形の色付け法
デフォルトの照明で正20面体を描画する.多角形の内的色は白である:
同じ照明パラメータを使って20面体を描画するが,多角形の内的な色を灰色に設定する:
多角形の内部色の値は,"Neutral"を使うとより明らかになる:
線だけにグレーを適用する.これは照明による影響を受けない:
2D指示子の場合と同じように,色指示子はサブリストを使って線にスコープすることができる:
EdgeForm[]
多角形の辺の線は描かない
EdgeForm[g]
グラフィックス指示子 g に基づいて多角形の辺の線を描く
多角形における辺の描線の指定
Wolframシステムで3Dグラフィックスオブジェクトを描画するときに使う線の種類は2つある.ひとつはグラフィックスオブジェクトに含まれている明示的なLineプリミティブの線で,もうひとつは多角形の辺を描くのに使う線である.
後者の線について描画仕様を設定するにはEdgeFormを使いグラフィックス指示子のリストを与える.
12面体を描画する.面の周囲の線は灰色で描画するよう指示する:
FaceForm[gfront,gback]
多角形の描画において表面にグラフィックス指示子 gfront を,裏面にグラフィックス指示子 gback を指定する
多角形の表面と裏面のグラフィックス指示子
3Dにおける多角形で重要なことは,表と裏があるという点である.Wolframシステムでは,多角形を正面から見たときに,その頂点の指定順序が反時計方向に見える場合にその面を表と定義している.
各多角形の表側(外側)をほとんど透明にし,裏側(内側)を完全に不透明にする:
3Dグラフィックスの座標系
3Dグラフィックスでは,どこからどこまでが描画空間なのかを示すため直方体を使いプロット空間の境界を定義している.プロットするオブジェクトはこの直方体(ボックスと呼ぶ)の中に置かれ,デフォルトで,ボックスの輪郭に線が描かれるので(Boxed->Trueの設定が有効時)プロット範囲が視覚的に確認できる.また,オブジェクトがボックスの外にはみ出るようなことがあれば,はみ出た部分は表示されない.
ボックスに包含する 方向の各プロット範囲はオプションPlotRangeを使い指定する.2Dグラフィックスのときのように,デフォルトで自動設定(PlotRange->Automatic)になっており,Wolfram言語内部のアルゴリズムで決定した「重要な部分」だけが描画の対象になる.つまり,部分によってはボックスの外に出てしまい表示されないものもある.そのようなことがないように,すべてを描画対象にするならPlotRange->Allと指定しておく.
多面体操作を定義するパッケージを読み込ませる:
星形の20面体を作る:
星形20面体をボックス内に表示する:
PlotRangeでプロット範囲を限定する.範囲外になり表示されない部分ができる:
2Dグラフィックスと同様に3Dでも「実座標」と「スケールされた座標」のどちらでもオブジェクトの位置指定ができる.スケールされた座標は書式Scaled[{sx,sy,sz}]で指定し,各座標値は0から1の値を取る.ボックスの包含する空間は右手座標系で表される.
{x,y,z}
プロットする実空間の座標を指定する
Scaled[{sx,sy,sz}]
スケールされた座標を指定する.各座標は0から1の値を取る
3Dオブジェクトの座標指定
ボックスの一角に立方体を配置させる:
ボックス内の実空間のどこに何を配置するかを指定したなら,次はボックス自体をどう表示させるか指定する.まず,ボックスの縦,横,そして,奥行き長の相対比を決める.これは,2Dプロットにおける縦横比の指定に相当する.3Dでは,縦横比の代りにボックス比のオプションBoxRatiosを使いボックスの各辺(つまり,座標軸の範囲)の相対的な長さを指定する.Graphics3Dオブジェクトの場合は,デフォルトで自動設定になっているので(BoxRatios->Automatic),比は実座標の範囲から決定される.
BoxRatios->{xr,yr,zr}
ボックスの辺の相対的な長さを指定する
BoxRatios->Automatic
実座標の範囲から計算されるボックス比を使う(Graphics3Dのデフォルト値)
3Dオブジェクトにおける境界ボックスの辺の長さ指定
方向にボックスを引き伸ばして星形20面体を表示する:
立体の描画では,どの位置からどの角度で物体を眺めるかといった位置関係を設定する必要がある.位置関係を表す値を「ビューポイント」と呼び,これはオプションViewPointを使い指定する.
「3D曲面プロット」に,よくあるビューポイントの設定例を示したので参考にするとよい.しかし,そこにある設定位置にとらわれる必要はなく,どんな設定をしても構わない.
ビューポイントの指定書式はViewPoint->{sx,sy,sz}である.ここで,値 si はボックス中心を原点({0,0,0})とした特殊な座標系で与えられる.座標の取る値はボックスの最長辺を1とするスケールされた相対値とする.ボックスの他の辺の長さはボックス比(BoxRatios)から決定される.ボックスが立方体ならば,各座標軸はからの範囲を取る.ビューポイントは必ずボックスの外になければいけないことに注意する.
デフォルトのビューポイント指定,つまり,{1.3,-2.4,2}で図を表示する:
ビューポイントを境界ボックスの一角に近付けると図はこのように見える:
ボックスから離れるに従い遠近効果が小さくなる:
オプション
デフォルト値
ViewPoint{1.3,-2.4,2}
表示するオブジェクトを眺める位置指定 (ビューポイント)をスケールされた特殊座標で指定する
ViewCenterAutomatic
表示領域の中心を示すスケールされた特殊座標系の点
ViewVertical{0,0,1}
表示領域における視野垂直方向を示すスケールされた特殊座標系の方向
ViewAngleAutomatic
グラフィックスを見るために使われるシミュレートされるカメラに対する開口部
ViewVectorAutomatic
グラフィックスの正規の座標系におけるシミュレートされるカメラの位置と方向
3Dオブジェクトの配置と方向付け
3Dグラフィックスでは,描画するオブジェクトをどこから眺めるかだけでなく,表示領域の中にどうオブジェクトを「枠組み」するかを指定する必要もある.後者の設定ではオプションViewCenterViewVerticalViewAngleを使う.
ViewCenterはオブジェクトのどこの点が表示領域の中心に現れるか指定するために使用する.中心点はスケールされた特殊座標(0から1)で与える.例えば,ViewCenter->{1/2,1/2,1/2}と指定すれば,ボックスの中心と表示領域の中心を一致させることになる.ただし,ビューポイントの設定によってはボックスが対照に表示されないため,このViewCenterの設定では必ずしも表示領域の中心にボックスの中心を持っていけない.そのようなときは,自動設定(ViewCenter->Automatic)にした方がよいかもしれない.
次に,ViewVerticalはオブジェクトのどの方向が表示領域で上を向くか指定するのに使う.ViewVerticalの指定は,表示領域上でオブジェクトのどの方向が上を向くかをスケールされた座標で与えることである.デフォルト値はViewVertical->{0,0,1}で,これは 軸が表示領域の垂直方向になるよう表示することを意味する.
Wolfram言語は最終的な画像を可視化するために,シミュレートされたカメラの属性を使用する.カメラの位置,方向,向きはViewCenterViewVerticalViewPointオプションで決まる.ViewAngleオプションは,カメラレンズの開口部の幅を指定する.ViewAngleはカメラで見ることのできるViewPointからViewCenterまで伸びた線からの最大角度の2倍をラジアンで指定する.つまり,ViewAngleは画像の一部でズームインするために効果的に使うことができるということである.ViewAngleのデフォルト値は人間の目にとって一般的な視野角である35度である.
軸が垂直方向に表示するようにViewVerticalを設定する:
ViewAngleを使い,画像の中心を効率的にズームインする:
このように,ViewPointViewCenterViewVerticalの一連の設定は,物理的なオブジェクトをどう表示するか指示するために使う.ViewPointはオブジェクトを眺める位置を指定し,ViewCenterはオブジェクトのどこを中心に見るかを指定し,また,ViewVerticalは表示上の垂直方向がオブジェクトのどの方向になるかを指定する.
座標系という点において,ViewPointViewCenterViewVerticalの条件設定は一種の座標変換とも考えられる.つまり,3つの条件設定を使い,実空間における物体の各座標を表示領域の座標に変換している,とも考えられる.
ViewVector->Automatic
オプションViewPointViewCenterの値を使い, シミュレートされるかめらの位置と向きを指定する
ViewVector->{x,y,z}
オブジェクトに使用される座標におけるカメラの位置.カメラの向きはViewCenterオプションで決まる
ViewVector->{{x,y,z},{tx,ty,tz}}
カメラの位置と点は,オブジェクトに対して使われる座標で焦点が合わされる
ViewVectorオプションに可能な値
カメラの位置と向きはViewPointオプションとViewCenterオプションで完全に決めることができる.しかし,ViewVectorオプションは便利な一般化を提供する.ViewVectorではスケールされた座標を使ってカメラの位置と向きを指定する代りに,グラフィックス内でオブジェクトの位置を決めるのに使われる座標系と同じものを使ってカメラの位置を決めることができる.
以下はカメラを負の 軸上に置き,グラフィックスの中心を向くように指定している:
これもカメラは同じ位置にあるが,異なる向きを向いている.ViewAngleを合せると,グラフィックスの特定の場所をズームインする:
3Dオブジェクトの2Dのイメージを得たなら,次にそれをどう描画するかを指定する.グラフィックスオプションは2Dグラフィックスで使ったものと同じである.つまり,縦横比のオプションAspectRatioを使い最終表示領域の縦横の尺度を変えたり,プロット領域のオプションPlotRegionを限定し表示面全体のどこの領域にイメージを表示させるか等の指定ができる.
ドラッグ
中心についてグラフィックスを回転させる
Ctrl + ドラッグ
グラフィックスにズームインしたりズームアウトしたりする
Shift + ドラッグ
スクリーン平面でグラフィックスをパンする
3Dグラフィックスとのインタラクションに使われるマウス操作
グラフィックスをインタラクティブに変更する場合,ビューオプションが変更される.ViewPointを使ってカメラの位置を指定した場合,グラフィックスの回転によりViewPointオプションの値が変更される.ViewVectorを使ってカメラの位置が指定してある場合は,インタラクティブな回転によりそのオプションの値が変化する.どちらの場合も,インタラクティブな回転はViewVerticalオプションの値にも影響を及ぼす.グラフィックスをインタラクティブにズームすることは,ViewAngleオプションの変更と直接呼応する.グラフィックスをインタラクティブにパンすると,ViewCenterオプションの値が変化する.
表示領域の縦横比を変更する:
グラフィックスの表示段階で,立体のイメージが描画領域に対してなるべく大きくなるように尺度が調整される.多くのグラフィックスではこの調整処理は好ましいが,オブジェクトの向きによってはイメージの大きさが変わってしまう場合がある.そのような効果が出てしまうときは,SphericalRegion->Trueの条件を指定する.すると,境界ボックスを包含する球が想定され(ボックスの中心と球の中心はマッチする),最終イメージの尺度調整が球に対して行われるようになる.つまり,球全体が表示領域に収まるようスケールされる.
プロット領域を引き伸ばした形で表示する:
SphericalRegion->Trueとすると,ボックスの周りに張った球がちょうど表示領域に入るようスケールが調整される:
このように,SphericalRegion->Trueと指定しておくと,オブジェクトの大きさがそのオブジェクトの方向によらず一定となる.1つの立体オブジェクトをいろいろな角度から見たアニメーションを作るときに便利になる.
SphericalRegion->False
描画対象をなるべく大きくするように尺度を調整する
SphericalRegion->True
境界ボックスの周りに仮定した球がすべて表示領域に収まるように全体をスケールする
3Dグラフィックスの表示尺度の調整
照明効果と曲面の反射特性
3DグラフではデフォルトLighting->Automaticで照明効果を取り入れた描画が行われる.具体的には擬似照明法に基づき多面体の色付けが行われる.
Wolfram言語ではオブジェクトの照明にさまざまなコンポーネントを指定することができる.その1つは「アンビエント照明」というものであり,オブジェクトに対し一様な陰影処理を施す.この他,「平行光源」はオブジェクトの角度により異なる陰影が施される.「点光源」は空間の1点からすべての方向へ放射される光をシミュレートする.「スポット照明」は「点光源」と似ているが,特定の方向に光の円錐を放射する.平行光源は指定された方向へ向かう光の一様場をシミュレートする.Wolfram言語はこれらすべての光源からの光を一緒にし,特定の多角形の全体照明を決定する.
{"Ambient",color}
一様なアンビエント照明
{"Directional",color,{pos1,pos2}}
pos1から pos2までのベクトルに平行な傾向光源
{"Point",color,pos}
位置 pos の球の点光源
{"Spot",color,{pos,tar},α}
α の半角の開口で目標位置 tar に向けた位置 pos におけるスポットライト
Lighting->{light1,light2,}
光源の数
光源指定の方法
デフォルトの照明設定では赤,緑,青の3色,3つの点光源だけを使い,もれ光は使わない.また,点光源は被写体の右手方向に間隔で配置される.
デフォルトの照明設定でシミュレートされた光を使って陰影処理された球である:
アンビエント照明を加え,すべての点光源を除去した結果である.Lightingオプションは光源のリストを取る:
赤い点に位置する1つの点光源を加える.光は適切に組み合される:
オブジェクトは光源を遮ったり影を落としたりしないので,見えているオブジェクトはすべて光源により平等に照らされる:
負の 方向から緑の平行光源を加える:
アンビエント照明と組み合せたプロットの上部に位置するスポットライトを示している:
Lightingオプションは,Graphics3DあるいはShowのオプションとして使うと,見えているすべてのオブジェクトの照明を制御する.Lightingは特定のオブジェクトに対する照明を指定する指示子としてインラインで使うことができる.継承された照明指定はLighting指示子で置き換えられる.
2つの球に対するLightingのデフォルト値がLighting指示子で置き換えられる:
以下の例ではリストを使い,Lightingの効果が真ん中の球に制限されるようにしている:
多角形面の色調は,面に入射する光だけでなく,面がどの程度光を反射するかにもよる.反射の度合いを制御するにはグラフィックス指示子RGBColorSpecularityGlowを使う.
これらの彩色指示子を使わなければ,多角形はつや消しの白の面を持つものとされる.つまり,結果的に,入射光のすべてが全方向に一様に反射されることになる.材料にたとえると,表面塗布のない白い紙というところである.
これに対しRGBColorSpecularityGlowを使うと複雑な表面形態が指定できる.これらの指示子は拡散反射,鏡面反射,放光の3種類の発光を別々に指定する.
拡散反射とは,面に入射する光はあらゆる方向に一様に散乱する現象をさす.表面がこのような状態にあるときは「さえない色」とか「つや消し」的な面として映る.拡散反射体はランベルト(Lambert)の反射法則に従うことが知られており,反射強度は入射強度にを掛けた値として求まる.ここで とは入射光と法ベクトルのなす角度である.のとき,反射強度はゼロになる.
鏡面反射では,面は鏡のように入射光を反射する.このため,「放光のある」とか「つやのある」表面として映る.理想的な鏡であれば,入射する光はすべて入射角と同じ角度で反射される.だが,実際の鏡面では,材料によっても程度は違うが,入射光がある程度は散乱するので,反射光が広い角度範囲で分布してしまう.Wolfram言語では強度分布の決定のため,フォン(Phong)の照明モデルを使い,そこで定義される「鏡面指数」と呼ばれる面に固有な定数を適当な値に設定することで分布を計算するようになっている.このモデルは,鏡面指数を とし,反射角方向から角度 ずれた方向に反射される光の強度は で与えられる,というものである.のとき,反射面は理想的な鏡面になる.また, が減少すれば散乱強度が上がるので,表面は放光性を失ってくるし,で完全な拡散反射になる.実際の材料では は1から数百の値を取ることが知られている.
放光とは特定の色で表面から放射される光であり,その光の強度は入射光線に関係しない.
実際の材料では拡散反射と鏡面反射の両方の効果が有効であり,反射に加え放光するオブジェクトもある.それぞれの種類の発光に対して,オブジェクトは固有の色を持っている.拡散反射の場合,入射光線が白ならば反射光線の色はその物質固有の色となる.白色以外の光を照らした場合は,反射光は入射光の色成分と材料固有の色の積で与えられる色成分の光を放つことになる.同様に,オブジェクトには固有の鏡面反射色がある場合があり,これは拡散反射の色とは異なることがある.鏡面反射の色は,入射光線と内的鏡面色の要素全体の積となる.放光の場合,出される色は内的特性のみにより決まり,入射光線には依存しない.
Wolfram言語では両方の反射効果に個別に固有の色を指定することが可能である.反射光がゼロの材料面には,GrayLevel[0]またはBlackを固有色として指定しておく.また,「白っぽい」色付き表面には,表面の反射率(アルベド)を a としGrayLevel[a]と設定する.
GrayLevel[a]
アルベド a のつや消し面を指定する
RGBColor[r,g,b]
固有な色のつや消し面を指定する
Specularity[spec,n]
鏡面性 spec で鏡面指数 n の面.spec は0から1までの数値あるいはRGBColor指定である
Glow[col]
col で放光する面
照射されたオブジェクトの表面反射特性の指定
いくつかの色付き光源で照らされた球をデフォルトの設定のまま表示する.表面がつや消しになる:
次に,拡散反射を低く押さえて,高目の鏡面反射で表示し直す.すると,光源の近くの面が輝いて表示され,他の部分は暗めに表示される:
光源と表面の色に設定において,注意しなければいけないことが1つある.それは,どの多角形であってもそこから反射する光の強度は1を越えてはいけない,ということで,もし,1以上に設定した場合は表示がおかしくなる.
3Dグラフィックスへのラベル挿入
Wolfram言語では各種のラベルが3Dグラフィックスにも付けられるようになっている.そのいくつかは2Dグラフィックスのものと同じだが,他は3Dに独特なものである.2Dのラベル設定に関しては「2Dグラフィックスにおけるラベル付け」を参照のこと.
Boxed->True
描画対象の周りに直方体(ボックスと呼ぶ)を設け境界線を描く(デフォルト値)
Axes->True
ボックスの各辺に , , 軸を描く
Axes->{False,False,True}
軸だけを描く
FaceGrids->All
ボックスの各面に方眼線を描く
PlotLabel->text
プロットにラベルを付ける
3Dグラフィックスの軸やラベルに関したグラフィックスオプション
Graphics3Dのデフォルト設定ではボックス境界線だけが表示されるようになっている.ラベルや軸の書式設定は含まれない:
Axes->Trueとし , , 軸を表示する:
次に,方眼線をボックスの各面に表示する:
BoxStyle->style
描画スタイルをボックスに適用する
AxesStyle->style
描画スタイルを軸に適用する
AxesStyle->{xstyle,ystyle,zstyle}
各描画スタイルを各軸に適用する
描画スタイルのオプション
ボックスの境界線を破線にし,軸を通常より太い線で描くよう指定する:
Axes->Trueと指定すると境界ボックスの辺に軸が描かれる.各軸に平行なボックス辺は4本あるためそのどれにでも軸が描ける.そこで,AxesEdgeの指定をすることで,どの辺を軸にするかを選択することができる.
AxesEdge->Automatic
すべての軸を描くボックスの辺を内部アルゴリズムで決定する
AxesEdge->{xspec,yspec,zspec}
x, y, z の軸を描くボックスの辺を指定する
None
軸表示を禁止にする
Automatic
軸表示用の辺を自動的に決定する
{diri,dirj}
指定した辺に軸を表示する
3Dグラフィックスにおける座標軸の描画設定
値と 値が大きい方のボックスの辺に 軸を描く.また, 軸はなしとし, 軸は自動設定にしておく:
例えば, 軸を描くには軸に平行なボックスの4つの辺のどれかを選ばなければいけない.各辺は の座標で区別できる.実際の 軸にする辺の指定ではのリスト形式で辺を選択する.+1-1のどちらかの値を取り,前者なら 座標(または 座標)が大きい方の辺が,後者なら小さい方の辺が選択される.
AxesLabel->None
軸ラベルを表示しない
AxesLabel->zlabel
文字列を 軸ラベルにする
AxesLabel->{xlabel,ylabel,zlabel}
各文字列を各軸のラベルにする
3Dグラフィックスにおける軸ラベルの設定
AxesLabelを使って各座標軸にラベル付をける.なお,目盛は付けないようにする:
Ticks->None
目盛を表示禁止にする
Ticks->Automatic
目盛の表示を自動設定にする
Ticks->{xticks,yticks,zticks}
各軸について個別のグラフィックス指示子を与える
Ticksオプションの設定
軸の目盛設定では,「2Dグラフィックスにおけるラベル付け」にある2Dグラフィックスの手順が3Dでも有効である.
FaceGrids->None
方眼線の表示を禁止にする
FaceGrids->All
すべてのボックス面に方眼線を引く
FaceGrids->{face1,face2,}
任意指定の面 facei だけで方眼線を引く
FaceGrids->{{face1,{xgrid1,ygrid1}},}
任意指定の面に xgridiygridi で指定される方眼線を引く
3Dグラフィックスにおける方眼線の設定
3Dグラフィックスでは方眼線はボックスの境界面に描かれる.FaceGrids->Allを指定したなら,すべての面に方眼線が描かれることになる.また,FaceGrids->{face1,face2,}とすれば,指定面だけに方眼線が描かれる.ここで,各面は書式で指定され,パラメータ の2つは0でなければならず,最後の1つは+1-1の値を取る.また,個々の面にどんな方眼線を描くか別々に指定することも可能である.指定には2Dで使ったGridLinesが使える.
境界ボックスの天井部と底部の面にだけ方眼線を描く:
多数のプリミティブの効率的表現
Point[{pt1,pt2,}]
pt1, pt2, の点からなるマルチポイント
Line[{line1,line2,}]
line1, line2, からなるマルチライン
Polygon[{poly1,poly2,}]
多角形poly1, poly2, からなるマルチポリゴン
複数の要素を取ることのできるプリミティブ
プリミティブの中には,複数要素の形式を持つものもあり,これだと単独のプリミティブよりも速くWolframシステムフロントエンドで処理・描画することができる.多数のプリミティブの場合,複数要素形式を使うことでノートブックファイルのサイズを大きく減少させることもできる.複数要素形式を使うノートブックは使っていない場合よりもサイズが半分以下となり,描画時間も10倍速くなることがある.
以下はマルチポイントの乱数分布である:
GraphicsComplex[{pt1,pt2,},data]
data のグラフィックスプリミティブで整数 i として与えられる座標が pti とされるグラフィックスコンプレックス
プリミティブ間で座標データを共有するためのプリミティブ
メッシュとグラフのように,多数のプリミティブが同じ座標データを共有する場合,GraphicsComplexを使い座標データの一部を取り除くことでより効率的にすることができる.Wolfram言語の表面およびグラフプロット関数の出力は,通常この表現である.
次は座標を共有する点と線の構造である:
GraphicsComplexは効率的であるだけでなく,インタラクティブに便利である.座標を共有するプリミティブは,その中のひとつがドラッグされてもつながったままである.
GraphPlotの出力はGraphicsComplexなので,そのどの部分がドラッグされてもグラフはつながったままである:
どのプリミティブもGraphicsComplexの中で使うことができ,GraphicsComplexは2Dおよび3Dグラフィックスのどちらでも使うことができる.GraphicsComplexの中で,プリミティブの座標位置は指標によりGraphicsComplexの座標データに置き換えられる.
GraphicsComplexは多角形のメッシュを表す場合に特に有用である.GraphicsComplexを使うことで,隣接する多角形間のギャップの原因となる数値誤差を避けることができる.
Plot3Dの出力はGraphicsComplexである:
グラフィックスにあるテキストの書式
BaseStyle->value
グラフィックスで有効なテキストスタイルのオプション
FormatType->value
グラフィックスで有効なテキストの表記法のオプション
グラフィックス中のテキストに使う書式の指定
デフォルトの書式を使いプロットする:
今度は,12ポイントの太字フォントを使い同じプロットをする:
デフォルトのTraditionalFormの代りにStandardFormで表示する:
続くプロットで使うテキストスタイルを指定する:
すべてのテキスト要素が14ポイントのTimesフォントになる:
"style"
現行のスタイルシートで指定されたスタイル
FontSize->n
フォントサイズ(単位 : ポイント)
FontSlant->"Italic"
斜体フォント
FontWeight->"Bold"
太字フォント
FontFamily->"name"
フォント名の指定(例 :"Times""Courier""Helvetica"
BaseStyle使われる代表的な書式指定
ノートブック用フロントエンドを使っている場合,BaseStyleには現在使っているノートブックのスタイルシートで定義されたスタイル名を設定することができる.そうしておくと,グラフィックスに現れるテキスト要素はすべてそのセルスタイルの書式に従い表示される.また,FontSizeFontFamilyのようなフォント指定オプションを使い個別にテキスト要素の書式を指定することも可能である.FontSizeには印刷ポイント数でフォントの絶対サイズを指定する.1ポイントはインチに相当する.フォントサイズが数字で指定されているグラフィックス全体の大きさを変えてもテキスト要素の大きさはそれに対応して変わらないことに注意する.テキストの大きさを変えるには再度FontSizeを使い新たな値を指定する必要がある.フォントサイズが,スケールされた量として指定されているプロットの大きさを変える場合は,プロットの大きさが変わるに従ってフォントもスケールされる.FontSize->Scaled[s]の設定では,効果的なフォントサイズはプロットの中の s スケールされた単位である.
これでプロットの大きさを変えるとテキストの大きさも変わる:
Style[expr,"style"]
expr を指定されたスタイルで出力する
Style[expr,options]
expr をフォントやスタイルの設定条件に基づいて出力する
StandardForm[expr]
exprStandardForm(標準形)で出力する
テキスト要素の表記変換
ノートブックで使っている見出し用スタイルを使いプロットのラベルを表示する:
見出し用のスタイルは使うが,フォントを斜体にする:
StandardFormで表示する.フォントには12ポイントを使う:
上の例で使った"Section"のスタイルは使っているフロントエンドがノートブック用のときに有効である.テキスト型インターフェースのフロントエンドを使っている場合は,その限りでない.ただし,テキスト型でもFontSize等の個別指定は行える.「テキストとフォントのオプション」に使えるオプションを列挙してあるので参考にするとよい.
テキスト用グラフィックスプリミティブ
テキストのグラフィックスプリミティブTextを使い,2D,3Dグラフィックスの任意の位置にテキスト要素が挿入できる.個別にStyleでフォントを指定しない限り,テキストはグラフィックスのベーススタイルで表示される.
Text[expr,{x,y}]
文字列を実座標{x,y}に中央揃えで配置する
Text[expr,{x,y},{-1,0}]
左揃え{x,y}で配置する
Text[expr,{x,y},{1,0}]
右揃え{x,y}で配置する
Text[expr,{x,y},{0,-1}]
上揃え{x,y}で配置する
Text[expr,{x,y},{0,1}]
下揃え{x,y}で配置する
Text[expr,{x,y},{dx,dy}]
実座標{x,y} に横縦のずらし幅{dx,dy} でテキストを配置する
Text[expr,{x,y},{dx,dy},{0,1}]
読み方向が下から上になるようにテキストを垂直に配置する
Text[expr,{x,y},{dx,dy},{0,-1}]
読み方向が上から下になるようにテキストを垂直に配置する
Text[expr,{x,y},{dx,dy},{-1,0}]
文字を上下逆さにした表示にする
2Dグラフィックスにおけるテキスト要素の設定
テキスト要素を5個作成しプロットする:
{2,2}の位置に中央揃えで縦書き表示する:
テキスト要素を揃えるには,第2引数の実座標にテキストのどの点を持っていくか指定する.つまり,縦横のずらし幅を与えテキストを揃える位置が実座標にくるようにする.ずらし幅は,領域の中心点を原点{0,0}とし,領域の高さと横幅をともにからの座標範囲とした特別な相対座標で表す.また,ずらし幅は必ずしもからの範囲になくてもよい.
テキスト要素を色付けで表示することも可能である.TextグラフィックスプリミティブにRGBColor等のグラフィックス指示子を作用させるだけでよい.
Text[expr,{x,y,z}]
文字列を実座標{x,y,z}に中央揃えで配置する
Text[expr,{x,y,z},{sdx,sdy}]
実座標に横縦それぞれオフセットを与え,テキストを配置する
3Dグラフィックスにおけるテキスト要素の設定
テキスト要素を3D空間に配置する:
3Dグラフィックスではテキスト要素は常に表示される.多角形や他の要素の後ろに隠れるということはない.
オプション
デフォルト値
BackgroundNone
背景色
BaseStyle{}
段落揃えやフォント書式の指定
FormatTypeStandardForm
表記形
Textのオプション
テキスト要素は最後に表示されるので,長方形を塗り潰しても,文字はその上に表示される:
今度は,テキストの背景色をプロット領域の色にする.テキスト領域が白で表示される:
サウンド表現
「サウンド」では関数や数値データからサウンドを生成する方法について説明してある.ここでは,サウンドオブジェクトがどういった構造を持ち,形成されているか説明する.
Wolframシステムではサウンドはグラフィックスと同じように扱われる.事実,グラフィックスとサウンドを組み合せてサウンドトラック付きの画像を作ることも可能である.
グラフィックスにならい,サウンドもオブジェクトとしてとらえる.サウンドオブジェクトはSoundの頭部が作用した形で記述され,演奏音を表したサウンドプリミティブのリストから構成される.
Sound[{s1,s2,}]
サウンドプリミティブのリストからなるサウンドオブジェクトを生成する
サウンドオブジェクトの生成
「サウンド」で触れたが,Soundオブジェクトを生成するにはPlayListPlayの関数を使う.
関数をPlayは,Soundオブジェクトを生成する.コンピュータに演奏機能が備わっていれば,関数値に対応した音が発生する:

サウンドプリミティブ

SampledSoundList[{a1,a2,},r]
サンプルレート r で振幅値のリストからなるサウンドを指定する
SampledSoundFunction[f,n,r]
関数 fn 個の連続した整数に適用して生成した,サンプルレート r の振幅値からなるサウンドを指定する
SoundNote[n,t,"style"]
音符 n,時間指定 t の指定されたスタイルの音符のようなサウンドを指定する
サウンドプリミティブ
最も低次なレベルにおいて,サウンドとは音の振幅標本が連続したもの,またはMIDIイベントの列としてとらえられる.SampledSoundListでは,振幅は数値データのリストで与えられる.また,SampledSoundFunctionを使い関数からサウンドを生成すると,振幅データは関数に整数シーケンスを与え計算により生成される.ただし,実際の生成は演奏するときにだけ行われる.どちらのサウンド形態でも振幅値はからの範囲に入れておかなければいけない.SoundNoteでは,音符のようなサウンドは周波数,期間,振幅,音符のスタイルを表す一連のMIDIイベントとして表現される.
数値リストから,サンプルレート8000のSampledSoundListを生成する:
関数から,サンプルレート8000のSampledSoundFunctionを生成する:
SoundNoteを生成する:
ListPlayを実行するとSampledSoundListのプリミティブが生成され,PlayだとSampledSoundFunctionのプリミティブが生成される.デフォルト通りコンパイル指定が有効なら(Compiled->True),Playの生成するSampledSoundFunctionのオブジェクトはCompiledFunctionによってコンパイルされている.
各種のプリミティブでSoundオブジェクトが形成できたら,次のステップは,それを実際に演奏することである.グラフィックスの場合と同じように,このステップにおける基本処理は,カーネルで作ったサウンドオブジェクトを出力装置で演奏可能な低レベルのデータ形態に変換することである.演奏処理はWolframシステムのフロントエンドや外部プログラムで実行される.
複数のプリミティブを連続して演奏する:
複数のプリミティブを重ねながら演奏する:
低レベルのデータ表記において,サウンドは振幅を指定した16進数の列データからなる.低レベルに下げる前のカーネル内部処理において,振幅値はからの実数近似値で表されている.低レベルデータを生成するため振幅の実数データに「量子化処理」が施される.量子化処理でオプションの1つにSampleDepthのビット長設定がある.これは何ビットで標本を量子化するかを決めるものである.デフォルトの値は8ビットで(SampleDepth->8),この設定だと振幅は256レベルの量子化が可能である.これは多くの用途で十分なレベル数である.音符ベースのサウンドを低レベルで表現すると,MIDIイベントを時間で量子化したバイトストリームとすることができる.これは音符オブジェクトについてのさまざまなパラメータを指定する.時間の量子化は,プレイバックで自動的に決定される.
SampleDepthのビット長設定はPlayおよびListPlayのどちらでも使える.また,サウンドプリミティブに標本化レート(rate)と一緒にビット長(depth)を指定したいときは,{rate,depth}のリスト形式で指定する.

インポートとエキスポート

Import["file"]
サウンドをインポートする
Export["file.ext",expr]
サウンドをエキスポートする
インポートとエキスポートの関数
音声データは,ローカルのファイルシステムからでも,アクセス可能なリモートの場所からでもインポートすることができる.
以下は,Wolfram言語のドキュメントディレクトリから直接サウンドをインポートする:
Exportを使ってサウンドをディスクに書き出す.
インポートされたSoundをディスクに書き出す:
グラフィックスとサウンドのエキスポート
Wolfram言語ではグラフィックスやサウンドをさまざまな形式でエキスポートできる.Wolfram言語でノートブックフロントエンドを使っている場合は,Wolfram言語の提供する機能を使いグラフィックスおよびサウンドを他のプログラムへ直接コピーしたりペーストしたりすることができる.
Export["name.ext",graphics]
グラフィックスをファイル名から判断される形式でファイルにエキスポートする
Export["file",graphics,"format"]
グラフィックスを指定された形式でエキスポートする
Export["!command",graphics,"format"]
グラフィックスを外部コマンドにエキスポートする
Export["file",{g1,g2,},]
グラフィックスの列をアニメーションにエキスポートする
ExportString[graphics,"format"]
エキスポートされたグラフィックスの文字列表現を生成する
Wolfram言語グラフィックスとサウンドのエキスポート
"EPS"
EPS形式 ( .eps )
"PDF"
Adobe Acrobat形式 ( .pdf )
"SVG"
スケーラブルベクターグラフィックス ( .svg )
"PICT"
Macintosh PICT形式
"WMF"
Windowsメタファイル形式 ( .wmf )
"TIFF"
TIFFファイル ( .tif , .tiff )
"GIF"
GIFと動画GIFファイル ( .gif )
"JPEG"
JPEGファイル ( .jpg , .jpeg )
"PNG"
PNG形式 ( .png )
"BMP"
Microsoftビットマップ形式 ( .bmp )
"PCX"
PCX形式 ( .pcx )
"XBM"
X window systemビットマップ ( .xbm )
"PBM"
PBM形式 ( .pbm )
"PPM"
PPM形式 ( .ppm )
"PGM"
PGM形式 ( .pgm )
"PNM"
PNM形式 ( .pnm )
"DICOM"
DICOM医療画像形式 ( .dcm , .dic )
"AVI"
Audio Video Interleave形式 ( .avi )
Wolfram言語のサポートするグラフィックス出力形式(第1セクションの形式はデバイスの解像度に依存しない)
プロットを生成する:
図を,EPS形式でファイルにエキスポートする:
通常,Wolfram言語外部にグラフィックスをエキスポートする場合はグラフィックスが描画されるサイズを絶対値で指定しておく必要がある.これを行うには,ExportImageSizeオプションを指定する.
図の幅を印刷用ポイント数 x で印刷したいときは,ImageSize->x と指定する.ImageSize->72xi とすれば,図を xi インチの幅で印刷することができる.幅のデフォルト値は4インチになっている.ImageSize->{x,y}で図が x×y の領域に収まるようにスケーリングを施す.
ImageSizeAutomatic
印刷用ポイント数での絶対画像サイズ
"ImageTopOrientation"Top
画像の中でファイルをどのような向きにするか
ImageResolutionAutomatic
dpi単位での画像の解像度
Exportのオプション
Wolfram言語内部では,グラフィックスは最終的に描画されるコンピュータ画面や他の出力デバイスに全く依存しない形で操作される.
多くのプログラムおよびデバイスは,EPS等の解像度に依存しないフォーマットでグラフィックスを取り込むことができる.しかし,中にはグラフィックスを指定された解像度で特別なラスターまたはビットマップフォーマットに変換しておかなければ取り込めないものもある.そのような場合は,Exportにビットマップに必要な解像度をインチ当りのドット数(dpi単位)で指定したオプションImageResolutionを設定する.解像度を低く設定すれば画質は劣るが同時に画像を保存するのに必要なメモリ量も低く抑えることができる.よく使われる解像度はスクリーン表示で72dpi以上,プリンタ出力で300dpi以上である.
"DXF"
AutoCADのDXF形式 ( .dxf )
"STL"
STLステレオリソグラフィ形式 ( .stl )
Wolfram言語でサポートされる一般的な3Dジオメトリ形式
"WAV"
Microsoft wave形式 (.wav)
"AU"
μ 法則エンコード ( .au )
"SND"
サウンドファイル形式 (.snd)
"AIFF"
AIFF形式 (.aif, .aiff)
Wolfram言語でサポートされる一般的なサウンドフォーマットの例
グラフィックスとサウンドのインポート
Wolfram言語は,グラフィックスやサウンドをエキスポートだけでなく,インポートすることもできる.Importを用いてさまざまな形式でグラフィックスやサウンドを読むことができ,Wolfram言語の式としてWolfram言語に取り入れることができる.
Import["name.ext"]
ファイル名から推定した形式で,ファイル name.ext からグラフィックスをインポートする
Import["file","format"]
指定された形式でグラフィックスをインポートする
ImportString["string","format"]
文字列からグラフィックスをインポートする
グラフィックスとサウンドのインポート
JPEG形式で保存された画像をインポートする:
画像の複製4個を配列で表示する:
以下は,WAVファイルに保存されたサウンドをインポートする:
Importは読み込むデータの形式に依存したさまざまな構造の式を作成する.戻されるデータの処理をしたい場合は,通常その構造を知る必要がある.
Graphics[primitives,opts]
解像度に依存しないグラフィックス
Image[data,opts]
解像度に依存するビットマップイメージ
{graphics1,graphics2,}
アニメーショングラフィックス
Audio[data]
音声信号
Importによって返された式の構造
以下で,上記でインポートしたグラフィックスオブジェクトの全体の構造を示す:
使用されるピクセル値の配列を抽出する:
配列の次元を与える:
これは,ピクセル値の分布を示している:
変換された画像を示す: