N次元ダイスの(N-1)面把握
XI シリーズには「ダイスのうち2面見えていれば他の全ての面が確定する」という法則があります。
当然ながら「二面把握」は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} に対応するベクトルをそのまま横に並べ、行列$ 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}) と鏡像かどうかを判定し、その結果が一致するかどうかを見る。
行列式の計算について
上では行列式の計算について既知としましたが、実際には以下のように考えれば良いです。
(執筆中)
4次元ダイスの場合
(執筆中)