%TRANSSURF   Transform Surf
% Function transforms X Y Z matrices defining a parametric surface 
% according to the homogeneous transformation T.
%
% Syntax:  [Xt,Yt,Zt] = transSurf(T,X,Y,Z)
%
% Inputs:
%    T - transformation
%    (X, Y, Z) - matrices defining a parametric surface
%
% Outputs:
%    (Xt, Yt, Zt) - matrices defining a parametric surface after
%                   transformation

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

function [Xt,Yt,Zt] = transSurf(T,X,Y,Z)

    [rows, cols]  = size(X);
    rc = rows*cols;
    
    X = reshape(X,1,rc);   % reshape X Y & Z to row vectors
    Y = reshape(Y,1,rc);
    Z = reshape(Z,1,rc);
    one = ones(1,rc);      % A long row vector of ones
    
    % Put vectors together to form positions in homogeneous coordinates.
    PTS = [ X
            Y
            Z
            one ];
                      
    PTS = T*PTS;
    
    % Extract the separate coordinates and reshape them back to their original shape.
    Xt = reshape(PTS(1,:),rows,cols);
    Yt = reshape(PTS(2,:),rows,cols);
    Zt = reshape(PTS(3,:),rows,cols);