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

 采纳的回答

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 个评论

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.
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.
i not sure how to use the fminunc function to ge the theta_est
Just use the code I posted.
It will likely be necessary to save the ‘ballistics’ function somewhere on your MATLAB search path first.
its not comming out with the theta est
The code I posted ran for me without error. I have no idea what the problem could be.
so i just copy the new code and put it at the bottom of the first code
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.)
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.
s always, my pleasure!

请先登录,再进行评论。

更多回答(2 个)

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 2022-5-22
See attached demo that computes just about everything you could ever want to know about a projectile.

类别

帮助中心File Exchange 中查找有关 Programming 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!

Translated by