In this project you implement a program such that it simulates the process of repeated attempts to hit a target with a projectile. The goal is to shoot the projectile within a 1 foot distance from the target, since such a short miss is accepted as a hit. Your program is responsible for the following tasks.
Compute the trajectory data of a projectile (such as the time, the maximum height and the distance as described by the formulas above) for a given launch velocity and a launch angle, in particular for an initial choice of a 45 degree angle
Determine if the target is within the range for the given launch velocity, that is check if at the first attempt the distance is sort to the target with more than 1 foot; if so the process is terminated and then restarted with an increased launch velocity (note that for any velocity the longest range is attained if the launch angle is of 45 degrees)
Compute the error of a shot (error = projectile range - distance to target)
Check if the error is less than 1 foot in absolute value (the absolute error); if so, notify the user about the result and terminate the process
Offer the user four chances to modify the launch angle and try to hit the target
Keep track of the smallest absolute error produced by the subsequent attempts; report the best effort to the user
Analysis and Requirements
Input
Initial input values are
(i) launch velocity (feet/sec)
(ii) distance to the desired target (feet)
(iii) gravitational acceleration (a constant)
Additional input values are the launch angles for the repeated attempts when apply. The angle must always be in the range of 0.0 - 45.0 degrees.
Distance, velocity and launch angle are solicited from the user on JOptionPane input windows.
Output
Output messages are displayed both on JOptionPane windows and on the console. Every time a launch has been executed by the program, a report providing the details of the trajectory must be displayed.
Design
For this project you shall design a single class which contains all the necessary data and operations. A suggested class name is Projectile. You must decide upon the necessary import(s).
The Projectile class contains the main method, which in turn contains all your code, including the variable declarations. The main method is responsible for the following tasks:
opens a welcoming window
declares and assigns a named constant for the gravitational acceleration; the value is 32
declares variables (all double) to store projectile data velocity, distance and angle; all initialized to 0
solicits the input values as explained in the Analysis section, if either of these input is the empty string or null (Cancel button), the message as shown in Figure 11 displayed and the program exits; valid input parsed and saved in the relevant variables
computes all the trajectory and output data and saves those in relevant variables (declare and use the necessary variables as specified in the class description below)
builds up and stores the output message in a single string variable
displays the output windows
numbers in the output are formatted to the nearest hundredth; for this purpose, use the String.format( ) method for JOptionPane output; for the console both String.format( ) and printf( ) are applicable; DecimalFormat class is also permitted as explained in the 5th Edition of Gaddis
utilizes if and/or if-else logic to decide if additional launches are necessary and repeats the operations at most four times as needed (note: heavy code repetition will be necessary to cover all four cases, since using loops is not allowed)
terminates the program when it is due