はじめに
これは POV-Rayによる数学お絵かき入門 Advent Calendar 2017 の4日目の記事です.
最初はカメラについて書く積りでしたが, 予定を変更してPOV-Rayにおける識別子(変数)の宣言について書きます.
公式ドキュメントでは
http://www.povray.org/documentation/3.7.0/r3_3.html#r3_3_2_2
http://www.povray.org/documentation/3.7.0/r3_3.html#r3_3_1_5
辺りの内容が近いです.
最初の例
POV-Rayで変数を宣言するには例えば次のようにします.
#declare a=1;
これは変数a
に数値1
を与える命令です.
POV-Rayでは変数の型を明示的に指定する必要はありません.
行末のセミコロン;
は基本的には必要です.
数値やベクトルなど以外では;
が不要らしいですが, 書いても問題ないので全部書くようにするのが吉です.
http://www.povray.org/documentation/view/3.6.0/237/
http://www.povray.org/documentation/3.7.0/r3_3.html#r3_3_1_5_2
数値
POV-Rayでは整数と実数は明確に区別されません.
具体例を挙げるなら「1
と1.0
を区別する事はできない」になります.
これについては別の回で詳しく書くかも知れません.
例
#declare e=2.718281;
ベクトル
POV-Rayではベクトルを< >
で囲んで表します.
例
#declare r=0.1;
#declare c=<1,1,1>;
sphere{c,r}
とすれば$(1,1,1)$中心の半径$0.1$の球面が描けます.
注意
ベクトルの次元
基本的によく使うのは3次元のベクトルですが, 他にも2, 4, 5次元のベクトルを扱う事ができます.
例: <1,2>
, <1,2,3,4>
, <1,2,3,4,5>
ただし<1>
のような1次元ベクトルは許容されません.
これらの用途は次です:
種類 | 用途 |
---|---|
2次元 | 2次元座標, prism などのオブジェクト |
3次元 | 通常の座標, 色の指定(rgb ) |
4次元 | 4次元座標, 色の指定(rgbf , rgbt ) |
5次元 | 色の指定(rgbft ) |
これについてもまた詳しく書きます.
ベクトルの要素の取り出し方
ベクトルの成分を取り出すには次のように(ベクトル).(成分の指定)
とします.
#declare a=<1,2,3>.y;
この例ではa
に2
が代入されます.
2次元ベクトルではu
, v
3次元ベクトルではx
, y
, z
4次元ベクトルではx
, y
, z
, t
が成分の指定の記号として使われます.
ベクトルの解釈
実はPOV-Rayでは次のような指定が記述が可能です.
sphere{1,0.1}
sphere
は第一引数にベクトルしか受け取りませんが, ここでは数値を指定しています.
このような場合は1
は<1,1,1>
のように全てに同じ成分を並べたものとして解釈されます.
(1
と<1,1,1>
が内部的に同じものとして扱われている訳ではありません.)
これを使えば次のような記述も可能です.
#declare a=<1,2,3>-1;
この例ではa
に<0,1,2>
が代入されます.
3次元のベクトルを引数に取る筈の所に2次元ベクトルを書けば$z$成分に$0$が保管される, 等もあります.
たとえばsphere{<1,2>,0.2}
と書けばこれはsphere{<1,2,0>,0.2}
と同じです.
ベクトルの要素
ベクトルの要素には数値しか許容されません.
POV-Rayではベクトルとは別に配列が用意されています. (後述)
文字列
しばらくは文字列を扱う事はありませんが, 同様に
#declare a="hoge";
として宣言が可能です.
POV-Rayで文字列が活躍するのは(後で書く予定の)
-
text
(テキストオブジェクト) -
debug
(テキスト出力)
になります.
配列
配列を書くためには次のようにします.
#declare hoge=array[3];
#declare hoge[0]=1;
#declare hoge[1]=2;
#declare hoge[2]=3;
単に配列を宣言しただけでは, 配列は初期化されていません.
(参照するとエラーになります.)
次のような書き方も可能です.
#declare hoge=array[3]{1,2,3};
注意
配列のインデックス
上で既に見ましたが, $n$次元配列の要素を参照する際には[0]
から[n-1]
までのインデックスを使います.
配列の長さの宣言
C言語では配列の要素数を与えるには#define
を使う必要がありますが, POV-Rayでは全て#declare
で書けます.
#declare l=3;
#declare hoge=array[l];
配列の要素
古いバージョンでは配列の要素は固定(数値なら数値, 文字列なら文字列)の制約がありましたが, 最近のバージョンでは混在していても問題ありません.
多次元配列
他の多くの言語と同様に
#declare hoge=array[2][3]{{1,2,3},{4,5,6}};
などで宣言が可能です.
真偽値
POV-Rayの真偽値はC言語と同様に数値の0
, 1
で表現されます.
比較演算子には=
, <
, >=
等が用意されていて, 例えば1=2
, 1<2
, 1>=2
はそれぞれ0
, 1
, 0
と評価されます.
(等号には==
を使いません)
変数のスコープ
#declare
で宣言した変数はグローバル変数として扱われます.
(別の回で解説予定の)macroやincludeファイル内で有効な変数を宣言するには#local
を使います.