■ rotater demo

2002/09/07 Nishimura Hiromi

 Craig Kloeden 氏が開発した Rotater 5.0b1 を利用し3Dフレーム画像を描画する関数。この関数を使うには Rotater 5.0b1 が必要です。下記 URL から Cocoa 版をダウンロードしインストールして下さい。

http://raru.adelaide.edu.au/rotater/


rotater 関数を使って作図した結果

 rotater 関数は引数から Craig Kloeden 氏の開発した Rotater アプリケーション用のデータファイルを作っているだけです。この作図用のデータは diary/mcData に保存されます。

 

● サンプルプログラム

 下記プログラムを全部実行すると上記画像のような3Dワイヤーフレームの画像が作れます。


m = 20; n = 20;
x = hokan(|  0,Pai||  0,Pai|*2,m,n);
y = hokan(|  0,  0||Pai,Pai|  ,m,n);
X = x・sin(x)・cos(y);
Y = x・cos(x)・cos(y);
Z = x・sin(y);
rotater(X,Y,Z,1,1);

x = |-1,-1||1,1|*π/2;
x = hokan(x,25,25);
y = x';
z = sin(3*x)?sin(y)/1.2;
rotater(x,y,z,1,1);

u = |0,2*π||0,2*π|*3;
u = hokan(u,30,50);
v = |0,2*π||0,2*π|+π;
v = hokan(v',30,50);
x = cos(u)・u・(1+cos(v)/2);
y = sin(v)・u/2;
z = sin(u)・u・(1+cos(v)/2);
rotater(x,y,z,6,1);

x = hokan(|-1,1||-1,1|*10,40,40);
y = x';
z = sin(sqrt(x^2+y^2))/sqrt(x^2+y^2)*10;
rotater(x,y,z,5,1);

u=|0,2*π||0,2*π| ;u=hokan(u,50,20);
v=|0,2*π||0,2*π|';v=hokan(v,50,20);
x=(cos(u)+3)?cos(v);
y=(cos(u)+3)?sin(v);
z=sin(u);
rotater(x,y,z,1,1);

t = hokan(|0,2*π||0,2*π|,10,50);
v = hokan(|-1,1||-1,1|',10,50);
a = 1.0;
b = 0.5;
r = a+b・v・cos(t/2);
x = r・cos(t);
y = r・sin(t);
z = b・v・sin(t/2);
rotater(x,y,z,1,1);

a=1.0;b=0.4;c=0.5;d=0.3;
t=|0,4*π||0,4*π| ;t=hokan(t,20,70);
u=|0,2*π||0,2*π|';u=hokan(u,20,70);
r=a+b*cos(1.5*t);
z=c*sin(1.5*t);
x=r?cos(t);
y=r?sin(t);
qqx=-((1+0.3*cos(1.5*t))?sin(t))-0.45*cos(t)?sin(1.5*t);
qqy=   cos(t)?(1+0.3*cos(1.5*t))-0.45*sin(t)?sin(1.5*t);
qqz= 0.75*cos(1.5*t);
norm= sqrt(qqx^2+qqy^2+qqz^2);
qx= qqx/norm;
qy= qqy/norm;
qz= qqz/norm;
normv= sqrt(qx^2+qy^2);
vx= qy/normv;
vy=-qx/normv;
wx=-qz?vy;
wy= qz?vx;
wz= qx?vy-vx?qy;
xx= x+d*(vx?cos(u)+wx?sin(u));
yy= y+d*(vy?cos(u)+wy?sin(u));
zz= z+d*(wz?sin(u));
rotater(xx,yy,zz,1,1);

u = |-1.3,1.3||-1.3,1.3|;
v = |0,2*π||0,2*π|';
u = hokan(u,30,20);
v = hokan(v,30,20);
x = cos(v)^3・cos(u)^3;
y = sin(v)^3・cos(u)^3;
z = sin(u)^3;
rotater(x,y,z,1,1);

u = |0,2*π||0,2*π|;
u = hokan(u,20,40);
v = hokan(u',20,40);
x = cos(u)・u・(1+cos(v)/2);
y = sin(v)・u/2;
z = sin(u)・u・(1+cos(v)/2);
rotater(x,y,z,1,1);

m = 30; n = 60;
t = |0,π||0,π|;
t = hokan(t,m,n);
u = |0,2*Pai||0,2*π|';
u = hokan(u,m,n);
r = 3・cos(t)^2-1;
x = r・cos(t);
y = r・sin(t)・sin(u);
z = r・sin(t)・cos(u);
rotater(x,y,z,1,1);
rotater(x,y,z,1,0);

t=|-π,π||-π,π|;
t=hokan(t,30,30);
u=|0,2*π||0,2*π|';
u=hokan(u,30,30);
x=t;
y=sin(u);
z=cos(u);
rotater(x,y,z,1,1);
rotater(x,y,z,1,0);