二転三転で七転八倒する話

 ――店主がフリーズしている間に、僕はもう一度考えてみた。小体(小キューブ)の向きの変化が回転によって生じることは間違いない。しかし、その状態をX・Y・Zの各軸での回転数(以下、右回りの90度を“1ひねり”と書くことにする)だけで表現することは無理なようだ。
 例えば、(i, j, k)=(1, 1, 0)は、X軸で1ひねり、Y軸で1ひねりしたことを表わしてはいるけれども、その結果、小体の向きがどうなるかが特定できないのだ。X軸とY軸のどちらで先にひねるかによって向きが異なってしまうからだ。これは、個別の小体の“主観的”な座標で考えても全体の“客観的”な座標で考えても同じことだ。

 向きの変化には回転数だけでなく回転順も影響することが分かったところで、それをどうやって“向きを表わす変数”に反映させればいいのかが分からない。

 仕方がないので、島内本に掲載されている手順のいくつかをマクロに書いて試してみたりもしたが、うまい解決策を思い付くこともなく、ただ本に書いてあることを追認するだけの単調な作業になってしまった。ただ、見た目は同じ結果になる複数の異なる手順を実行したときに、(i, j, k)の値に違いが出るのは、手順が違えば回転する軸も異なるのだから当然といえば当然なのだが、これはこれで面白い。とはいえ、実際のキューブを見ても、崩したときの手順の違いが分かるわけではないのが残念だ。
 読みかけだった「ルービック・キューブによる群論入門」に、正六面体(立方体)の向きのバリエーションは24パターンあるとかいうことが書いてあったのを思い出して、もう一度読んでみた。頂点の位置が8通りで、その頂点を含む辺の向きが3通りだから、8×3=24だということで、いたってシンプルだ。それならばと、小体のある頂点の位置を(i, j, k)として、その頂点を含む辺の向きを表わす変数をもう一つ加えて(i, j, k, l)にしてみた。
 その結果、確かに小体の向きを正しく反映するようになったけれども、二面体は頂点の位置の変化、三面体は一辺の向きの変化になってしまうのが面倒だ。もっと簡単に分かるようにできないものだろうか…。

 正八面体の向きは正六面体と同じ24通りになるという説明を読み、正六面体に内接する正八面体の図を眺めていて、なるほど、正八面体の頂点は正六面体の各面の中心とぴったり一致しているので、8個の頂点×3本の辺と、6個の頂点×4本の辺は同じになるんだな、と納得した。

 「だったら、正八面体で考えてもいいんじゃないか?」

 ――いつの間にやら店主のフリーズが解除されたようだ。

 「おおっ、この線を見てみろよ。ほら、この、正八面体の辺だよ。これは立方体の面の移動方向と同じじゃないか!」

 ――何を言ってるんだ。立方体の各面の中心をつなぐ線だから、当然そうなるだろう。

 「だから、ここだよ。正三角形だよ。この正三角形がキューブの向きがズレる原因だったんだ」

 ――まあ、確かにそうだね。面の中心を繋いだ線が正方形になるのは、一つの軸で一回転した場合だからね。それで?

 「その場合は向きは保存されるけれども、二つ以上の軸にまたがって回転した場合は向きは保存されない。つまり、一つの正方形の軌道から別の正方形の軌道への乗り換えると、そこで向きが変わるということだ」

 ――それが分かっても、どういうデータにすればいいのか…?

 「X軸→Y軸、Y軸→Z軸、Z軸→X軸の乗り換えを+1、その逆を-1として…」

 ――ちょっと待てよ。立方体の向きの変化を考えてるんだから、3つの軸(x, y, z)が移動後にどこに行ったかを調べればいいかもしれないぞ。うん、それだ。

 X軸で1ひねりするとY軸とZ軸が入れ代って(x, z, y)、次にY軸で1ひねりするとX軸とZ軸が入れ代わって(y, z, x)、さらにZ軸で1ひねりすると(z, y, x)となる。これは、3個の順列だから6通りにしかならない。元の状態(x, y, z)になっても位置が異なるパターンが4通りあるということだな。だけど、それだけで充分だったんだ。元の位置に戻ったときの向きに注目してるんだから。

 「つまり、どういうこと?」

 ――つまり、(x, y, z)、(x, z, y)、(z, y, x)、(y, x, z)、(z, x, y)、(y, z, x)という6通りのパターンの置換にするってことだよ。

 「なんだか分かりにくいな」

 ――じゃ、正しい向きを(0, 0, 0)として、向きのズレを(0, 2, 1)、(1, 0, 2)、(1, 1, 1)、(2, 1, 0)、(2, 2, 2)で表わせばいいだろう。

 「(1, 1, 1)と(2, 2, 2)は3つの軸が全部ズレたパターンだな。でも、この1と2の違いは何だ?」

 ――さっきの"+1"と"-1"の違いだよ。X→Y→Zを"+1"、Z→Y→Xを"-1"と考えて、マイナスが邪魔だったから"-1"を"+2"にしたんだ。

 「なるほど。分かってしまえばこんなに単純なことを、複雑に考えてしまっていたんだな。キューブの向きだけに、向きになって考えてしまったってオチでいいかな?」

 ――そんなことを言っている店主を無視して、僕はさっそくスクリプトを書き直した。

 ――できたよ。じゃ、この前と同じ島内本の【6a】を実行してみるぞ。


