how to connect lines in a 3D plot ?
    6 views (last 30 days)
  
       Show older comments
    

So i need to plot my robot that consists of a base, platform, and 4 legs. When i use the plot3 function, only one point from the platform is connected to the corresponding point in the base. how can i connect all 4 points from the platform to the base. I basically found the lengths of legs (di(i)) where i =1-4 , and i found the euler angles, leg 1 and 4 have spherical joints ( theta and phi are available) and leg 2 and 3 are revolute (theta only is non-zero). Attached is the figure and you can see how it's only connected from one point to the base.
The code is the following
 for i=1:50
    t(i)=0.1*i;
    P=[0 0 20]';
    s=[ 0 0 1];
        R1 = [cos(i*0.0174532) 0  sin(i*0.0174532)];
        R2 = [0 1 0];
        R3 = [-sin(i*0.0174532) 0 cos(i*0.0174532)];
        R = [R1; R2; R3];
        B1 = [ 15 15 0 ]'; %sph 
        B2= [-15 15 0]'; %rev
        B3 = [-15 -15 0]'; %rev
        B4 = [15 -15 0]'; %sph
        A1 = [5,14,0]'; %sph
        A2 = [-30,30,0]'; %rev
        A3 = [-30,-30,0]'; %rev
        A4 = [5,-14,0]'; %sph
        b1 = P +(R*B1); %sph
        b2 = P +(R*B2); %rev
        b3 = P +(R*B3); %rev
        b4 = P +(R*B4); %sph
       %position%
x1(i)= dot((b1 - A1),(b1 - A1));
       d1(i)= sqrt(x1(i)); %sph
 x2(i)= dot((b2 - A2),(b2 - A2));
       d2(i)= sqrt(x2(i));  %rev
 x3(i)= dot((b3 - A3),(b3 - A3));
       d3(i)= sqrt(x3(i)); %rev
 x4(i)= dot((b4 - A4),(b4 - A4));
       d4(i)= sqrt(x4(i)); %sph
       %angles%
       s1 = (b1-A1)/d1(i);
       s2 = (b2-A2)/d2(i);
       s3 = (b3-A3)/d3(i);
       s4 = (b4-A4)/d4(i);
       th1(i)=acos(s1(3)); %sph
       th2(i)=acos(s2(3)); %rev
       th3(i)=acos(s3(3)); %rev
       th4(i)=acos(s4(3)); %sph
       ss1(i) =dot((b3-A3)/d3(i),[0 1 0]);
       ss2(i) =dot((b4-A4)/d4(i),[0 1 0]);
       phy1(i) = asin(s1(2)/sin(th1(i)));
       phy4(i) = asin(s4(2)/sin(th4(i)));
%animation% 
xplot = [5,-30,-30,5,5];
yplot = [14,30,-30,-14,14];
zplot= [ 0 0 0 0 0 ];
 x1plot= [d1(i)*sin(th1(i))*cos(phy1(i)) , d2(i)*sin(th2(i))*cos(0) , d3(i)*sin(th3(i))*cos(0) ,  d4(i)*sin(th4(i))*cos(phy4(i)) , d1(i)*sin(th1(i))*cos(phy1(i))];
 y1plot= [b1(2)+d1(i)*sin(th1(i))*sin(phy1(i)) , b2(2)+d2(i)*sin(th1(i))*sin(0) , b3(2)+d3(i)*sin(th1(i))*sin(0) , b4(2)+d4(i)*sin(th4(i))*sin(phy4(i)) , b1(2)+d1(i)*sin(th1(i))*sin(phy1(i))];
 z1plot = [d1(i)*cos(th1(i)) , d2(i)*cos(th2(i)) , d3(i)*cos(th3(i)) , d4(i)*cos(th4(i)) , d1(i)*cos(th1(i))];
%plot(x1plot,y1plot)
plot3([xplot,x1plot],[yplot,y1plot],[zplot,z1plot],'linewidth',2)
pause(0.003)
%%%%%%%%%%%%
end
0 Comments
Answers (1)
  Mike Garrity
    
 on 25 Mar 2016
        It's only drawing that connection because you didn't "lift the pen" between drawing the two platforms. You haven't told plot3 anything about the connections. You need to spell it out explicitly like this:
