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

memoPicture001.jpg


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

memoPicture002.jpg



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

memoPicture003.jpg


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

memoPicture004.jpg

memoPicture005.jpg



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

memoPicture006.jpg