View Single Post
  #36   Spotlight this post!  
Unread 12-01-2006, 19:49
racsan12345 racsan12345 is offline
Registered User
FRC #1351
 
Join Date: Jan 2006
Location: San Jose
Posts: 3
racsan12345 is an unknown quantity at this point
Re: Nerf ball starting at 12m/s 45 degree angle ending at 8ft 6in w/ air resistance

For launching 4.5 feet to 8.5 feet:

Please input the initial velocity in meters per second: 12.8
Please input the coefficient of drag (0.07 - 0.5): 0.416
The uber best range is 14.7775 meters at an uber angle of 47 degrees.


C++ Code:
#include <iostream.h>
#include <math.h>

int main()
{
// float i = cos(x); x is in radians
// float i = atan(x); i is in radians arctangent

float x;
float y;
float v_initial = 12.8;
float v_x;
float v_y;
float initial_angle;
float theta;
float drag;
float area = pow((3.5 * 2.54 / 100), 2) * 3.14159;
float mass = .206; //kilograms
float C_D; //Coefficient of Drag
float a_x;
float a_y;
float increment = .01; //Incrementing time
float best_range;
float rad_conv = 2.0 * 3.14159 / 360.0;
float uber_best_range = 0;
float uber_angle = 0;

cout << "This program will calculate the maximum range and best angle to launch a 7 inch diameter poof ball." << endl << endl;
cout << "Please input the initial velocity in meters per second: ";
cin >> v_initial;

cout << "Please input the coefficient of drag (0.07 - 0.5): ";
cin >> C_D;

for(initial_angle = 10; initial_angle <= 80; initial_angle++)
{
x = 0;
y = 0;
v_x = v_initial * cos(initial_angle * rad_conv);
v_y = v_initial * sin(initial_angle* rad_conv);
best_range = 0;

do
{
theta = atan(v_y/v_x);
drag = .5 * C_D * area * sqrt(pow(v_x, 2) + pow(v_y, 2));
a_x = drag / mass * cos(theta);
a_y = drag / mass * sin(theta) + 9.8;

v_x = v_x - a_x * increment;
v_y = v_y - a_y * increment;

x = x + v_x * increment;
y = y + v_y * increment;

if(y > 1.3 && v_y < 0)
best_range = x;

}while(y >= 0);

cout << "At " << initial_angle << " degrees, the best range is " << best_range << " meters." << endl << endl;

if(best_range > uber_best_range)
{
uber_best_range = best_range;
uber_angle = initial_angle;
}

}

cout << "The uber best range is " << uber_best_range << " meters at an uber angle of " << uber_angle << " degrees.";

return 0;
}

--Ownage