%CLOSEDCYLINDER  Closed Cylinder
% Generates a cylinder bewteen pt1 and pt2
%
% Syntax:  [X, Y, Z] = closedCylinder(pt1, pt2, radius)
%
% Inputs:
%    pt1 - start point of cylinder
%    pt2 - end point of cylinder
%    radius - cylinder radius
%
% Outputs:
%    [X, Y, Z] - matrices defining a parametric surface
%
% Other m-files required: transSurf.m, trans.m, roty.m, rotz.m
%
% See also: TRANSSURF

% Author: Travis Hydzik
% Last revision: 19 October 2004

function [X, Y, Z] = closedCylinder(pt1, pt2, radius)

    v = pt2 - pt1;
    
	[theta,phi,R] = cart2sph(v(1), v(2), v(3));
    
	radius = [0 radius radius 0];  
	
	[X,Y,Z] = cylinder(radius, 20); 
	
	% first and last rows respectively to give squared ends
	rows = size(Z,1);
	Z(2,:) = Z(1,:);                    
	Z(rows-1,:) = Z(rows,:);
	
	Z = Z * R;    % scale to length
	
	T = trans(pt1(1), pt1(2), pt1(3))*rotz(theta)*roty(pi/2 - phi);
	[X, Y, Z] = transSurf(T,X,Y,Z);