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

📄 transtri.m

📁 细胞生长结构可视化工具箱-MATLAB Toolbox1999.zip
💻 M
字号:
% Triangular transform by distance from edges
function ptn = transtri(pt,n1,n2,n3,v1,v2,v3)
%
%	pt = original point
%	n1 = node 1 in original space
%	v1 = node 1 in transformed space

d1=[0,0];

if n2(1)-n1(1) ~=0	% check for special case
	d1(2) = 1;
	d1(1) = -(n2(2)-n1(2))/(n2(1)-n1(1))*d1(2);
else
	d1(1) = 1;
	d1(2) = 0;
end
d1 = d1/norm(d1);	% Normalise vector

% Now find distance from pt to line
% use fact that the new point pt+kd1 can be tested by forming the vector beween n1
% and itself to see if it is normal to the n1->n2 normal vector.

k1 = -((pt(2)-n1(2))*d1(2)+(pt(1)-n1(1))*d1(1))/(d1(1)^2+d1(2)^2);


% Now repeat for second line
d2=[0,0];

if n3(1)-n1(1) ~=0	% check for special case
	d2(2) = 1;
	d2(1) = -(n3(2)-n1(2))/(n3(1)-n1(1))*d2(2);
else
	d2(1) = 1;
	d2(2) = 0;
end
d2 = d2/norm(d2);	% Normalise vector

% Now find distance from pt to line
% use fact that the new point pt+kd1 can be tested by forming the vector beween n1
% and itself to see if it is normal to the n1->n2 normal vector.

k2 = -((pt(2)-n1(2))*d2(2)+(pt(1)-n1(1))*d2(1))/(d2(1)^2+d2(2)^2);


% Now find distance from line 1 to 3rd point: n3
kp1 = -((n3(2)-n1(2))*d1(2)+(n3(1)-n1(1))*d1(1))/(d1(1)^2+d1(2)^2);
% Now find distance from line 2 to 3rd point n2
kp2 = -((n2(2)-n1(2))*d2(2)+(n2(1)-n1(1))*d2(1))/(d2(1)^2+d2(2)^2);

k1 = k1/kp1;	% Make distances relative
k2 = k2/kp2;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Now have distances. Reconstruct pt at these distances from transformed edges
%

% Find normal to first line, can reuse d1 and d2 

d1=[0,0];

if v2(1)-v1(1) ~=0	% check for special case
	d1(2) = 1;
	d1(1) = -(v2(2)-v1(2))/(v2(1)-v1(1))*d1(2);
else
	d1(1) = 1;
	d1(2) = 0;
end
d1 = d1/norm(d1);	% Normalise vector

% Now repeat for second line
d2=[0,0];

if v3(1)-v1(1) ~=0	% check for special case
	d2(2) = 1;
	d2(1) = -(v3(2)-v1(2))/(v3(1)-v1(1))*d2(2);
else
	d2(1) = 1;
	d2(2) = 0;
end
d2 = d2/norm(d2);	% Normalise vector

%%%% Now find distances to third point and make distances relative
% Now find distance from line 1 to 3rd point: n3
kp1 = -((v3(2)-v1(2))*d1(2)+(v3(1)-v1(1))*d1(1))/(d1(1)^2+d1(2)^2);
% Now find distance from line 2 to 3rd point n2
kp2 = -((v2(2)-v1(2))*d2(2)+(v2(1)-v1(1))*d2(1))/(d2(1)^2+d2(2)^2);

k1 = -k1*kp1;	% Make distances relative
k2 = -k2*kp2;



% Convert distances into vectors
k1 = k1*d1;
k2 = k2*d2;

l = - dot((k1-k2),d2)/dot((v2-v1),d2);


ptn = v1+k1+l*(v2-v1);

⌨️ 快捷键说明

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