0

I'm trying to write a script file in Matlab that will plot the trajectory of a ball thrown at a specific angle (a), velocity (v) and from an initial height (y0). I have the equation and want Matlab to plot the path of the ball in flight. However, I want it to only plot it until it hits the ground (y = 0).

To do this I have used a while loop, but it seems to never satisfy the condition and just run forever. I'm sure the condition can be met after a number of iterations from x, but it just goes on for minutes, what's wrong?

The code is as follows.

    % Trajectory Plotter with cutoff
    clear all
    close all 
    clc

    y0 = input('Enter a value for y0 in meters: ');

    if y0 < 0 
        disp('Please enter a positive value for y0')
    end

    a = input('Enter a value for theta in degrees: ');
    g = 9.81;
    v = input('Enter a value for initial velocity in m/s: ');

    x = 0;
    y = y0 + x*tand(a) - (g*x.^2)/(2*(v*cosd(a))^2)

    while y >= 0
        x = x+0.2
    end

    plot(x,y);

Apologies if this is a trivial problem, I'm new to Matlab/programming.

Thanks.

1
  • 1
    Inside your while loop, you only change x, you need to do something to y. Commented Apr 21, 2013 at 15:38

2 Answers 2

1

It is true, the while loop is the problem. If your condition (in this case y >= 0) is not influenced by the execution of your loop, then the truth value of the condition will never change. It's like putting paintbrush strokes on a wall and waiting for the opposite wall to get painted...

Now, for this particular problem, you might want to update the y's value too, after updating the x's value:

while y >= 0
    x = x+0.2;
    y = y0 + x*tand(a) - (g*x.^2)/(2*(v*cosd(a))^2);
end  
Sign up to request clarification or add additional context in comments.

Comments

0

It's true that you do indeed need to update the loop control variable y as well within the while loop, but that's not all that's amiss with your code.

Since you're looking to plot the trajectory, you'll need to preserve the values of x and y computed; here they're simply being overwritten.

The following will achieve what you seem to need:

% Trajectory Plotter with cutoff
clear all
close all 
clc

y0 = input('Enter a value for y0 in meters: ');

if y0 < 0 
    disp('Please enter a positive value for y0')
end

a = input('Enter a value for theta in degrees: ');
g = 9.81;
v = input('Enter a value for initial velocity in m/s: ');

x = 0;
y = y0 + x*tand(a) - (g*x.^2)/(2*(v*cosd(a))^2);

X = x;
Y = y0;

while y >= 0
    x = x+0.2;
    y = y0 + x*tand(a) - (g*x.^2)/(2*(v*cosd(a))^2);

    X = [X x];
    Y = [Y y];
end

plot(X,Y,'--o');

Here, before overwriting x and y, their values are being appended to X and Y respectively and are thus preserved in those variables.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.