Draw triangle on 3d mesh
Show older comments
Hi, I have an irregualar 3d surface plot build just with faces and vertices. Now I want to select 3 random points from the plot and automatically draw a triangle with these corner points on top of the surface (so that the triangle nestles on the given 3D surface).
5 Comments
KALYAN ACHARJYA
on 18 Apr 2020
Can you share the code, so that add the code for "3 random points for trangle"?
John D'Errico
on 18 Apr 2020
Is the surface a curved one? If so, then essentially 50% of the time (depending on the local shape of the surface), that triangle will not be visible, as it will be sunk below, under the hidden side of the surface.
If you wish to draw some triangle that will ALWAYS be visible, then you will need to make the surface translucent. This is not that difficult to do in MATLAB, use the 'FaceAlpha' property of the resulting surface. Set it to some value less than 1.
If you wish to draw a triangle with curved edges that exactly follow the contour of any curved (but triangularly faceted) surface, then drawing lines along the surface? You would then need to compute that set of three segmented lines through the surface, along the curved "edges" of the triangle. It can be done of course, but for that, you would need to write explicit code to exactly find those linear segments, thus where the path crosses the edge of each triangle in the surface. It is doable, since I've done it at least twice before.
Jerry
on 19 Apr 2020
Steven Lord
on 21 Aug 2020
"Hi, I have an irregualar 3d surface plot build just with faces and vertices. Now I want to select 3 random points from the plot and automatically draw a triangle with these corner points on top of the surface (so that the triangle nestles on the given 3D surface)."
Answers (1)
darova
on 19 Apr 2020
What about this?
function main
opengl software
h = surf(sphere(20));
axis vis3d
set([h gcf],'hittest','off') % не знаю почему
set(gca,'buttondownfcn',@func) % клацать только на 'axes'
function func(hobj,hev)
p = get(hobj,'currentpoint');
p
line(p(:,1),p(:,2),p(:,3),'marker','o')
4 Comments
Jerry
on 19 Apr 2020
darova
on 19 Apr 2020
Do you know what is this?

Jerry
on 19 Apr 2020
I want to explain you how does it work: you can't choose points you want directly. But you can pick some point and then calculate distances from this point to every existing points on plot. Having smallest distance using min you can choose closest point
Here is a simple script
x = rand(20,1);
y = rand(20,1);
plot(x,y,'.b')
p = ginput(1);
[~,ix] = min(pdist2(p,[x y]));
line(x(ix),y(ix),'marker','o')

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!