図形ファイルの記述−4.変換形式によるコピー
変換形式は、対称的に配置された複数の胞や頂点を同時に宣言するために導入した形式です。
主に<copy>タグ内で使用しますが、定数として宣言することもできます。
変換形式と変換要素
変換形式は複数の「変換要素」で構成され、変換要素はひとつの変換を表します。
このように書くと変換形式は変換群と似た概念と思われるかもしれませんが、
変換群が変換を続けて行う(=直列)のに対し、変換形式はそれぞれの変換を個別に行って(=並列)もとの点をコピーする点で異なるため、
混同しないために「変換形式」と名付けました。

軸形式の書式
軸形式は変換要素の記述法の一種で、座標の入れ替えや符号の反転を表す4文字のアルファベットで記述します。
軸形式 | 相当する行列 | 意味・効果 | |||
---|---|---|---|---|---|
xyzw | 1 | 0 | 0 | 0 | 変換なし |
0 | 1 | 0 | 0 | ||
0 | 0 | 1 | 0 | ||
0 | 0 | 0 | 1 | ||
yxzw | 0 | 1 | 0 | 0 | X座標とY座標を入れ替える |
1 | 0 | 0 | 0 | ||
0 | 0 | 1 | 0 | ||
0 | 0 | 0 | 1 | ||
xYzw | 1 | 0 | 0 | 0 | Y座標の符号を反転させる |
0 | -1 | 0 | 0 | ||
0 | 0 | 1 | 0 | ||
0 | 0 | 0 | 1 |

このように、「x」「y」「z」「w」の「書く順番」で座標の入れ替えを表し、「大文字」で符号の反転を表します。
sel関数
sel(xyzw, Xyzw, xYzw, xyZw, xyzW)
sel関数は、複数の変換要素を並べて変換形式を生成する関数です(任意の数の引数を取ることができます)。
この例の場合は要素数5の変換形式となり、実際にこのような変換形式のcopyタグを記述するとオリジナルを含めて5個の胞が生成されます。
sel(Xyzw, xYzw, xyZw, xyzW)
変換形式の最初の要素は常に変換を行わない変換要素(軸形式ではxyzw・行列変換における単位行列に相当)でなければなりません。
sel関数では、そのような変換要素が先頭にない場合、自動でxyzwが補完されます。
そのため、上の2つの例では、sel関数は全く同じ変換形式を返します。
軸形式の自動変換
軸形式の記述は、sel関数の引数とされる時以外は自動で変換形式に変換されます。
軸形式Aが変換形式に変換される場合、変換しない変換要素とAの2要素をもつ変換形式(I, A)となります。
rotate**関数
軸形式を使えば座標の偶数置換などは簡潔に表すことができますが、5回転対称などを記述することはできません。
そのような回転による変換を表すために、rotate**関数(**は任意の平面、XYなど)が用意されています。
rotateXY(5) rotateXZ(4) * sel(xyzw, xyZw, xyzW)
rotate**関数は回転の分割数(?)を引数として取り、変換形式を返します。
sel関数によって生成した変換形式と同様に扱うことができ、互いに演算が可能です。
変換形式の乗算
変換要素は乗算することができます。これは、変換行列の乗算と同じく「変換を連続して適用する」ことと意味としては等価です。
この発展として、変換形式にも乗算を定義することができ、図形ファイル中では演算子*によって乗算が可能です。
要素数nの変換形式と要素数mの変換形式を乗算すると要素数n×mの変換形式となり、その要素は変換要素の乗算の全ての組み合わせとなります。
以下に例を示します。
変換形式P(I, P1, P2, P3) × 変換形式Q(I, Q1, Q2)
= PQ(I, P1, P2, P3, Q1, P1Q1,P2Q1……P3Q2)
(Iは「変換しない変換要素」の意)
P | |||||
---|---|---|---|---|---|
I | P1 | P2 | P3 | ||
Q | I | I | P1 | P2 | P3 |
Q1 | Q1 | P1Q1 | P2Q1 | P3Q1 | |
Q2 | Q2 | P1Q2 | P2Q2 | P3Q2 |
要素は左上から右に向かって順に並べられます。
変換形式の乗算は、「変換形式Pによるコピーを行った後、その全てのパターンに変換形式Qによるコピーを行う」ことと意味的に等価になります。
なお、当然ですが乗算の交換法則は成立しません(P×Q≠Q×P)。
既定の変換形式
以下の変換形式は、定数としてアプリケーションで最初に宣言されます。
「cell24cv」「cell120」以外の変換形式は座標の偶数置換と符号反転のみで構成されています。
定数名 | 値 | 要素数 | 意味・効果 |
---|---|---|---|
perm3 | sel(xyzw, yzxw, zxyw) | 3 | X・Y・Z座標の全ての偶数置換の組み合わせ |
perm4 | sel(xyzw, yxwz, zwxy, wzyx) | 4 | 同じ位置に同じ座標が来ない置換の組み合わせ perm4 * XYZW で、正8胞体の胞や正16胞体の頂点にみられる配置となる |
perm12 | sel(xyzw, xzwy, xwyz, yxwz, yzxw, ywzx, zxyw, zywx, zwxy, wxzy, wyxz, wzyx) | 12 | 全ての偶数置換の組み合わせ |
negate | Xyzw * xYzw * xyZw * xyzW | 16 | 全ての符号反転の組み合わせ 正8胞体の頂点や正16胞体の胞にみられる配置 |
negate_even | sel(xyzw, XYzw, XyZw, XyzW, xYZw, xYzW, xyZW, XYZW) | 8 | 偶数個の符号反転による全ての組み合わせ 一般次元における半立方体(demi-tesseract)の頂点にみられる配置 4次元では正8胞体の胞や正16胞体の頂点にもこの配置がみられる |
cell24 | sel(xyzw, yXwZ, YxWz, XYZW) * sel(xyzw, xzwy, xwyz, zxyw, zywx, zwxy) | 24 | 正8胞体の面や正24胞体の胞・頂点に見られる配置 XY平面またはZW平面に作られた平面図形を、原点を中心とした4回転×全ての平面に配置する |
cell24cv | (表現不能) | 24 | 正24胞体の胞・頂点に見られる配置A XYZWのどれかの座標軸上に中心を持つ胞を、正24胞体の胞に対応する位置に配置する |
cell120 | (表現不能) | 120 | 正120胞体の胞・正600胞体の頂点に見られる配置 YZW(X軸以外)のどれかの座標軸上に中心を持つ「ある向き※」の胞を、正120胞体の胞に対応する位置に配置する |
※……他に7つの胞が同様に座標軸上に中心を持つような配置。
この変換によるコピーで胞が貫通するような配置になったら、全てのY座標とZ座標を入れ替えてみて下さい。