function h = cylindre(r,p1,p2) % function h = cylindre(r,p1,p2) % % dessine un cylindre de rayon r reliant les points p1 et p2 % % exemple : tube = cylindre(1.5,[1 2 3],[-2 5 7]); % % si pas d'argument, cylindre vertical de rayon 1 et longueur 1 if nargin == 0 r = 1; p1 = [0 0 0]; p2 = [0 0 1]; end % vecteur reliant p1 à p2 v = p2-p1; l = norm(v); % passage en coordonnées polaires (sphériques) l1 = norm(v(1:2)); % élévation et azimut (en degrés) el = atan2(v(3),l1)/2/pi*360; az = atan2(v(2),v(1))/2/pi*360; % dessin d'un cylindre de longueur l le long de l'axe x et issu de l'origine [t,x] = meshgrid(0:pi/20:2*pi,0:l/20:l); y = r*cos(t); z = r*sin(t); h = surfl(x,y,z); % on le lève rotate(h,[0 1 0],-el,[0 0 0]); % on le tourne rotate(h,[0 0 1],az,[0 0 0]); % on le déplace en p1 x = get(h,'XData'); y = get(h,'YData'); z = get(h,'ZData'); set(h,'XData',x+p1(1),'YData',y+p1(2),'ZData',z+p1(3));