MATLAB: Help with code please

code helpMATLAB

Hey guys, i have a school project that I have been absolutely stunted by for about 8 hours so far and i just cant seem to understand what is wrong, i was wondering if you guys could help
the object of the code is to calculate a projectile motion plot given an array of angles to iterate through, however it is not doing that, and keeps getting stuck in an infinite while loop, the variable height never reaches below 0 for some reason. Any help would be appreciated, thank you.
here is my code:
% 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
velStart=input('input the initial velocity in m/sec: ');
angle=20:5:80;
% convert the degrees into radians so MATLAB likes it
angle=angle*pi./180;
rangeAngle=length(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)=.01; % 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=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;
%Don't see any issues here
while height>=0 % check that the ball has not hit ground yet
index = index+1;
% *******************************************************






% break velocity into its components
velx = vel*cos(thisAngle);
vely = vel*sin(thisAngle);
% *******************************************************
% *******************************************************
% 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*velx.^2)/mass;
else
adragy = g - (c*vely.^2)/mass;
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)+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

Best Answer

y(index)=y(index-1)+distY;
You may want to check your code if this is fine to do. Also, by reading the error shown, you could've figure it out.
After doing so, it reports an error in here, but it still works.
thisAngle=angle(i); % you can change i to 1, but I don't understand the code completely, so up to you