카테고리 없음

법선 벡터 계산 (new)

humming_stereo 2024. 8. 22. 14:50
%%%%%%%%%%%%%%%%%%%%%%%%
% T : Track
% C : Cast
% N : Normal
clc; clear; close all;
%% Track line
% set line [start end]
T.x = [-5 5];
T.y = [-5 5];
% angle
T.angle = atan2d(diff(T.y),diff(T.x));
%% Cast pointAQ
% set point
C.res = 3; % resolution
C.x = linspace(T.x(1),T.x(2),C.res)';
C.y = linspace(T.y(1),T.y(2),C.res)';
% set vector
C.u = 2*rand(C.res,1);
C.v = 2*rand(C.res,1);
C.magnitude = sqrt(C.u.^2+C.v.^2);
% angle
% C.angle = atan2d(C.u,C.v);
C.angle = atan2d(C.v,C.u);
%% Nomal vector
% point
N.x = C.x;
N.y = C.y;
% angle
N.angle = T.angle-90;
% vecor
N.magnitude = C.magnitude.*cosd(N.angle-C.angle);
N.u = N.magnitude.*cosd(N.angle);
N.v = N.magnitude.*sind(N.angle);
%% figure
figure
% set
set(gcf,'color','w','Units','normalized','position',[1.1 0 .4 .6])
set(gca,'box','on','layer','top','fontsize',12)
hold on; grid on; axis equal;
% plot
xline(0,'k')
yline(0,'k')
fig.p1 = plot(T.x,T.y,'k');
fig.p2 = quiver(C.x,C.y,C.u,C.v,'off','k');
fig.p3 = quiver(N.x,N.y,N.u,N.v,'off','r','Marker','.','MarkerSize',15);
% deco
xlim([-8 8])
xticks(-8:2:8)
ylim([-8 8])
yticks(-8:2:8)
legend([fig.p1 fig.p2 fig.p3],{'Track line','Original vector','Normal vector'},'Location','southeast')