How to convert local coordinate to Global Coordinate of a 3d plane?
조회 수: 2 (최근 30일)
이전 댓글 표시
Hi,
I have a 3d plane with equation: z+0.898x-0.443y=452, I got this equation by plane fit. This plane is inclined at a crazy angle and I want to make one of the point to origin and then make it flat and coincide it one of the axis (mostly x or y). My approach for doing this is first to translate one of the corner point to origin (which is working well I think) and then rotate plane about x-axis to make it parallel to xy-plane. and then give it one more rotation depending on situation.
For rotation, I find direction cosines of the plane and then rotate it by applying rotation matrix about x-axis. But its not working well. Could any one suggest what I am doing wrong or is there any better approach to do this. Figures of my original plane, translated plane and rotated plane about x and y axis are attached. My code is given below:
arr = step_mask('Sigle_Step_Aug23-2017.xlsx','Sheet1', 'A:C');
x=arr(:,1); y=arr(:,2); z=arr(:,3);
% plane fitting
[xnum,ynum]=size(arr);
B = [arr(:,1:2), ones(xnum,1)] \ arr(:,3);
a=B(1);
b=B(2);
d=B(3);
Z=a*x+b*y+d;
[row,col]=size(Z);
c=1;
dist=sqrt(a^2+b^2+c^2);
% calculation of direction cosines
l=-a/dist; %cx
m=-b/dist; %cy
n=c/dist;% cz
% calculation of angle
alfa=acosd(l); % w.r.t x-axis
beta=acosd(m); %w.r.t. y-axis
gamma=acosd(n); %w.r.t. z-axis
A=zeros(row,3);
A(:,1)=x;
A(:,2)=y;
A(:,3)=Z;
% Translation Matrix
A_trans=zeros(4,row);
tx=12.87606300000000025818280846579; ty=28.084973999999998994780980865471; tz=-450.70078850208750509409583173692;
T=[1 0 0 tx; 0 1 0 ty; 0 0 1 tz; 0 0 0 1];
R1=[1 0 0 0; 0 cos_alfa -sin_alfa 0; 0 sin_alfa cos_alfa 0; 0 0 0 1];
%rotation about x-axis
R1=[1 0 0 0; 0 cosd(-alfa) -sind(-alfa) 0; 0 sind(-alfa) cosd(-alfa) 0; 0 0 0 1];
% rotation about y-axis
R2=[cosd(beta) 0 sind(beta) 0; 0 1 0 0; -sind(beta) 0 cosd(beta) 0; 0 0 0 1];
for i=1:row
%A_trans(:,i)=T*R1*[A(i,1);A(i,2);A(i,3);1];
A_trans(:,i)=T*R1*R2*[A(i,1);A(i,2);A(i,3);1];
end
figure;
plot3(A_trans(1,:),A_trans(2,:),A_trans(3,:),'.b'); grid on;
xlabel('x-axis'); ylabel('y-axis'); zlabel('z-axis');
set(gca, 'FontName', 'Arial');
set(gca, 'FontSize', 12);
title('Translated Plot', 'fontsize', 20);
댓글 수: 0
답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Surface and Mesh Plots에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!