by R. Grothmann
In this notebook, you can design a rotation object with just a few mouse clicks.
First we define a function to read the mouse clicks in a loop.
>function getpoints ... setplot(-1,1,-1,1); clg; xplot(); title("Click into the half plane x>0"); v=zeros(0,2); repeat m=mouse(); if cols(m)==1 then break; endif; v=v_m; hold on; style("mx"); mark(m[1],m[2]); hold off; end; return v endfunction
Now you can try it. Click into right half plane x>0 with monotone decreasing y.
>v=getpoints()
0.590692 0.980257 0.207214 0.706317 0.123849 0.506781 0.133853 0.128 0.287244 -0.0512448 0.520666 -0.223725 0.594027 -0.389442 0.520666 -0.656618 0.490655 -0.842627 0.667388 -0.910266 0.930821 -0.930558
The following commands compute a natural spline, joining the points.
>v=v'; n=cols(v); x=1:n; ... s1=spline(x,v[1]); s2=spline(x,v[2]); ... t=linspace(1,n,600); ... y1=splineval(t,x,v[1],s1); y2=splineval(t,x,v[2],s2); ... hold on; plot(y1,y2); hold off:
Now generate a 3D object from these points.
>phi=linspace(0,2*pi,200)'; >X=cos(phi)*y1; Y=sin(phi)*y1; Z=y2;
And plot it.
>plot3d(X,Y,Z,hue=1,frame=0,height=30°, ... zoom=4,<scale,color=rgb(0.2,0,0),amb=0):