Draw triangle on 3d mesh

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

Can you share the code, so that add the code for "3 random points for trangle"?
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
Jerry on 18 Apr 2020
Edited: Jerry on 18 Apr 2020
Yes, the surface is curved. I don't have a code yet, just the surface and the coordinates of the three corner points of my triangle.
how do I find the linear segments, do you have any description or source on how I can do this?
please help
This is a copy of the original question in case it gets edited away like this one.
"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)."

Sign in to comment.

Answers (1)

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

how do I draw the shape afterwards?
Do you know what is this?
no, unfortunately I don't
darova
darova on 19 Apr 2020
Edited: darova 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')

Sign in to comment.

Asked:

on 18 Apr 2020

Commented:

on 21 Aug 2020

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!