図形ファイルの記述−2.値と演算
点(ベクトル)の宣言
[0, 0, 1, 1 + sqrt(2)]
4次元空間上の点(座標ベクトル)は、上のように角カッコとコンマを使用して宣言します。
各要素は実数や演算結果・関数の値など「答えが実数になるもの全て」を指定することができます。
cellブロック内に書かれた(演算の項や引数などでない)座標ベクトルは全て頂点の宣言と見なされます。
[0, 1]
このような記述をしても2次元ベクトルにはならず、省略された要素に0が補完されて4次元ベクトルになります。
つまり上のような記述は[0, 1, 0, 0]と意味的に等価です。
また、この「補完」を利用すると、
[]
ゼロベクトルをこのように書くこともできます(ひとつも要素を記述しない=全ての要素に0が補完される)。
演算
4 / 2 ^ 2 [0, 3, 2, 1] - [0, 1, 1, 1] * 0.5
4th Viewでは、実数同士の四則演算・べき乗(^)・剰余(%)・ベクトル同士の加減算・ベクトルのスカラー倍・スカラー除がサポートされます。
演算の優先順位は数学での優先順位と同じく、べき乗>乗除算・剰余>加減算となります。
この優先順位は、ひとつの式中に実数とベクトルが混在しても変わりません。
なお、ベクトル内積や外積は関数によって求めます。
4 # 2 [#1, #1, #1, -1] #[0, 3, 2, 1]
また、'±'を意味する演算子として#が定義されます。
2項演算子または単項演算子として使用でき、2項演算子として使用する場合の優先順位は加減算と同じです。
ひとつの座標ベクトルの中に複数の#がある場合、ベクトルはその全ての組み合わせを取ります。
#演算子による演算結果は「複数の値」となりますが、4th Viewでは「複数の値」同士の演算はサポートされません。
(4 # 2) * (3 # 1)
このような記述はエラーになります。
関数
sqrt(2) //√2 cos(p / 4) //コサイン,「p」は円周率
4th Viewでは、三角関数、二乗根、絶対値(abs関数)などの基本的な関数を使用することができます。
「辺や面そのもの」を返すlength関数・polygon関数もこの一種です。
関数の一覧はリファレンスを参照してください。
定数の宣言
a = sqrt(2) + 1 //定数「a」の宣言 [0, a, a + 1, 1] //宣言された定数を使用
図形ファイル中に代入式を書くと、定数の宣言と見なされます。
宣言された定数は、普通の値と同じように演算したり、関数の引数にしたりすることができます。
定数には実数のほか、ベクトルや変換形式を代入することもできます。
また、#演算子の演算結果(複数の値)も代入することができます。
定数名に使用可能な文字
定数名には、a〜z、0〜9およびアンダースコア(_)のみが使用できます。
アルファベットの大文字と小文字は区別されません。
定数名を既存の関数と同じ名前にすることはできますが、特別な意味をもつ単語(cell, edge, face)にすることはできません。
定数の有効範囲
定数をファイルの冒頭などcellブロックの外で宣言すれば、ファイル内の全域で使用することができます。
cellブロックの中で宣言することで、有効範囲をそのブロック内のみに制限することができます。
edgeブロックやfaceブロックの中で定数を宣言することはできません(使用することはできます)。
定数の上書き
a = 2 //定数「a」の宣言……@ cell { a = 1 //ブロック内で上書き……A [a, 0, 0, 0] //ここではa = 1 } cell { [a, 0, 0, 0] //ここではa = 2 (@の値が戻ってくる) } a = sqrt(2) + 1 //ブロック外で上書き……B cell { [a, 0, 0, 0] //ここではa = √2 + 1 }
一度宣言した定数と同じ名前の定数を再度宣言することができます。その場合、先に宣言した定数の値は破棄されます。
ただし、ブロック外で宣言された定数をブロック内で上書きした場合は注意が必要です。
この場合、上書きの範囲がそのブロック内に制限され、定数を上書きしたブロックを抜ければ再びもとの値に戻ります。
いずれにせよ、複雑な挙動による思わぬミスが発生する恐れがあるため、定数の上書きは推奨しません。
既定の定数
以下は、アプリケーションで最初に宣言されている定数です。
図形ファイル内で宣言なしに使用することが可能です。
定数名 | 値 |
---|---|
p | π(円周率、3.1415……) |
t | φ(黄金比、(1+√5)/2) |
perm3 | 変換形式の値 詳細は変換形式によるコピーを参照 |
perm4 | |
perm12 | |
cell24 | |
negate | |
negate_even |
プログラマ―の皆様へ
「これって変数じゃないの?」と思われるかもしれませんが、 プログラミング言語における変数は数学的な意味での変数ではないことと、 「値に名前を付ける」用途で使われることから名前は「定数」としました。