How to draw normal line at given points ?
26 次查看(过去 30 天)
显示 更早的评论
Hello everyone,
I have a red curve that fit 4 bleu points. I want to draw normal at these points.
Here attached my curve.
and the x, y coordinates of the bleu points are :
x=[142;127;181;234];
y=[251;251;261;255];
So, please, how to get the normal line ?
I will be very grateful if anyone could help me.
2 个评论
采纳的回答
Ameer Hamza
2020-3-31
Try this:
x=[142;127;181;234];
y=[251;251;261;255];
[x, idx] = sort(x);
y = y(idx);
points = [x y];
xint = linspace(127,234,50)';
spl = spline(x,y);
tangent_vector = zeros(4,2);
for i=1:4
if i==4 % last polynomial need to evalauted at endpoint
deri_coef = polyder(spl.coefs(i-1,:));
tangent_vector(i, :) = [1 polyval(deri_coef, x(end)-x(end-1))];
else
deri_coef = polyder(spl.coefs(i,:));
tangent_vector(i, :) = [1 polyval(deri_coef, 0)];
end
end
normal_vec = [-tangent_vector(:,2) tangent_vector(:,1)];
start_points = points;
end_points = 10*normal_vec + points;
fig = figure;
ax = axes();
hold(ax);
t = plot(y,x,'.',ppval(spl,xint),xint,'r-');
for i=1:4
p1 = start_points(i,:);
p2 = end_points(i,:);
plot([p1(2) p2(2)], [p1(1) p2(1)], 'r', 'LineWidth', 2);
end
daspect([1 1 1]);
xlim([180 340])
ylim([100 250])
2 个评论
Ameer Hamza
2020-4-1
For loop is just calculating the tangent vector at each point, since we can calculate the normal vectors from tangent vectors. The spline function output 3 polynomials for 4 data points. So to compute tangent at 4 data points, we need to do it like this
datapoint # 1 -> polynomial # 1 (start point)
datapoint # 2 -> polynomial # 2 (start point) or polynomial # 1 (end point)
datapoint # 3 -> polynomial # 3 (start point) or polynomial # 2 (end point)
datapoint # 4 -> polynomial # 3 (end point)
Which shows where I evaluated the derivative of each polynomial
更多回答(1 个)
michael scheinfeild
2021-8-28
https://michaelsheinfeild.medium.com/unit-normal-vector-to-curve-d63ef0124acd
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Polynomials 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!