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