% FITPLANE - solves coefficients of plane fitted to 3 or more points % % Usage: B = fitplane(XYZ) % % Where: XYZ - 3xNpts array of xyz coordinates to fit plane to. % If Npts is greater than 3 a least squares solution % is generated. % % Returns: B - 4x1 array of plane coefficients in the form % b(1)*X + b(2)*Y +b(3)*Z + b(4) = 0 % The magnitude of B is 1. % % See also: RANSACFITPLANE % Copyright (c) 2003-2005 Peter Kovesi % School of Computer Science & Software Engineering % The University of Western Australia % http://www.csse.uwa.edu.au/ % % Permission is hereby granted, free of charge, to any person obtaining a copy % of this software and associated documentation files (the "Software"), to deal % in the Software without restriction, subject to the following conditions: % % The above copyright notice and this permission notice shall be included in % all copies or substantial portions of the Software. % % The Software is provided "as is", without warranty of any kind. % June 2003 function B = fitplane(XYZ) [rows,npts] = size(XYZ); if rows ~=3 error('data is not 3D'); end if npts < 3 error('too few points to fit plane'); end % Set up constraint equations of the form AB = 0, % where B is a column vector of the plane coefficients % in the form b(1)*X + b(2)*Y +b(3)*Z + b(4) = 0. A = [XYZ' ones(npts,1)]; % Build constraint matrix if npts == 3 % Pad A with zeros A = [A; zeros(1,4)]; end [u d v] = svd(A); % Singular value decomposition. B = v(:,4); % Solution is last column of v.