Please help projectile motion

edited October 2008 in Science & Tech
I have a problem i need to print out a table of time x values and y values for the path of a projectile, but cannot get it anyway i try. Here is my code and i would appreciate if someone could help me.


%Constants and initial values
g = -9.8;
conv = (pi/180);


%Get users inputs in the following order:distance,velocity,angle
try
distance = input ('Please enter the distance to your target: (meters) \n');
m = Distance <= 0;
if m == 1
disp ('::FATAL ERROR: Distance cannot be < or = to zero, goodbye')
break
end
catch ME
end


try
velocity = input ('Please enter initial velocity of the projectile: (m/s) \n');
m = velocity <= 0;
if m == 1
disp ('::FATAL ERROR: Velocity cannot be < or = to zero, goodbye')
break
end
catch ME
end

try
theta = input ('Please enter an angle (degrees) between 0 and 90: \n');
m = theta < 0 | Theta > 90;
if m == 1
disp ('::FATAL ERROR: Angle cannot be < or = to zero, goodbye')
break
end
catch ME
end

%Calculate initial x and y velocitys, time, and range
voy = velocity*sin(theta*conv);
vox = velocity*cos(theta*conv);
time = -2*(voy / g);
range = (vox*time)

%Show how far bag traveled
fprintf ('The bean bag traveled a total of %6.2f meters \n',range)

%Create masks to determine how close projectile was to target
ma = (range-2.5 <= Distance && Distance <= range+2.5);
mb = (range > Distance-2.5);
mc = (range < Distance+2.5);

%Interpret masks
if ma == 1
fprintf ('Your bag hit the target right on!! GOOD AIM')
elseif mb == 1
fprintf ('so your bean bag traveled long %6.2f meters \n', abs(range - distance))
elseif mc == 1
fprintf ('so your bean bag traveled short %6.2f meters \n', abs(distance - range))
end

disp 'Please press enter to see (x,y) coordinates as a funtion of time:'
pause


%TABLE/GRAPH%

xpos = 0; %Set starting location at (x,y)=(0,0)
ypos = 0;

t=0; %Random incrementing variable(represents time).


for t=0:.1:100
t=t+1;

