ルービックキューブ(3X3X6)の回転動作版


 

ルービックキューブ(3X3X6)の回転動作を実現するプログラムを示します。一つ

の方向からの図だけではパネルの動きが判り辛いので、 四つの方向からの図を同

時に3D描画させるようにしています(図1参照)。  見る方向はプログラム内で自由

に設定できます。以下の例では、

 

方向1: θ=45度、φ=45

方向2: θ=45度、φ=135

方向3: θ=−135度、φ=45

方向4: θ=−135度、φ=135

 

の四つの方向からです。

 

RUBIK-CUBE-3X3X6-KAITEN-DOUSABAN-1.GIF - 11,168BYTES

(図1、十進BASICによる3Dグラフィックス)

 

パネルを少し動かしてみましょう。Z2CROTATION→X2CROTATION→Y2C

ROTATIONという順番で回転動作させたものが図2です。 当然、全ての図でパネ

ルが連動して動いています。

 

RUBIK-CUBE-3X3X6-KAITEN-DOUSABAN-2.GIF - 11,606BYTES

(図2、十進BASICによる3Dグラフィックス)

 

まずは、メインプログラムから説明します。 ルービックキューブを四つの方向から見

た図を同時に3D描画させる為の部分を追加しています。 各キューブを描画させる

前に、配列のデータを初期化するINITIALIZATIONという外部副プログラムを呼

び出しています。正六面体の各頂点座標値、パネルの中心点やコーナー点の座標

値はそこで初期化しています。また、回転動作の方向と場所は、回転動作を行う外

部副プログラム名の最初の3文字で指定してください。 Z軸の+方向から見て、 時

計方向の90度回転を三段目について行いたい場合は、”Z3C”と入力します。

 

PROGRAM-RUBIK-CUBE-3X3X6-KAITEN-DOUSABAN-1.GIF - 12,215BYTES

PROGRAM-RUBIK-CUBE-3X3X6-KAITEN-DOUSABAN-2.GIF - 7,562BYTES

PROGRAM-RUBIK-CUBE-3X3X6-KAITEN-DOUSABAN-3.GIF - 9,220BYTES

PROGRAM-RUBIK-CUBE-3X3X6-KAITEN-DOUSABAN-4.GIF - 13,940BYTES

PROGRAM-RUBIK-CUBE-3X3X6-KAITEN-DOUSABAN-5.GIF - 9,820BYTES

PROGRAM-RUBIK-CUBE-3X3X6-KAITEN-DOUSABAN-6.GIF - 8,659BYTES

PROGRAM-RUBIK-CUBE-3X3X6-KAITEN-DOUSABAN-7.GIF - 5,482BYTES

 

続いて外部副プログラムについて説明します。 以下の六つの外部副プログラムは

前ページのものと同じです。

 

PZROTATIONPXROTATIONPPROJECTION

SZROTATIONSXROTATIONSPROJECTION

 

次の二つについては、画面上で図形を移動そして縮小する為の引数を新たに三つ

追加しています。SXMSZMは移動に関する引数で、SSは縮小に関する引数で

す。SSの値がより大きければ、当然、拡大になります。

 

DRAWCUBE(STHETA,SPHI,XP(),ZP(),SXMSZMSS

 

PROGRAM-RUBIK-CUBE-3X3X6-KAITEN-DOUSABAN-8.GIF - 13,612BYTES

 

DRAWPANEL(STHETA,SPHI,XS(,),ZS(,),CP(),SXMSZM

SS

 

PROGRAM-RUBIK-CUBE-3X3X6-KAITEN-DOUSABAN-9.GIF - 10,880BYTES

PROGRAM-RUBIK-CUBE-3X3X6-KAITEN-DOUSABAN-10.GIF - 8,753BYTES

PROGRAM-RUBIK-CUBE-3X3X6-KAITEN-DOUSABAN-11.GIF - 4,098BYTES

 

そして、配列の初期化を行う外部副プログラムは、メインプログラム内にあったもの

を外部副プログラムへ移し替えただけです。

 

INITIALIZATION(XP(),YP(),ZP(),XC(),YC(),ZC(),XS(,),

YS(,),ZS(,))

 

PROGRAM-RUBIK-CUBE-3X3X6-KAITEN-DOUSABAN-12.GIF - 9,016BYTES

PROGRAM-RUBIK-CUBE-3X3X6-KAITEN-DOUSABAN-13.GIF - 7,783BYTES

PROGRAM-RUBIK-CUBE-3X3X6-KAITEN-DOUSABAN-14.GIF - 7,394BYTES

PROGRAM-RUBIK-CUBE-3X3X6-KAITEN-DOUSABAN-15.GIF - 6,104BYTES

PROGRAM-RUBIK-CUBE-3X3X6-KAITEN-DOUSABAN-16.GIF - 3,921BYTES

 

最後に、パネルの回転動作を行う外部副プログラムを示します。他の外部副プログ

ラムも同様に記述できます。 回転動作するパネルの色情報を単純に入れ替えてい

ます。

 

Z1CROTATION(CP())

 

PROGRAM-RUBIK-CUBE-3X3X6-KAITEN-DOUSABAN-17.GIF - 5,662BYTES

PROGRAM-RUBIK-CUBE-3X3X6-KAITEN-DOUSABAN-18.GIF - 3,864BYTES

 

Z1AROTATION(CP())

 

PROGRAM-RUBIK-CUBE-3X3X6-KAITEN-DOUSABAN-19.GIF - 5,692BYTES

PROGRAM-RUBIK-CUBE-3X3X6-KAITEN-DOUSABAN-20.GIF - 3,886BYTES

 

課題(その1)

 

パネルの回転動作に関するコマンドをファイルから複数個読み込んで、 パネルの3

D図を描画させるプログラムを作成してください。

 

課題(その2)

 

パネルの3D図からパネルの回転動作の手順を割り出すプログラムを作成してくだ

さい。例えば、Z2AX2AY2AZ3CX3CY3Cという順でパネルを回転

動作させると、 図3のようなパネル配置になります。 この手順を逆にトレースするこ

とは可能ですか。

 

RUBIK-CUBE-3X3X6-KAITEN-DOUSABAN-3.GIF - 11,756BYTES

(図3、十進BASICによる3Dグラフィックス)

 

 

 


 

Topへ