snake cube:プロペラ






こどものころ、スネークキューブというジョイントでねじるように 回転させて 形をつくるオモチャをもっていました。
結構、有名だから ご存じの方も多いですよね。
知らない人は 若い世代か?

うえの形は 中学生の頃に 考え付いた形で、
当時、大変気に入って よく作った形です。
プロペラとかスクリューとか呼んでいました。
今でも、店頭でこのオモチャが見本として 遊べるようになっていると、
かならずこの形を作ってしまいます。

そういえば、小学生の頃 このオモチャで初めて、
この世は3次元だから たて、よこ、たかさの軸が 対称に現れると綺麗な形になるんだ!
と気づいたような気がします。


今回、pov-rayというレイトレーシングソフトで 3DCGにしてみました。

今回 つくったPOVファイルは ファイルの最初の部分で、
端のユニットの位置と方向、
その後のジョイントのねじり方向
を指定してやることで いろんな形が作れるようになっています。

povファイルはこちら

以下に 使い方(?)の解説を書きますので、
povrayをインストールしている方は お試しあれ。

まず、そのままレンダリングすると つぎのような出力になります。



一方 povファイルの先頭をみてみますと、


#declare N=24; //number of units

#declare r=0.04; // roundishness of units
#declare pos=<-3,-3,0>; // the position of the initial end unit
#declare in=<0,0,1>; // getting in vector at initial end surface
#declare out=<0,1,0>; // getting out vector from initial end unit to the next unit

#declare ro=array[24] { //how to twist at each joint 1:cockwise 2:180 degree 3:anti clockwise
//leave the first element 0

0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0

/* propeller
0,1,1,2,3,1,0,3,
1,1,1,2,3,1,0,3,
1,1,1,2,3,1,0,3
*/

};

#declare colA=<0,0,1>; // one color of alternative colors of units.
#declare colB=<1,1,1>; // the other color of alternative colors of units.
となっています。以下 各変数を説明しましょう。
N ユニットの数です。製品版のスネークキューブは24でした。
r ユニットの角の丸みの半径です。小さめの正の値を指定してください。
大きくすると ユニットの角の丸みがおおきくなります。
pos 端のユニットの位置です。つぎの図の赤い玉の座標になります。
in 端のユニットの向きを指定するベクトルです。
次の図の緑のベクトルです。
(プログラム内で 勝手に正規化するので 長さはどうでもいいです。)
out 端のユニットの向きを指定するベクトルです。
次の図の黄色のベクトルです。
(プログラム内で 勝手に正規化するので 長さはどうでもいいです。
また、勝手に直交化しますので、上の「inベクトル」と
完全に直交してなくても 大丈夫です。)
ro スネークキューブの各ジョイントのひねる方向を指定する配列です。
最初の要素は0にしておいてください。
その他の23個の要素は 端のユニットから 順に23個のジョイントの
ひねる方向を指定するもので、
1:右ネジひねり、2:180度ひねり、3:左ネジひねり、になります。
(実は 整数でなくても大丈夫です。)
colA、colB ユニットの色です。2色で交互にぬるので2色指定してください。



問題は無いと思いますが、ご使用は各自の責任でどうぞ。

もどる。