Translate 3D coordinates on a known surface
Show older comments
Hi. I would like to know if there is a way to translate each 3D coordinate (blue dots) such that they lie on a known red surface.
Below is the code:
Nodes_XFix = load("Nodes_XFix.mat");
Nodes_XFix = Nodes_XFix.Nodes_XFix;
Faces_XFix = load("Faces_XFix.mat");
Faces_XFix = Faces_XFix.Faces_XFix;
coord_XMov = load("coord_XMov.mat");
coord_XMov = coord_XMov.coord_XMov;
figure
plot3(Nodes_XFix(:,1), Nodes_XFix(:,2), Nodes_XFix(:,3),'r.','Markersize',12)
hold on
trimesh(Faces_XFix(:,:),Nodes_XFix(:,1),Nodes_XFix(:,2),Nodes_XFix(:,3),'EdgeColor','r','Linewidth',1,'Facecolor','w')
plot3(coord_XMov(:,1), coord_XMov(:,2), coord_XMov(:,3),'b.','Markersize',12)
hold off
grid off
axis equal
xlabel('x')
ylabel('y')
zlabel('z')
view([15,50,30])
7 Comments
Image Analyst
on 14 Jan 2023
I know I've told you this before but, if you have any more questions, then attach your data and code to read it in with the paperclip icon after you read this:
We'll check back later for your attached data and screenshots of your plot(s).
Alberto Acri
on 14 Jan 2023
Edited: Alberto Acri
on 14 Jan 2023
What do you want to do with them?
LD1 = load(websave('','https://www.mathworks.com/matlabcentral/answers/uploaded_files/1263470/Nodes_XFix.mat'));
Nodes_XFix = LD1.Nodes_XFix;
LD2 = load(websave('','https://www.mathworks.com/matlabcentral/answers/uploaded_files/1263465/Faces_XFix.mat'));
Faces_XFix = LD2.Faces_XFix;
LD3 = load(websave('','https://www.mathworks.com/matlabcentral/answers/uploaded_files/1263475/coord_XMov.mat'));
coord_XMov = LD3.coord_XMov;
figure
scatter3(Nodes_XFix(:,1), Nodes_XFix(:,2), Nodes_XFix(:,3), 50, 'r.', 'MarkerFaceAlpha',0.5)
hold on
trimesh(Faces_XFix(:,:),Nodes_XFix(:,1),Nodes_XFix(:,2),Nodes_XFix(:,3),'EdgeColor','r','Linewidth',1,'Facecolor','w')
plot3(coord_XMov(:,1), coord_XMov(:,2), coord_XMov(:,3),'b.','Markersize',12)
hold off
grid off
axis equal
xlabel('x')
ylabel('y')
zlabel('z')
view([15,50,30])
.
Alberto Acri
on 14 Jan 2023
Matt J
on 14 Jan 2023
Hi. I would like to know if there is a way to translate each 3D coordinate (blue dots) such that they lie on a known red surface.
Do all the blue points have to translate as a single rigid body, or do they all translate independently of each other? If the latter, which point on the red surface should a blue point move to? The closest point?
Alberto Acri
on 15 Jan 2023
Matt J
on 15 Jan 2023
In future, please consolidate your variables into a single .mat file, as I have done here. This reduces the amount of work needed for us to download and import all your variables.
Accepted Answer
More Answers (1)
Matt J
on 15 Jan 2023
[~,I]=pdist2( Nodes_XFix, coord_XMov,'euc','Smallest',1)
coord_XMov = Nodes_XFix(I,:);
Categories
Find more on Surface and Mesh Plots in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

