Got wrong normal vector

2 visualizaciones (últimos 30 días)
AI-CHI Chang
AI-CHI Chang el 10 de Ag. de 2022
Comentada: AI-CHI Chang el 14 de Ag. de 2022
I wrote a code presented the scatter points on a peak function, and now I want to solve for unit normal vectors at those points.
ok...maybe this is a math problem...why I got a result looks like tangetial vector...
The arrow on the surrounding flat plant looks good but the peak's normal vectors obviously wrong.
% function handler
f = @(x,y)2*(1-x).^2.*exp(-(x.^2) - (y+1).^2) ...
- 5*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) ...
- 1/3*exp(-(x+1).^2 - y.^2); % z
rng('default');
ds = 0.0005;
range = (-2:ds:2)';
width = 4;
x = -width+(width-(-width))*rand(length(range),1); %
y = -width+(width-(-width))*rand(length(range),1); % r = a + (b-a).*rand(N,1)
z = f(x,y);
p = [x y z];
p_origin = p;
num_pt = size(p,1);
syms s t
f1 = 2*(1-s).^2.*exp(-(s.^2) - (t+1).^2) ...
- 5*(s/5 - s.^3 - s.^5).*exp(-s.^2-t.^2) ...
- 1/3*exp(-(s+1).^2 - t.^2);
dfs = diff(f1,s);
dft = diff(f1,t);
normal_x = matlabFunction(dfs);
normal_y = matlabFunction(dft);
normal = [normal_x(x,y),normal_y(x,y),-ones(num_pt,1)];
norm_nor = sqrt(sum(normal.*normal,2));
normal = bsxfun(@rdivide,normal,norm_nor);
% draw arrow
x=p(:,1);
y=p(:,2);
z=p(:,3);
u=normal(:,1);
v=normal(:,2);
w=normal(:,3);
plot3(x,y,z,'b.');
axis equal;
grid on;
view(45,15);
hold on;
quiver3(x,y,z,u,v,w,'r','LineWidth',1,'MaxHeadSize',5);
  6 comentarios
Bruno Luong
Bruno Luong el 10 de Ag. de 2022
Your normal is alright just your graphic representation tricks your brain.
AI-CHI Chang
AI-CHI Chang el 10 de Ag. de 2022
yeah...then i think my problem is solved
thank you very much !! :D

Iniciar sesión para comentar.

Respuesta aceptada

David Goodmanson
David Goodmanson el 12 de Ag. de 2022
Editada: David Goodmanson el 12 de Ag. de 2022
Hi AC,
You were quite right in your suspicions of the 3d plot, which looks fishy. You might call this a configuration control issue. You have two independent functions, f and f1, that are supposed to represent the same thing. That carries some risk in programming. The two functions are supposed to be identical with x <--> s, y <--> t. But if you compare their second lines,
- 5*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) ... % f
- 5*(s/5 - s.^3 - s.^5).*exp(-s.^2-t.^2) ... % f1
you can see that there is a problem with the y.^5 term. I'm not sure which version is correct, but if you change y.^5 to x.^5, or if you change s.^5 to t.^5, in both cases the normal vectors in the plot are pretty clearly normal.
  1 comentario
AI-CHI Chang
AI-CHI Chang el 14 de Ag. de 2022
OMG so embarrassing .... David Goodmanson thank you very much ><!!!
I should be more careful

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Matrices and Arrays en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by