219k views
0 votes
g % Create a program to plot the motion of the ping pong ball with drag. % The program will take inputs for velocity in m/s and angle of launch. % note that with a high speed camera I estmated a launch speed for a ping % pong ball could be 30 m/s.

User Henders
by
4.1k points

1 Answer

7 votes

Answer:

% Create a program to plot the motion of the ping pong ball with drag.

% The program will take inputs for velocity in m/s and angle of launch.

% note that with a high speed camera I estmated a launch speed for a ping

% pong ball could be 30 m/s.

clear all

close all

clc

velStart=input('input the initial velocity in m/sec: ');

angle=20:5:80;

% convert the degrees into radians so MATLAB likes it

values_angle=angle*pi./180;

rangeAngle=length(values_angle);

hold on

%Lines 1 - 14 are fine

for i=1:rangeAngle

% set initial position and time

x=[];

y=[];

time=[];

vel=velStart;

VelocityX=[];

VelocityY=[];

x(1)=0; % meters

y(1)=.001; % meters

time(1)=0; % seconds

mass=.00247; %kg ping pong ball .00247 Kg

g=-9.8; % m/sec^2

c=0.0005; % coefficient of drag where Re is between 10^3 and 10^5

% so I can load an array for plotting

% start to increment the motion

index=1;

thisAngle=values_angle(i);

velx=vel*cos(thisAngle);

VelocityX(1)=velx;

vely=vel*sin(thisAngle);

VelocityY(1)=vely;

% set a time step

deltaTime=.001; % seconds

height=y(1);

flag=0;

velFinalX = 0;

velFinalY = 0;

%Don't see any issues here

while height>0 % check that the ball has not hit ground yet (1e-3 to speed things up, It hangs because it never leaves this line, check how height is calculated.)

index = index+1;

% *******************************************************

% break velocity into its components

if index == 2

velx = vel*cos(thisAngle);

vely = vel*sin(thisAngle);

else

velx = velFinalX;

vely = velFinalY;

end

% *******************************************************

% *******************************************************

% use an if/else statement to check to see if the ball is moving

% down (negative). If it is, then drag has an opposite sign

% as gravity in the acceleration formula. Otherwise gravity

% and drag have the same sign. Calculate the new acceleration in the y.

if vely < 0

adragy = g + (c*vely.^2)/mass;

velFinalY = vely + adragy.*deltaTime;

else

adragy = g - (c*vely.^2)/mass;

velFinalY = vely + adragy.*deltaTime;

end

% *******************************************************

% *******************************************************

% Now calculate the acceleration in the x .

adragx = (-c*velx.^2)/mass;

% *******************************************************

% *****************************************************

% calculate the new velocity at the end of the time step

% this will have X and Y components, so you need a variable

% for each. One is velFinalX and the other is velFinalY.

velFinalX = velx + adragx.*deltaTime;

% velFinalY = vely + adragy.*deltaTime;

% *******************************************************

% ******************************************************

% Get a new velocity vector and angle given the X and Y

% The velocity is the variable "vel" and angle is "angle"

vel = sqrt(velFinalX.^2 + velFinalY.^2);

angle = atan(velFinalY/velFinalX);

%*******************************************************

% now save my values at this time step

VelocityX(index)=velFinalX;

VelocityY(index)=velFinalY;

% and distance numbers

distX=VelocityX(index).*deltaTime;

distY=VelocityY(index).*deltaTime;

% save distance values

x(index)=x(index-1)+distX;

y(index)=y(index-1)+distY;

height=y(index);

time(index)=time(index-1)+deltaTime;

%lines 105-107 are good

if distY<0&&flag<=1

if height<.25

disp(distY)

fprintf('goal height detected at distance %.2f meters.',x(index));

flag =2;

LandingDistance(i)=x(index);

end

end

end

plot(x,y)

title('distance traveled by ping pong ball in meters')

xlabel('horizontal distance traveled (meters)')

ylabel('vertical distance traveled (meters)')

end

hold off

Step-by-step explanation:

User Islam Hassan
by
5.3k points