plot3([xplot, nan, ...
       x1plot, nan, ...
       xplot(1), x1plot(1), nan, ...
       xplot(2), x1plot(2), nan, ...
       xplot(3), x1plot(3), nan, ...
       xplot(4), x1plot(4)], ...
      [yplot, nan, ...
       y1plot, nan, ...
       yplot(1), y1plot(1), nan, ...
       yplot(2), y1plot(2), nan, ...
       yplot(3), y1plot(3), nan, ...
       yplot(4), y1plot(4)], ...        
      [zplot, nan, ...
       z1plot, nan, ...
       zplot(1), z1plot(1), nan, ...
       zplot(2), z1plot(2), nan, ...
       zplot(3), z1plot(3), nan, ...
       zplot(4), z1plot(4)], ...        
       'LineWidth',2)
Although I might go with something like this instead:
clf
h = patch(nan,nan,nan,'FaceColor','none','LineWidth',2);
view(3)
for i=1:50
  t(i)=0.1*i;
  P=[0 0 20]';
  s=[ 0 0 1];
  R1 = [cos(i*0.0174532) 0  sin(i*0.0174532)];
  R2 = [0 1 0];
  R3 = [-sin(i*0.0174532) 0 cos(i*0.0174532)];
  R = [R1; R2; R3];
  B1 = [ 15 15 0 ]'; %sph
  B2= [-15 15 0]'; %rev
  B3 = [-15 -15 0]'; %rev
  B4 = [15 -15 0]'; %sph
  A1 = [5,14,0]'; %sph
  A2 = [-30,30,0]'; %rev
  A3 = [-30,-30,0]'; %rev
  A4 = [5,-14,0]'; %sph
  b1 = P +(R*B1); %sph
  b2 = P +(R*B2); %rev
  b3 = P +(R*B3); %rev
  b4 = P +(R*B4); %sph
  %position%
  x1(i)= dot((b1 - A1),(b1 - A1));
  d1(i)= sqrt(x1(i)); %sph
  x2(i)= dot((b2 - A2),(b2 - A2));
  d2(i)= sqrt(x2(i));  %rev
  x3(i)= dot((b3 - A3),(b3 - A3));
  d3(i)= sqrt(x3(i)); %rev
  x4(i)= dot((b4 - A4),(b4 - A4));
  d4(i)= sqrt(x4(i)); %sph
  %angles%
  s1 = (b1-A1)/d1(i);
  s2 = (b2-A2)/d2(i);
  s3 = (b3-A3)/d3(i);
  s4 = (b4-A4)/d4(i);
  th1(i)=acos(s1(3)); %sph
  th2(i)=acos(s2(3)); %rev
  th3(i)=acos(s3(3)); %rev
  th4(i)=acos(s4(3)); %sph
  ss1(i) =dot((b3-A3)/d3(i),[0 1 0]);
  ss2(i) =dot((b4-A4)/d4(i),[0 1 0]);
  phy1(i) = asin(s1(2)/sin(th1(i)));
  phy4(i) = asin(s4(2)/sin(th4(i)));
  %animation%
  xplot = [5,-30,-30,5,5];
  yplot = [14,30,-30,-14,14];
  zplot= [ 0 0 0 0 0 ];
  x1plot= [d1(i)*sin(th1(i))*cos(phy1(i)) , ...
           d2(i)*sin(th2(i))*cos(0) , ...
           d3(i)*sin(th3(i))*cos(0) ,  ...
           d4(i)*sin(th4(i))*cos(phy4(i)) , ...
           d1(i)*sin(th1(i))*cos(phy1(i))];
  y1plot= [b1(2)+d1(i)*sin(th1(i))*sin(phy1(i)) , ...
           b2(2)+d2(i)*sin(th1(i))*sin(0) , ...
           b3(2)+d3(i)*sin(th1(i))*sin(0) , ...
           b4(2)+d4(i)*sin(th4(i))*sin(phy4(i)) , ...
           b1(2)+d1(i)*sin(th1(i))*sin(phy1(i))];
  z1plot = [d1(i)*cos(th1(i)) , d2(i)*cos(th2(i)) , ...
            d3(i)*cos(th3(i)) , d4(i)*cos(th4(i)) , ...
            d1(i)*cos(th1(i))];
  verts = [xplot, x1plot; yplot, y1plot; zplot, z1plot];
  faces = [1 2; 2 3; 3 4; 4 1; ...  % first platform
           5 6; 6 7; 7 8; 8 1; ...  % second platform
           1 5; 2 6; 3 7; 4 8];     % connections
  h.Vertices = verts';   % note transpose!
  h.Faces = faces;
    pause(0.003)
    %%%%%%%%%%%%
  end
0 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
