www.pudn.com > distmesh.rar > dpoly.m, change:2006-02-13,size:781b


function d=dpoly(p,pv) 
 
%   Copyright (C) 2004-2006 Per-Olof Persson. See COPYRIGHT.TXT for details. 
 
np=size(p,1); 
nvs=size(pv,1)-1; 
 
ds=dsegment(p,pv); 
%ds=zeros(np,nvs); 
%for iv=1:nvs 
%  ds(:,iv)=donesegment(p,pv(iv:iv+1,:)); 
%end 
d=min(ds,[],2); 
 
d=(-1).^(inpolygon(p(:,1),p(:,2),pv(:,1),pv(:,2))).*d; 
 
% MEXED 
 
%function ds=donesegment(p,pv) 
% 
%e=ones(size(p,1),1); 
% 
%v=diff(pv,1); 
%w=p-e*pv(1,:); 
% 
%c1=sum(w.*v(e,:),2); 
%c2=sum(v(e,:).^2,2); 
% 
%ds=0*e; 
% 
%ix=c1=0; 
%ds(ix)=sqrt(sum((p(ix,:)-pv(1*ones(sum(ix),1),:)).^2,2)); 
% 
%ix=c1>=c2; 
%ds(ix)=sqrt(sum((p(ix,:)-pv(2*ones(sum(ix),1),:)).^2,2)); 
% 
%ix=c1>0 & c2>c1; 
%nix=sum(ix); 
%if nix>0 
%  Pb=ones(nix,1)*pv(1,:)+c1(ix)./c2(ix)*v; 
%  ds(ix)=sqrt(sum((p(ix,:)-Pb).^2,2)); 
%end