Fit ellipse in 3D space
50 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
I have xy coordinates of the ellipse in 2D space and its coordinate center (0.1427, -0.4418).
I would like to fit this ellipse xy coordinates in to the 3D space to replace the one which is not correct/perfect. The coordinate center in 3D space should be (0.1427, -0.4418, -0.0564) and the plane is defined in attachment.
How can I calculate the missing z axis data to draw the ellipse in 3D space on the desired plane?
2 Commenti
Risposta accettata
Matt J
il 28 Set 2022
Modificato: Matt J
il 28 Set 2022
Another possibility is to use this FEX download,
to fit the 3D data directly.
load('xyz');
xyz=xyz';
fobj=planarFit(xyz); %Fit a plane to xyz data
R=fobj.R(:,[2,3,1])';
Rxyz=R*xyz; %Rotate xyz coordinates to be parallel to xy plane
z0=mean(Rxyz(3,:),2);
fobj=ellipticalFit(Rxyz(1:2,:)); %ellipse fit to the rotated data (ignoring z-coordinate)
Rxyz=cell2mat(fobj.sample(0:2:360)); %Generate 'evenly' spaced samples around the ellipse
Rxyz(3,:)=z0; %re-insert z-coordinate
xyzFit=R'*Rxyz; %rotate back to 3D
%Visualize
scatter3(xyz(1,:),xyz(2,:),xyz(3,:),'filled'); hold on
scatter3(xyzFit(1,:),xyzFit(2,:),xyzFit(3,:)); hold off
xlabel X; ylabel Y; zlabel Z
legend('Original','Fit')
view(50,30)
2 Commenti
VIGNESH BALAJI
il 20 Lug 2023
@Matt J the tool you mentioned looks great. Is there any tool to fit 3D data of a catenary (looks like a parabola but a hyperbolic cosine function) directly. please let me know.
Più risposte (1)
Matt J
il 27 Set 2022
Modificato: Matt J
il 27 Set 2022
I am searching for intersection of plane and ellipsoid
If that is the ultimate goal, you should just rewrite the ellipsoid equation in a rotated coordinate system where the intersection plane is the xy plane. That will result in a 2D equation for the intersection ellipse directly.
The appropriate basis vectors xaxis, yaxis, and zaxis can be obtained as,
zaxis=[A,B,C]';
xy=null(zaxis');
xaxis=xy(:,1);
yaxis=cross(zaxis,xaxis);
and the 4x4 coordinate transform matrix needed to apply and invert the transformation is,
T=eye(4);
T(1:3,1:3)=[xaxis,yaxis,zaxis]';
T=T*makehgtform('translate',-[0.1427, -0.4418, -0.0564]);
2 Commenti
Matt J
il 27 Set 2022
An alternative approach is to use the transform T that I derived above to map the 3D points that the surface intersection code gave you to 2D. In 2D, you can perform the ellipse fit and generate as many points on the ellipse as you wish. Then you can map back to 3D with inv(T).
Vedere anche
Categorie
Scopri di più su Spline Postprocessing in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!