findtri.m

来自「细胞生长结构可视化工具箱-MATLAB Toolbox1999.zip」· M 代码 · 共 58 行

M
58
字号
function triangle = findtri(pt,wvis,C)
%
% 	triangle = findtri(pt,w,C)
%
%	Find triangle enclosing pt
%	v1,v2,v3 = nodes forming the triangle
%	pt = point of interest
%	w = matrix of node locations
%	C = matrix of links
%

NoTries = 3;

multitry = 0;

triangle = [];
dis=[];

large = 9999999999999;

% Compute distances to nodes from pt
dis=zeros(size(wvis,1),1);
for i=1:size(wvis,1)
	dis(i) = norm(pt-wvis(i,:));
end

if multitry == 1
	% examine nodes int turn starting with closest
	tries = 0;
else
	tries = size(dis,1)-NoTries;	% only try two triangles. Need 2 since closest node is sometimes in adjacent traingle
end
while isempty(triangle)&(tries<size(dis,1))
	[minval,s] = min(dis);

	for k=1:size(C,1)-1	% -1 since we must find 2 links to form a triangle!
		if (C(k,s)==1)	% found a link
			for l = k+1:size(C,1)	% look for third node frominf triangle
				if (C(k,l)==1 & C(s,l)==1) % have found third node
					if intriang(pt,wvis(s,:),wvis(k,:),wvis(l,:))
						triangle = [s,k,l];
						%disp('Found triangle');
						break;
					end
				end
			end
			if ~isempty(triangle)
				break;
			end	
		end
	end
	tries = tries+1;	% increment no of nodes triedd counter
	dis(s) = large;	% exclude current winner from next iteration
end
	
if isempty(triangle)
%	disp('Did not find a triangle!');
end

⌨️ 快捷键说明

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