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);