adjustpoly.m

来自「麻省理工学院的人工智能工具箱,很珍贵,希望对大家有用!」· M 代码 · 共 60 行

M
60
字号
function [x1,y1,x2,y2] = adjustpoly(x1,y1,x2,y2)
%ADJUSTPOLY  Adjusts polygon data.
%   [X1,Y1,X2,Y2] = ADJUSTPOLY(X1,Y1,X2,Y2) adjusts the polygon data so
%   that the first point of polygon 1 is not located on the border of
%   polygon 2.

%  Written by:  A. Kim
%  Copyright 1996-2002 Systems Planning and Analysis, Inc. and The MathWorks, Inc.
%  $Revision: 1.4 $ $Date: 2002/03/20 21:26:40 $

err = eps*1e4;

% check individual points on polygon 1
p1in = inpolygonerr(x1(1:end-1),y1(1:end-1),x2,y2,err);

% if first point of polygon 1 is on the border, then shift data such that
% the first point is located inside or outside of polygon 2 (not border)
% if all points are located on border, then create an intermediate point
if p1in(1)==0.5
	indx = find(p1in~=0.5);
	if ~isempty(indx)
		x1 = [x1(indx(1):end); x1(2:indx(1))];
		y1 = [y1(indx(1):end); y1(2:indx(1))];
	else
		n = 1;
		xc = x1(1);  yc = y1(1);
		while inpolygonerr(xc,yc,x2,y2,err)==0.5
			xc = x1(n) + (x1(n+1)-x1(n))/2;
			yc = y1(n) + (y1(n+1)-y1(n))/2;
			n = n + 1;
		end
		x1 = [xc; x1(n:end-1); x1(1:n-1); xc];
		y1 = [yc; y1(n:end-1); y1(1:n-1); yc];
	end
end

% check individual points on polygon 2
p2in = inpolygonerr(x2(1:end-1),y2(1:end-1),x1,y1,err);

% if first point of polygon 2 is on the border, then shift data such that
% the first point is located inside or outside of polygon 1 (not border)
% if all points are located on border, then create an intermediate point
if p2in(1)==0.5
	indx = find(p2in~=0.5);
	if ~isempty(indx)
		x2 = [x2(indx(1):end); x2(2:indx(1))];
		y2 = [y2(indx(1):end); y2(2:indx(1))];
	else
		n = 1;
		xc = x2(1);  yc = y2(1);
		while inpolygonerr(xc,yc,x1,y1,err)==0.5
			xc = x2(n) + (x2(n+1)-x2(n))/2;
			yc = y2(n) + (y2(n+1)-y2(n))/2;
			n = n + 1;
		end
		x2 = [xc; x2(n:end-1); x2(1:n-1); xc];
		y2 = [yc; y2(n:end-1); y2(1:n-1); yc];
	end
end

⌨️ 快捷键说明

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