vy = voy + (g*t);
xpos = xpos + (vox*.1);
ypos = ypos + (voy*.1);
out = [t' xpos' ypos']

fprintf ( 'The x value is %6.2d and y value is %6.2d n\',out(t,:))

if( ypos < 0 )
break;
end
end

Comments

  • shwaipshwaip bluffin' with my muffin Icrontian
    edited October 2008
    as a quick guess, get rid of the t=t+1; line.

    also, please re-post your code inside of [php]
    code here
    
    [/php] tags.
  • edited October 2008
    I just tried it and it still doesnt work. Im new to this forum and dont know where the php is and dont see it in the reply to new thread window.


    here is my code again
    %Constants and initial values
    g = -9.8;
    conv = (pi/180);
    
    
    %Get users inputs in the following order:distance,velocity,angle
    try
      distance = input ('Please enter the distance to your target: (meters) \n');
      m = Distance <= 0;
        if m == 1
         disp ('::FATAL ERROR: Distance cannot be < or = to zero, goodbye')
         return
        end
    catch 
    end
    
    
    try
      velocity = input ('Please enter initial velocity of the projectile: (m/s) \n');
      m = velocity <= 0;
      if m == 1
    
        return
      end
    catch 
    end
    
    try
      theta = input ('Please enter an angle (degrees) between 0 and 90: \n');
      m = theta < 0 | Theta > 90;
      if m == 1
        disp ('::FATAL ERROR: Angle cannot be < or = to zero, goodbye')
        return
      end
    catch 
    end
    
    %Calculate initial x and y velocitys, time, and range
    voy = velocity*sin(theta*conv);
    vox = velocity*cos(theta*conv);
    time = -2*(voy / g);
    range = (vox*time)
    
    %Show how far bag traveled
    fprintf ('The bean bag traveled a total of %6.2f meters \n',range)
    
    %Create masks to determine how close projectile was to target
    ma = (range-2.5 <= distance && distance <= range+2.5);
    mb = (range > distance-2.5);
    mc = (range < distance+2.5);
    
    %Interpret masks
    if ma == 1
      fprintf ('Your bag hit the target right on!! GOOD AIM')
    elseif mb == 1
      fprintf ('so your bean bag traveled long %6.2f meters \n', abs(range - distance))
    elseif mc == 1
      fprintf ('so your bean bag traveled short %6.2f meters \n', abs(distance - range))
    end
    
    disp 'Please press enter to see (x,y) coordinates as a funtion of time:'
    pause
    
    
    %TABLE/GRAPH%
    
    xpos = 0; %Set starting location at (x,y)=(0,0)
    ypos = 0;
    
    t=0; %Random incrementing variable(represents time).
    
    
    for t=0:.1:100
    
    
      vy = voy + (g*t);
      xpos = xpos + (vox*.1);
      ypos = ypos + (voy*.1);
      out = [t' xpos' ypos']
    
      fprintf ( 'The x value is %6.2d and y value is %6.2d n\',out(t,:))
    
      if( ypos < 0 )
        break;
      end
    end
    
  • shwaipshwaip bluffin' with my muffin Icrontian
    edited October 2008
    i'll take a look at it more thoroughly when i get to school and have access to matlab.
  • edited October 2008
    Thank you i appreciate your help.
  • ThraxThrax 🐌 Austin, TX Icrontian
    edited October 2008
    Shwaip, I added the requisite tags for your sanity.
  • edited October 2008
    THRAX how do i do that, or where are they located.
  • shwaipshwaip bluffin' with my muffin Icrontian
    edited October 2008
    when you paste your code, just type the tags around the code like this:

    attachment.php?attachmentid=26140&stc=1&d=1224093541

    and it will look like this:
    for i=1:10
         i^2
    end
    
  • shwaipshwaip bluffin' with my muffin Icrontian
    edited October 2008
    there was a problem with the indexing you were doing here:
      fprintf ( 'The x value is %6.2d and y value is %6.2d n\',out(t,:))
    

    here's the new code:
    %Constants and initial values
    g = -9.8;
    conv = (pi/180);
    
    
    %Get users inputs in the following order:distance,velocity,angle
    try
      distance = input ('Please enter the distance to your target: (meters) \n');
      m = Distance <= 0;
        if m == 1
         disp ('::FATAL ERROR: Distance cannot be < or = to zero, goodbye')
         return
        end
    catch 
    end
    
    
    try
      velocity = input ('Please enter initial velocity of the projectile: (m/s) \n');
      m = velocity <= 0;
      if m == 1
    
        return
      end
    catch 
    end
    
    try
      theta = input ('Please enter an angle (degrees) between 0 and 90: \n');
      m = theta < 0 | Theta > 90;
      if m == 1
        disp ('::FATAL ERROR: Angle cannot be < or = to zero, goodbye')
        return
      end
    catch 
    end
    
    %Calculate initial x and y velocitys, time, and range
    voy = velocity*sin(theta*conv);
    vox = velocity*cos(theta*conv);
    time = -2*(voy / g);
    range = (vox*time)
    
    %Show how far bag traveled
    fprintf ('The bean bag traveled a total of %6.2f meters \n',range)
    
    %Create masks to determine how close projectile was to target
    ma = (range-2.5 <= distance && distance <= range+2.5);
    mb = (range > distance-2.5);
    mc = (range < distance+2.5);
    
    %Interpret masks
    if ma == 1
      fprintf ('Your bag hit the target right on!! GOOD AIM\n')
    elseif mb == 1
      fprintf ('so your bean bag traveled long %6.2f meters \n', abs(range - distance))
    elseif mc == 1
      fprintf ('so your bean bag traveled short %6.2f meters \n', abs(distance - range))
    end
    
    disp 'Please press enter to see (x,y) coordinates as a funtion of time:'
    pause
    
    
    %TABLE/GRAPH%
    
    xpos = 0; %Set starting location at (x,y)=(0,0)
    ypos = 0;
    
    t=0; %Random incrementing variable(represents time).
    
    dt = 0.01;
    for t=0:dt:100
    
    
      vy = voy + (g*t);
      xpos = xpos + (vox*dt);
      ypos = ypos + (vy*dt);
      
      
      if( ypos < 0 )
        break;
      end
      
      out = [t' xpos' ypos'];
    
      fprintf ( 'The x value is %6.2d and y value is %6.2d \n',xpos, ypos)
    
    end
    
  • edited October 2008
    Yea, i dont know what is wrong
  • shwaipshwaip bluffin' with my muffin Icrontian
    edited October 2008
    (the code i posted works)
    the problem you were having is that 't' is not always a positive integer, and therefore cannot be used to index the matrix.
  • edited October 2008
    Schwaip i appreciate all your help it makes sense now. YOUR AWSOME!!!!
  • edited October 2008
    Sorry i spelled your forum name wrong but your still awsome!!!
Sign In or Register to comment.