How to efficiently compute normal to a surface given surface points

35 views (last 30 days)
Hi everyone,
I am struggling to understand how to compute normal to a surface on ML.
I have a very simple geometry made by a cone divided both in height and along the circumference, and what I would like as outputs for every area in which the cone is divided are:
  • The centroid of every single area;
  • The normal to the area centered on the centroid.
The output I would like is formed by a matrix for the centroids and a matrix for the normals in which each row is formed by a triplet X, Y, Z of the coordinates and values of the centroids and normals respectively.
I attach part of the code for generating a simple cone.
n = 36; % Number of divisions along the circumference
hi = 1; % Number of divisions along the height of the cone (needed for another part of the code)
H = 5; % Height of the cone
r = zeros (1,H/hi);
R = 3; % Base radius
for i = 1:H/hi
r(i) = (1-i*hi/H)*R;
end
[x,y,z] = cylinder(r,n);
z = z*H;

Accepted Answer

darova
darova on 8 Mar 2021
  2 Comments
alegio20
alegio20 on 8 Mar 2021
Edited: alegio20 on 8 Mar 2021
Thanks, i have alredy tried surfnorm but it doesn't calculates where I need to and just calculates it at intesections between areas. Not in the centers.
darova
darova on 8 Mar 2021
You can calculate vector field (u,v,w) and interpolate it where you need
[u,v,w] = surfnorm(x,y,z);
u1 = interp2(x,y,u,x1,y1);
v1 = interp2(x,y,v,x1,y1);
w1 = interp2(x,y,w,x1,y1);

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!