read from: 'macro\s06a.txt'
operators='+e+n+w+s+2t-s-w-n-e+2t'
(old dir:000000)->(new dir:000000),[ 1, 2, 3, 4, 5, 6, 7, 8, 9,10]
(xyz,ijk,setnwb)->(xyz,ijk,setnwb),[+e,+n,+w,+s,2t,-s,-w,-n,-e,2t]
(112,000,se----)->(121,021,s-e---),[+e,  ,  ,  ,2t,  ,-w,-n,  ,2t]
(121,000,s-t---)->(321,000,--ts--),[  ,  ,  ,+s,  ,-s,  ,  ,  ,2t]
(321,000,--tn--)->(112,021,nt----),[  ,+n,+w,  ,2t,  ,  ,  ,-e,  ]

    +---+
    | t |
    |   |
    | e |
+---+---+---+---+
|   | s |   | s |
|   |  n|t  |   |
|   |   |   |   |
+---+---+---+---+
    |   |
    |   |
    |   |
    +---+

 ――で、この後に引き続き"+s"を追加すると、

operators='+s'
(old dir:000000)->(new dir:100000),[ 1]
(xyz,ijk,setnwb)->(xyz,ijk,setnwb),[+s]
(111,000,set---)->(113,021,st---e),[+s]
(121,021,s-e---)->(112,000,se----),[+s]
(113,000,se---b)->(133,021,s---be),[+s]
(123,000,s----b)->(132,021,s---b-),[+s]
(131,000,s-t-w-)->(111,021,stw---),[+s]
(132,000,s---w-)->(121,021,s-w---),[+s]
(133,000,s---wb)->(131,021,s-w-b-),[+s]
(112,021,nt----)->(123,000,n----t),[+s]

    +---+
    | t |
    |   |
    |www|
+---+---+---+---+
|  b|sss|t  | s |
|  b|s s|e  |   |
|  b|sns|t  |   |
+---+---+---+---+
    |ete|
    |   |
    |   |
    +---+

となる。二面体SEが元の位置に戻ったときに、今度はちゃんと向きが(0, 0, 0)になってるだろ?

 「確かにSEは正しい向きだけど、このNTの向きも(0, 0, 0)なってるのは変じゃないか?」

 ――それは仕方ないな、実際は24通りあるのを簡略化して6通りにしたんだから。でも、軸が3つとも元と同じで位置だけが違っている場合は一目で分かるパターンだから問題ないだろう。

 「なるほど。反転した二面体が裏側に回ると(0, 0, 0,)になるわけだね」

 ――またつまらない落ちを付けられないうちに、僕は素早くアップした。

| コメント(0) | トラックバック(0)
WebMoney ぷちカンパ

トラックバック(0)

トラックバックURL: http://homeposition.net/mt/mt-tb.cgi/178

コメントする

カレンダー

<   2009年10月   >
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Twitter

Powered by Movable Type 4.261

このページについて

このページは、かみ かずしげが2009年10月24日 19:30に書いたブログ記事です。

ひとつ前のブログ記事は「夢うつつでひらめいた話」です。

次のブログ記事は「マンガ売りの少女」です。

最近の記事はメインページで、過去の記事はアーカイブで閲覧できます。