N次元ダイスの(N-1)面把握
XI シリーズには「ダイスのうち2面見えていれば他の全ての面が確定する」という法則があります。
この法則を使い見えない面を把握するテクニックは、しばしば「二面把握」と呼ばれます(参考: /alea-area/二面把握)。
当然ながら「二面把握」は3次元のダイスについての話なのですが、ちょうどあるゲームの制作中に4次元のダイスについて考える機会(あるいは必要性)があったため、ここに「二面把握の一般化」について記しておきます。
/icons/-.icon
二面把握とは
2面が見えていればダイスの全面が確定するというのは、例えば
上面が {3}、前面が {6} (←以降、目の数は {x} のように表記します)
のダイスがあった場合に、このダイスは常に
右面は {5} である
ということがわかることを指しています。ダイスには「表裏を足すと7」の法則がありますから、最初の条件から
下面が {4}、後面が {1}
であることは簡単にわかりますが、左右のどちらが {2} でどちらが {5} なのかは容易にはわかりません。
実際にゲーム中にこの判断をする場合は、暗記や他のダイスとの関係性を頼って(頭の中で回転して)判断したりしますが、高次元では回転した際の挙動自体が明らかではないと思われますので、もう少し3次元での事情について考察しておきましょう。
(以下、「上面が {x}、前面が {y}、右面が {z}」のダイスを ({x}, {y}, {z}) のように表記します)
そもそも XI シリーズで二面把握が可能なのは、ダイスに鏡像体がなく、常に回転して重ね合わせ可能なものしか登場しないからです。どのダイスも標準的なダイス ({1}, {2}, {3}) を回転させたものであるといえるわけです。
そのため厳密には、1つのダイスに対する条件というよりは
ダイス ({1}, {2}, {3}) と ({3}, {6}, {5}) は同じダイスか? それとも鏡像か?
といった問いを考えるべきだということになります。
3次元の個別的な問題については、実際に ({1}, {2}, {3}) のダイスを回転させることで一致するか判定できますし、順を追って
({1}, {2}, {3}) は {3} の面を中心に 180° 回転すると ({6}, {5}, {3}) になる
({6}, {5}, {3}) はこの3つの面が集まる頂点を中心に 120° 回転すると ({3}, {6}, {5}) になる
のように考えることも可能です。しかし高次元では直感的な回転が容易ではないので、次節以降で一般化に向けた準備をしていきたいと思っています(4次元以上でも上の2種類の操作で一致させられるかを考えればいいのでは? と思った方は正解なのですが、その時点で大分高次元が見えていると思います)。
/icons/-.icon
回転と行列式
さて、空間内での回転や鏡映(反転)について考えるため、ここでは線形代数の力を大いに借りることにします。というのも、回転や鏡映は線形代数の扱う対象である線形写像の一種だからです。
この記事では数学についてあまり深入りしませんが、回転や鏡映は「移動前の点」と「移動後の点」を対応づける操作と考えられ、これを写像(対応付け)とみなしているわけです。写像の中でも線形性という性質をもつものは線形写像と呼ばれ、これらは行列を使って表現できることが知られています。
なぜこんなもので回転・鏡映を分類できるかというと、行列には行列式という値が定められるのですが、実は
回転に対応する行列 ⇒ 行列式が 1
鏡映に対応する行列 ⇒ 行列式が -1
となることが知られています。以下ではこのことを用いて、高次元での面の決定について考えていきたいと思います。
3次元ダイスの場合
とはいっても、まずは3次元から考えていきましょう。
例: ({3}, {6}, {5}) の場合
上でも挙げた ({3}, {6}, {5}) について、回転で ({1}, {2}, {3}) と一致することを見ていきます(説明の都合上、順番を変えて移動前を ({3}, {6}, {5}) 、移動後を ({1}, {2}, {3}) とします。逆にしても鏡像かどうかには関係ありません)。
適当に {3}, {6}, {5} の向いている方向をそれぞれ x軸, y軸, z軸 とすると、移動前の面の位置はベクトル$ \begin{bmatrix}1 \\ 0 \\ 0 \end{bmatrix},$ \begin{bmatrix}0 \\ 1 \\ 0 \end{bmatrix},$ \begin{bmatrix}0 \\ 0 \\ 1 \end{bmatrix}です。
それぞれの面が移動後にはどの位置にいるかを考えると、
{3} の面: z 軸方向なので $ \begin{bmatrix}0 \\ 0 \\ 1 \end{bmatrix}
{6} の面: x 軸方向の {1} の裏なので $ \begin{bmatrix}-1 \\ 0 \\ 0 \end{bmatrix}
{5} の面: y 軸方向の {2} の裏なので $ \begin{bmatrix}0 \\ -1 \\ 0 \end{bmatrix}
に移動していることがわかります。この移動を表す行列は、上の3つのベクトルをそのまま横に並べて$ \begin{bmatrix} 0 & -1 & 0 \\ 0 & 0 & -1 \\ 1 & 0 & 0 \end{bmatrix}です(ここでいう移動を表す行列というのは、移動前のベクトルを右からかけると移動後のベクトルになる行列という意味です)。
後で計算については補足しますが、上の行列の行列式は 1 になるため、 ({1}, {2}, {3}) と ({3}, {6}, {5}) は回転によって一致させられることがわかります。
例: ({2}, {3}, {6}) の場合
同様に考えると、移動に対応する行列は$ \begin{bmatrix} 0 & 0 & -1 \\ 1 & 0 & 0 \\ 0 & 1 & 0 \end{bmatrix}となり、この行列の行列式は -1 になります。そのため ({1}, {2}, {3}) と ({2}, {3}, {6}) は鏡像の関係であることがわかります。
3次元の場合の一般論
上記の手順をまとめると、3次元の場合には鏡像の判定に以下のような手順を踏めば良いです。
あるダイス ({x}, {y}, {z}) が ({1}, {2}, {3}) と回転で一致させられるかを考えることにします。
手順 1: 各面 {1}, {2}, {3}, ..., {6} に対してベクトル$ \begin{bmatrix}1 \\ 0 \\ 0 \end{bmatrix}, $ \begin{bmatrix}0 \\ 1 \\ 0 \end{bmatrix}, $ \begin{bmatrix}0 \\ 0 \\ 1 \end{bmatrix}, $ \begin{bmatrix}0 \\ 0 \\ -1 \end{bmatrix}, $ \begin{bmatrix}0 \\ -1 \\ 0 \end{bmatrix}, $ \begin{bmatrix}-1 \\ 0 \\ 0 \end{bmatrix}が対応していると考える
手順 2: 3つの面 {x}, {y}, {z} に対応するベクトルをそのまま横に並べ、3×3行列$ Aを作る
手順 3: 行列$ Aの行列式$ \det Aが 1 であれば ({1}, {2}, {3}) と回転で重ね合わせられる。逆に -1 であれば鏡像である
※ ({1}, {2}, {3}) 以外のダイス P と Q での判定を考える場合は、以下のいずれかの方法を利用すれば良いです。
手順1 の時点で、 {1}, {2}, {3} ではなくダイス P の x軸, y軸, z軸 に位置する面を基本ベクトルに対応させ、あとは Q について同様に 手順2~3 を行う。
ダイス P と Q 双方について ({1}, {2}, {3}) と鏡像かどうかを判定し、その結果が一致するかどうかを見る。
行列式の計算について
上では行列式の計算について既知としましたが、実際には以下のように考えればよいです。
行列式の計算を基本変形などを通じて行うことを考えると、ここで登場する可能性がある基本変形は
2つの列を交換する
1つの列を-1倍する
の2つの操作だけです(※行基本変形が一般的かと思いますが、後の話の都合上、列基本変形にしています)。
これらはどちらも行列式を -1 倍にするような操作なので、これらを適用して単位行列になるまでの回数の偶奇を考えれば、行列式が 1 か -1 かが分かります。
例えば、({3}, {6}, {5}) の行列の場合だと
$ \begin{bmatrix} 0 & -1 & 0 \\ 0 & 0 & -1 \\ 1 & 0 & 0 \end{bmatrix} \rarr \begin{bmatrix} -1 & 0 & 0 \\ 0 & 0 & -1 \\ 0 & 1 & 0 \end{bmatrix} \rarr \begin{bmatrix} -1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & 1 \end{bmatrix} \rarr \begin{bmatrix} 1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & 1 \end{bmatrix} \rarr \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix}
のように4回の変換で単位行列になるため、元の行列の行列式は 1 です。
※上記は、 行列式の定義として置換の符号から計算すれば長々と書く必要もないのですが、その話は後々触れる予定です。
/icons/-.icon
4次元ダイスの場合
お待たせしました。ここまで長くなってしまいましたが、4次元ダイスについて考えていきましょう。といっても基本的に3次元の場合を一般化するだけなので、特別な概念は必要ありません。以下、各軸方向から見た面が x, y, z, w であるようなダイスを ({x}, {y}, {z}, {w}) と書くことにします(計算時に一貫していればいいので、どの方向が何かを深く考える必要はありません)。
3次元の場合と同様に、あるダイス ({x}, {y}, {z}, {w}) が ({1}, {2}, {3}, {4}) と回転で一致させられるかどうかを考える場合、次の手順を踏めばよいことになります。
手順 1: 各面 {1}, {2}, {3}, ..., {8} に対してベクトル$ \begin{bmatrix}1 \\ 0 \\ 0 \\ 0 \end{bmatrix}, $ \begin{bmatrix}0 \\ 1 \\ 0 \\ 0 \end{bmatrix}, $ \begin{bmatrix}0 \\ 0 \\ 1 \\ 0 \end{bmatrix}, $ \begin{bmatrix}0 \\ 0 \\ 0 \\ 1 \end{bmatrix}, $ \begin{bmatrix}0 \\ 0 \\ 0 \\ -1 \end{bmatrix}, $ \begin{bmatrix}0 \\ 0 \\ -1 \\ 0 \end{bmatrix}, $ \begin{bmatrix} 0 \\ -1 \\ 0 \\ 0 \end{bmatrix}, $ \begin{bmatrix} -1 \\ 0 \\ 0 \\ 0 \end{bmatrix}が対応していると考える
手順 2: 4つの面 {x}, {y}, {z}, {w} に対応するベクトルをそのまま横に並べ、4×4行列$ Aを作る
手順 3: 行列$ Aの行列式$ \det Aが 1 であれば ({1}, {2}, {3}, {4}) と回転で重ね合わせられる。逆に -1 であれば鏡像である
例: ({7}, {4}, {3}, {8}) の場合
この場合、行列$ Aは $ A = \begin{bmatrix} 0 & 0 & 0 & -1 \\ -1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 \end{bmatrix}となります。
$ \det A = 1なので(前節の手順で確認してみてください)、このダイスは ({1}, {2}, {3}, {4}) と回転で重ね合わせられます。
4次元ダイスの3面把握
4次元のダイスについて、1つの面が不明である場合は何が起こるでしょうか?
例えば ({1}, {2}, {3}, {4}) と重ね合わせられるダイス ({7}, {4}, {?}, {8}) があったとします。この場合、当然ながら {?} は {3} か {6} のどちらかです。実際に上のように行列を構成してみれば、行列式が 1 になるのは ({7}, {4}, {3}, {8}) であることが分かり、欠けた面情報が復元できます。
つまり、3次元の二面把握に対応するものとして、4次元ダイスでは「三面把握」が存在することが分かります。
同様に、N次元では「(N-1)面把握」が存在するということが分かります。
/icons/-.icon
図形的な解釈に立ち戻って
(執筆中)