PDA

View Full Version : Please help projectile motion


juice34
15 Oct 2008, 6:17pm
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

shwaip
15 Oct 2008, 6:30pm
as a quick guess, get rid of the t=t+1; line.

also, please re-post your code inside of code here tags.

juice34
15 Oct 2008, 6:36pm
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

shwaip
15 Oct 2008, 6:38pm
i'll take a look at it more thoroughly when i get to school and have access to matlab.

juice34
15 Oct 2008, 6:40pm
Thank you i appreciate your help.

Thrax
15 Oct 2008, 6:44pm
Shwaip, I added the requisite tags for your sanity.

juice34
15 Oct 2008, 6:46pm
THRAX how do i do that, or where are they located.

shwaip
15 Oct 2008, 6:59pm
when you paste your code, just type the tags around the code like this:

http://icrontic.com/forum/attachment.php?attachmentid=26140&stc=1&d=1224093541

and it will look like this:


for i=1:10
i^2
end

shwaip
15 Oct 2008, 7:23pm
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

juice34
15 Oct 2008, 8:13pm
Yea, i dont know what is wrong

shwaip
15 Oct 2008, 9:09pm
(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.

juice34
15 Oct 2008, 11:13pm
Schwaip i appreciate all your help it makes sense now. YOUR AWSOME!!!!

juice34
15 Oct 2008, 11:13pm
Sorry i spelled your forum name wrong but your still awsome!!!