📄 transtri.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 + -