#stewart.maple # # with(plots): # Cyl:=proc(A,B,R,T,Th) local u,v,w,l1,l2,x,y,z,X,Y,Z: u:=B[1]-A[1]: v:=B[2]-A[2]: w:=B[3]-A[3]: l1:=sqrt(u^2+v^2): l2:=sqrt(u^2*w^2+v^2*w^2+(u^2+v^2)^2): x:=v/l1: y:=-u/l1: z:=0: X:=u*w/l2: Y:=v*w/l2: Z:=(-u^2-v^2)/l2: [ R*cos(Th)*x+R*sin(Th)*X+T*u+A[1], R*cos(Th)*y+R*sin(Th)*Y+T*v+A[2], R*cos(Th)*0+R*sin(Th)*Z+T*w+A[3]] end: RAD:=.35: # Radius of the platform balls rad:=.3: # Radius of the fixed balls r:=.17: # The framework sr:=.1: # The Actuators C:=[3,7/2,9/2]: C:=[2.6,5.8,3.9]: # The fixed points FP:=[[-1,4.5,0],[4.8,1.8,0], [6,3,0], [9/2,-9/10,0], [0,0,0],[-3/2,1/2,2]]: # The platform points #SP:=[[2,7,5.5], [4,7,4.5], [4,8,2.5], [5,3,3.5], [1,4,3.5], [1,6,5.5]]: SP:=[[2,7,5.5], [3.5,7.5,4.5], [3,8,2.5], [4.5,3,3.5], [1,4.5,3.5], [1.2,5.5,5.5]]: # tan blue pink green magenta yellow macro(pf=COLOR(RGB, .4, .8, 1)): macro(rc=COLOR(RGB, 1, 1, .6)): macro(tt=COLOR(RGB, 1, .4, .6)): Cyl1:=plot3d(Cyl(C,SP[1],r,t,th),t=0..1,th=-Pi..Pi,style=PATCHNOGRID,grid=[2,50],color=pf): Cyl2:=plot3d(Cyl(C,SP[2],r,t,th),t=0..1,th=-Pi..Pi,style=PATCHNOGRID,grid=[2,50],color=pf): Cyl3:=plot3d(Cyl(C,SP[3],r,t,th),t=0..1,th=-Pi..Pi,style=PATCHNOGRID,grid=[2,50],color=pf): Cyl4:=plot3d(Cyl(C,SP[4],r,t,th),t=0..1,th=-Pi..Pi,style=PATCHNOGRID,grid=[2,50],color=pf): Cyl5:=plot3d(Cyl(C,SP[5],r,t,th),t=0..1,th=-Pi..Pi,style=PATCHNOGRID,grid=[2,50],color=pf): Cyl6:=plot3d(Cyl(C,SP[6],r,t,th),t=0..1,th=-Pi..Pi,style=PATCHNOGRID,grid=[2,50],color=pf): rod1:=plot3d(Cyl(FP[1],SP[1],sr,t,th),t=0..1,th=-Pi..Pi,style=PATCHNOGRID,grid=[2,50],color=rc): rod2:=plot3d(Cyl(FP[2],SP[2],sr,t,th),t=0..1,th=-Pi..Pi,style=PATCHNOGRID,grid=[2,50],color=rc): rod3:=plot3d(Cyl(FP[3],SP[3],sr,t,th),t=0..1,th=-Pi..Pi,style=PATCHNOGRID,grid=[2,50],color=rc): rod4:=plot3d(Cyl(FP[4],SP[4],sr,t,th),t=0..1,th=-Pi..Pi,style=PATCHNOGRID,grid=[2,50],color=rc): rod5:=plot3d(Cyl(FP[5],SP[5],sr,t,th),t=0..1,th=-Pi..Pi,style=PATCHNOGRID,grid=[2,50],color=rc): rod6:=plot3d(Cyl(FP[6],SP[6],sr,t,th),t=0..1,th=-Pi..Pi,style=PATCHNOGRID,grid=[2,50],color=rc): # # ## tan blue pink green magenta yellow Ball1:=plot3d([FP[1][1]+rad*sin(ph)*cos(th),FP[1][2]+rad*sin(ph)*sin(th), FP[1][3]+rad*cos(ph)],ph=0..Pi,th=-Pi..Pi, grid=[30,30],style=PATCHNOGRID,color=pink): Ball2:=plot3d([FP[2][1]+rad*sin(ph)*cos(th),FP[2][2]+rad*sin(ph)*sin(th), FP[2][3]+rad*cos(ph)],ph=0..Pi,th=-Pi..Pi, grid=[30,30],style=PATCHNOGRID,color=pink): Ball3:=plot3d([FP[3][1]+rad*sin(ph)*cos(th),FP[3][2]+rad*sin(ph)*sin(th), FP[3][3]+rad*cos(ph)],ph=0..Pi,th=-Pi..Pi, grid=[30,30],style=PATCHNOGRID,color=pink): Ball4:=plot3d([FP[4][1]+rad*sin(ph)*cos(th),FP[4][2]+rad*sin(ph)*sin(th), FP[4][3]+rad*cos(ph)],ph=0..Pi,th=-Pi..Pi, grid=[30,30],style=PATCHNOGRID,color=pink): Ball5:=plot3d([FP[5][1]+rad*sin(ph)*cos(th),FP[5][2]+rad*sin(ph)*sin(th), FP[5][3]+rad*cos(ph)],ph=0..Pi,th=-Pi..Pi, grid=[30,30],style=PATCHNOGRID,color=pink): Ball6:=plot3d([FP[6][1]+rad*sin(ph)*cos(th),FP[6][2]+rad*sin(ph)*sin(th), FP[6][3]+rad*cos(ph)],ph=0..Pi,th=-Pi..Pi, grid=[30,30],style=PATCHNOGRID,color=pink): Cone1:=plot3d([FP[1][1]+2*t/5*cos(th),FP[1][2]+2*t/5*sin(th),FP[1][3]-t], t=0..4/5,th=-Pi..Pi,grid=[2,40],style=PATCHNOGRID,color=tt): Cone2:=plot3d([FP[2][1]+2*t/5*cos(th),FP[2][2]+2*t/5*sin(th),FP[2][3]-t], t=0..4/5,th=-Pi..Pi,grid=[2,40],style=PATCHNOGRID,color=tt): Cone3:=plot3d([FP[3][1]+2*t/5*cos(th),FP[3][2]+2*t/5*sin(th),FP[3][3]-t], t=0..4/5,th=-Pi..Pi,grid=[2,40],style=PATCHNOGRID,color=tt): Cone4:=plot3d([FP[4][1]+2*t/5*cos(th),FP[4][2]+2*t/5*sin(th),FP[4][3]-t], t=0..4/5,th=-Pi..Pi,grid=[2,40],style=PATCHNOGRID,color=tt): Cone5:=plot3d([FP[5][1]+2*t/5*cos(th),FP[5][2]+2*t/5*sin(th),FP[5][3]-t], t=0..4/5,th=-Pi..Pi,grid=[2,40],style=PATCHNOGRID,color=tt): Cone6:=plot3d([FP[6][1]+2*t/5*cos(th),FP[6][2]+2*t/5*sin(th),FP[6][3]-t], t=0..4/5,th=-Pi..Pi,grid=[2,40],style=PATCHNOGRID,color=tt): ## tan blue pink green magenta yellow ball1:=plot3d([SP[1][1]+RAD*sin(ph)*cos(th),SP[1][2]+RAD*sin(ph)*sin(th), SP[1][3]+RAD*cos(ph)], ph=0..Pi,th=-Pi..Pi,grid=[70,50],style=PATCHNOGRID,color=pf): ball2:=plot3d([SP[2][1]+RAD*sin(ph)*cos(th),SP[2][2]+RAD*sin(ph)*sin(th), SP[2][3]+RAD*cos(ph)], ph=0..Pi,th=-Pi..Pi,grid=[70,50],style=PATCHNOGRID,color=pf): ball3:=plot3d([SP[3][1]+RAD*sin(ph)*cos(th),SP[3][2]+RAD*sin(ph)*sin(th), SP[3][3]+RAD*cos(ph)], ph=0..Pi,th=-Pi..Pi,grid=[70,50],style=PATCHNOGRID,color=pf): ball4:=plot3d([SP[4][1]+RAD*sin(ph)*cos(th),SP[4][2]+RAD*sin(ph)*sin(th), SP[4][3]+RAD*cos(ph)], ph=0..Pi,th=-Pi..Pi,grid=[70,50],style=PATCHNOGRID,color=pf): ball5:=plot3d([SP[5][1]+RAD*sin(ph)*cos(th),SP[5][2]+RAD*sin(ph)*sin(th), SP[5][3]+RAD*cos(ph)], ph=0..Pi,th=-Pi..Pi,grid=[70,50],style=PATCHNOGRID,color=pf): ball6:=plot3d([SP[6][1]+RAD*sin(ph)*cos(th),SP[6][2]+RAD*sin(ph)*sin(th), SP[6][3]+RAD*cos(ph)], ph=0..Pi,th=-Pi..Pi,grid=[70,50],style=PATCHNOGRID,color=pf): Xa:=spacecurve([5*t,-t,0],t=0..7/5,color=black,thickness=3): XC:=plot3d([7-t,t/5*cos(th)-7/5+t/5,t/5*sin(th)], t=0..1/2,th=-Pi..Pi,style=PATCHNOGRID,color=black): Ya:=spacecurve([t,5*t,0],t=0..13/10,color=black,thickness=3): YC:=plot3d([13/10-t/5+t/5*cos(th),13/2-t,t/5*sin(th)], t=0..1/2,th=-Pi..Pi,style=PATCHNOGRID,color=black): Za:=spacecurve([0,0,t],t=0..6,color=black,thickness=3): ZC:=plot3d([t/5*cos(th),t/5*sin(th),6-t], t=0..1/2,th=-Pi..Pi,style=PATCHNOGRID,color=black): plotsetup(x11,plotoptions=`width=3in,height=2.5in`): plotsetup(ps,plotoutput=`stewart.eps`, plotoptions=`color,portrait,width=9in,height=7in,noborder`); display3d(Cone1,Cone2,Cone3,Cone4,Cone5,Cone6, Ball1,Ball2,Ball3,Ball4,Ball5,Ball6, ball1,ball2,ball3,ball4,ball5,ball6, Cyl1,Cyl2,Cyl3,Cyl4,Cyl5,Cyl6, rod1, rod2, rod3, rod4, rod5, rod6, Xa,Ya,Za,XC,YC,ZC, view=[-2..7,-2..9,-2..6],orientation=[-45,70],light=[50,5,1,1,1]);