Please help projectile motion
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
%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
0
Comments
also, please re-post your code inside of [php] [/php] tags.
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 endand it will look like this:
for i=1:10 i^2 endhere'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) endthe problem you were having is that 't' is not always a positive integer, and therefore cannot be used to index the matrix.