Lateral Deviation Between two curves

How can the lateral deviation be calculated and drawn between two curves? For instance i have two paths; a desired path and a driven path. I would like to find the lateral deviation or error from the driven path to the desired path and also display the error as a connecting line. Apparently theres a way to do this that uses the normal to the tangent at each point of the driven line, however, i cant quite forget out how to go about that information.
close all; clear all; clc;
for i = 1:100
x(i) = i;
desired_path(i) = 10+x(i).^2;
driven_path(i) = .5*x(i).^2;
end
figure
hold on
plot(x(:), desired_path(:));
grid on;
plot(x(:), driven_path(:));
legend('Desired Path', 'Driven Path')
hold off;

1 件のコメント

Torsten
Torsten 2022 年 10 月 28 日
You mean a plot of abs(f^(-1)(y) - g^(-1)(y)) over y if f(x) = desired path and g(x) = driven path ?

サインインしてコメントする。

回答 (2 件)

Torsten
Torsten 2022 年 10 月 28 日

0 投票

desired_path_invers = @(y)sqrt(y-10);
true_path_invers = @(y)sqrt(2*y);
y = 10:0.1:12000;
plot(y,abs(desired_path_invers(y)-true_path_invers(y)))

1 件のコメント

Robert Williams
Robert Williams 2022 年 10 月 28 日
Thank you for your response, however, what i am looking to achieve is better represented by the picture attached below. Each arrow represents the lateral error between the two paths where the arrows are normal to the driven path and passes through the closest point on the desired path along the normal line. I would like to display the lateral error between the two lines as a seperate line. in addition, i would like to plot the lateral error seperately.
close all; clear all; clc;
for i = 1:10
x(i) = i;
y1(i) = 10+x(i)^2;
y2(i) = .5*x(i)^2;
end
figure
hold on
plot(x(:), y1(:));
grid on;
plot(x(:), y2(:));
legend('Desired Path', 'Driven Path')
hold off;

サインインしてコメントする。

Torsten
Torsten 2022 年 10 月 29 日
編集済み: Torsten 2022 年 10 月 30 日

0 投票

The normal to "driven_path" and the "desired_path" do not cross for r(4) < x < r(2). That's why there is a gap in the distance graph.
syms x t
driven_path = 0.5*x^2;
desired_path = t^2 + 10;
normal_to_driven_path = 0.5*x^2 - 1/x*(t-x);
T = solve(normal_to_driven_path == desired_path,t)
T = 
p = [2 0 -36 0 1];
r = roots(p)
r = 4×1
-4.2394 4.2394 -0.1668 0.1668
cutpoint1 = subs(desired_path,t,T(1))
cutpoint1 = 
cutpoint2 = subs(desired_path,t,T(2))
cutpoint2 = 
dist1 = norm(-[x,driven_path]+[T(1),cutpoint1]);
dist2 = norm(-[x,driven_path]+[T(2),cutpoint2]);
dist1 = matlabFunction(dist1);
dist2 = matlabFunction(dist2);
x1 = 1e-8:0.0001:r(4);
x2 = r(2):0.001:15;
x3 = r(3):0.0001:-1e-8;
x4 = -15:0.001:r(1);
plot(x1,dist1(x1),'r',x2,dist1(x2),'r',x3,dist1(x3),'r',x4,dist1(x4),'r')

カテゴリ

ヘルプ センター および File ExchangeLine Plots についてさらに検索

質問済み:

2022 年 10 月 28 日

編集済み:

2022 年 10 月 30 日

Community Treasure Hunt

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

Start Hunting!

Translated by