finding intercept point in the plot

close all
theta = 50;
v0=200;
slope= 0.1;
vx=v0*cosd(theta); %horizontal component of velocity vector
vy=v0*sind(theta); %vertical component of velocity vector
g=9.807;
tf=2*vy/g; %total flight time
t=linspace(0,tf,150);
for r=1:length(t)
x(r)=vx*t(r); %horizontal postion
A(r)=vy*t(r)-0.5*g*t(r)^2; %vertical postion of particle
R(r)=x(r)*slope; %vertical postion of terrain
end
figure(1)
plot(x,A,'b')
hold on
plot(x,R,'m')
title('Altitude VS Range')
xlabel('Range')
ylabel('Altitude')
legend({'Range','Line of Terrain'},'Location','southwest')
grid on
hold on

 Respuesta aceptada

Star Strider
Star Strider el 8 de Abr. de 2021
Try this:
theta = 50;
v0=200;
slope= 0.1;
vx=v0*cosd(theta); %horizontal component of velocity vector
vy=v0*sind(theta); %vertical component of velocity vector
g=9.807;
tf=2*vy/g; %total flight time
t=linspace(0,tf,150);
for r=1:length(t)
x(r)=vx*t(r); %horizontal postion
A(r)=vy*t(r)-0.5*g*t(r)^2; %vertical postion of particle
R(r)=x(r)*slope; %vertical postion of terrain
end
[Amax,idx] = max(A);
x_int = interp1(A(idx:end)-R(idx:end), x(idx:end), 0);
y_int = interp1(x, R, x_int);
figure(1)
plot(x,A,'b')
hold on
plot(x,R,'m')
plot(x_int, y_int, 'rs')
title('Altitude VS Range')
xlabel('Range')
ylabel('Altitude')
legend({'Range','Line of Terrain','Intercept'},'Location','southwest')
grid on
hold off
.

16 comentarios

Image Analyst
Image Analyst el 8 de Abr. de 2021
FRANCISCO CORTEZ
FRANCISCO CORTEZ el 8 de Abr. de 2021
thank you. do you know how to added so it shows the actual x and y intercept coordinates in the plot?
As always, my pleasure!
Yes! Add this line after the hold off call:
text(x_int, y_int, sprintf('$(%.1f, %.1f)\\rightarrow$',x_int,y_int), 'Horiz','right', 'Vert','middle', 'Interpreter','latex')
Experiment with it to get the result you want. See the documentation on text for details.
FRANCISCO CORTEZ
FRANCISCO CORTEZ el 9 de Abr. de 2021
thank you
Star Strider
Star Strider el 9 de Abr. de 2021
As always, my pleasure!
I decided to create a function out of part of the previous code:
function distance = ballistics(theta)
v0=200;
slope= 0.1;
vx=v0*cosd(theta); %horizontal component of velocity vector
vy=v0*sind(theta); %vertical component of velocity vector
g=9.807;
tf=2*vy/g; %total flight time
t=linspace(0,tf,150);
for r=1:length(t)
x(r)=vx*t(r); %horizontal postion
A(r)=vy*t(r)-0.5*g*t(r)^2; %vertical postion of particle
R(r)=x(r)*slope; %vertical postion of terrain
end
[Amax,idx] = max(A);
x_int = interp1(A(idx:end)-R(idx:end), x(idx:end), 0);
y_int = interp1(x, R, x_int);
distance = -hypot(x_int,y_int);
end
then use the fminunc function to optimise it:
theta_est = fminunc(@ballistics, 60)
producing:
theta_est =
47.8559
Note that it returns the negative of the hypotenuse (by design), so the minimum value of the ‘ballistics’ function will be the maximum range angle.
FRANCISCO CORTEZ
FRANCISCO CORTEZ el 13 de Abr. de 2021
i not sure how to use the fminunc function to ge the theta_est
Star Strider
Star Strider el 13 de Abr. de 2021
Just use the code I posted.
It will likely be necessary to save the ‘ballistics’ function somewhere on your MATLAB search path first.
FRANCISCO CORTEZ
FRANCISCO CORTEZ el 13 de Abr. de 2021
its not comming out with the theta est
Star Strider
Star Strider el 13 de Abr. de 2021
The code I posted ran for me without error. I have no idea what the problem could be.
FRANCISCO CORTEZ
FRANCISCO CORTEZ el 13 de Abr. de 2021
so i just copy the new code and put it at the bottom of the first code
Star Strider
Star Strider el 13 de Abr. de 2021
If you have R2016b or later (if I remember correctly that was when functions were first allowed at the end of scripts), open a new script and put the ‘ballistics’ function at the end of it. Then run the fminunc call from above it. (I first ran it in a function I use for such purposes, then later saved it as a separate file to be certain that worked, and did the fminunc call each time. Both worked.)
FRANCISCO CORTEZ
FRANCISCO CORTEZ el 13 de Abr. de 2021
sorry i just dont know how to do all that
Download the attached file to a directory in your MATLAB search path.
Then from the Command Window or a script, run it by running:
ballistics_fminunc_demo
or if you have it open in a tab in your Editor window, and you can do that with:
edit('ballistics_fminunc_demo.m')
click on the green Run arrow. The result will appear in your Command Window.
FRANCISCO CORTEZ
FRANCISCO CORTEZ el 13 de Abr. de 2021
got it thank you
Star Strider
Star Strider el 13 de Abr. de 2021
s always, my pleasure!

Iniciar sesión para comentar.

Más respuestas (2)

FRANCISCO CORTEZ
FRANCISCO CORTEZ el 12 de Abr. de 2021

0 votos

How can i determine the initial angle of the projectile with respect to the horizontal in order to achieve maximum range
Image Analyst
Image Analyst el 22 de Mayo de 2022

0 votos

See attached demo that computes just about everything you could ever want to know about a projectile.

Categorías

Más información sobre Programming en Centro de ayuda y File Exchange.

Productos

Preguntada:

el 8 de Abr. de 2021

Respondida:

el 22 de Mayo de 2022

Community Treasure Hunt

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

Start Hunting!

Translated by