⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 polygon_centroid.m

📁 Matlab工具包补充算发
💻 M
字号:
function [x0,y0] = centroid(x,y)% CENTROID Center of mass of a polygon.%	[X0,Y0] = CENTROID(X,Y) Calculates centroid %	(center of mass) of planar polygon with vertices %	coordinates X, Y.%	Z0 = CENTROID(X+i*Y) returns Z0=X0+i*Y0 the same%	as CENTROID(X,Y).%  Copyright (c) 1995 by Kirill K. Pankratov,%       kirill@plume.mit.edu.%       06/01/95, 06/07/95% Algorithm:%  X0 = Int{x*ds}/Int{ds}, where ds - area element%  so that Int{ds} is total area of a polygon.%    Using Green's theorem the area integral can be %  reduced to a contour integral:%  Int{x*ds} = -Int{x^2*dy}, Int{ds} = Int{x*dy} along%  the perimeter of a polygon.%    For a polygon as a sequence of line segments%  this can be reduced exactly to a sum:%  Int{x^2*dy} = Sum{ (x_{i}^2+x_{i+1}^2+x_{i}*x_{i+1})*%  (y_{i+1}-y_{i})}/3;%  Int{x*dy} = Sum{(x_{i}+x_{i+1})(y_{i+1}-y_{i})}/2.%    Similarly%  Y0 = Int{y*ds}/Int{ds}, where%  Int{y*ds} = Int{y^2*dx} = %  = Sum{ (y_{i}^2+y_{i+1}^2+y_{i}*y_{i+1})*%  (x_{i+1}-x_{i})}/3. % Handle input ......................if nargin==0, help centroid, return, endif nargin==1  sz = size(x);  if sz(1)==2      % Matrix 2 by n    y = x(2,:); x = x(1,:);  elseif sz(2)==2  % Matrix n by 2    y = x(:,2); x = x(:,1);  else    y = imag(x);    x = real(x);  endend  % Make a polygon closed ..............x = [x(:); x(1)];y = [y(:); y(1)]; % Check length .......................l = length(x);if length(y)~=l  error(' Vectors x and y must have the same length')end % X-mean: Int{x^2*dy} ................del = y(2:l)-y(1:l-1);v = x(1:l-1).^2+x(2:l).^2+x(1:l-1).*x(2:l);x0 = v'*del; % Y-mean: Int{y^2*dx} ................del = x(2:l)-x(1:l-1);v = y(1:l-1).^2+y(2:l).^2+y(1:l-1).*y(2:l);y0 = v'*del; % Calculate area: Int{y*dx} ..........a = (y(1:l-1)+y(2:l))'*del;tol= 2*eps;if abs(a)<tol  disp(' Warning: area of polygon is close to 0')  a = a+sign(a)*tol+(~a)*tol;end % Multipliera = 1/3/a; % Divide by area .....................x0 = -x0*a;y0 =  y0*a;if nargout < 2, x0 = x0+i*y0; end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -