//         Distance Calculation Routine
// version 1.0
// takes input of signed int AngularPosition, unsigned int 
// minimumDistanceAngularPosition, unsigned int minimumDistanceSampled,
// and gives output double ShootDistance by calculating it. 


#define DEBUG 1 //to get debugging output, set to 1 and uncomment appropriate lines

//global variables -- comment out for module
//signed int AngularPosition;
//unsigned int MinimumDistanceAngularPosition;
//unsigned int minimumDistanceSampled;

//void main(void)  
double CalcShootDistance(signed int AngularPosition, unsigned int minimumDistanceAngularPosition, unsigned int minimumDistanceSampled)

unsigned int CourtWidth = 244;  // the width of the court (8ft.) in cm
double ShootDistance;
double ShootAngle;  
unsigned int StepsPerRevolution = 5100;  //conversion from motor steps to revolutions for angle, measured by Jer Saturday

//dummy values for variables:
    //AngularPosition = StepsPerRadian*30;  //testing a 30 degree angle
    //MinimumDistanceAngularPosition = 0;
    //minimumDistanceSampled = 777;

	   ShootAngle = abs( ((AngularPosition - minimumDistanceAngularPosition)*2*3.14159/StepsPerRevolution) );  //this is absolute value of angle in radians
	   ShootDistance = ( (CourtWidth - minimumDistanceSampled/100)/cos(ShootAngle) );  //the /100 is to convert from .1mm scale to 1cm scale.

        //print all values for debugging:		   
        if (DEBUG) 
    		printf ("\n\n AngPos= %d", (int)AngularPosition); 
            printf ("   MinAngPos= %d", (int)minimumDistanceAngularPosition);
            printf ("\n dist from bot to far wall= %d", (int)(CourtWidth - minimumDistanceSampled/100) );
            printf ("   ShootAngle= %d \n", (int)ShootAngle*180/3.141);  //printed in degrees, not radians
			printf ("   ShootDistance= %d \n", (int)ShootDistance);

return ShootDistance;