OpenGL を使用した parametricPlot3D 関数の例
[2008/11/24] Nishimura Hiromi
(1)不連続な関数の作図
この関数が奇麗に作図できたことに感動!
x=|-1,1||-1,1|*5;
x=hokan(x,100,100);
y=x';
z=atan(y/x);
parametricPlot3D_GL(x/2,y/2,z,z);
sizeGLWindow(|500,400|);

(2)定番の3D画像
s = 50;
x = hokan(|-1,1||-1,1|*10,s,s);
y = x';
z = sin(sqrt(x^2+y^2))/sqrt(x^2+y^2);
setView3D(|300,300,40,30,10,0.7|);
parametricPlot3D_GL(x/10,y/10,z/2,z,|0,0|,"aaa");
sizeGLWindow(|500,400|);
setObjectSize("aaa",5);

(3)トーラス
s = 0.5;
m = 50*s; n = 30*s;
u=|0,2*π||0,2*π| ;u=hokan(u,m,n);
v=|0,2*π||0,2*π|';v=hokan(v,m,n);
x=(cos(u)+3)•cos(v);
y=(cos(u)+3)•sin(v);
z=sin(u);
parametricPlot3D_GL(x/5,y/5,z/5,x,|0,0|,"abc");
setObjectSize("abc",5);
sizeGLWindow("abc",|500,400|);

(4)三つ編
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));
parametricPlot3D_GL(xx,yy,zz,xx,"sample");
setObjectSize("sample",3);
sizeGLWindow("sample",|500,400|);


(5)電子軌道?
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);
b# = densityPlot(hokan(rand(40,40),512, 256));
parametricPlot3D_GLWithPict(y,x,z,z,b#);
sizeGLWindow(|500,400|*2);
setObjectSize(3);
