/*
   Useful Metes and Bounds Math
   
   legallandconverter.com 
   Copyright 2022
   All Rights Reserved
   
   clang usefulmath.c -lm
   
*/   

#include <stdlib.h>
#include <stdio.h>
#include <math.h>


double deg2rad(double degree)
{
  return degree * M_PI / 180.00;  
}  

double rad2deg(double radians)
{
  return (radians * 180.00) / M_PI; 
}  


int main()
{
   double radius,degrees,circumference,arcdistance,radians,chorddistance;
   double xradians,xarcdegrees,xchorddegrees;


   // CALC ARC DISTANCE AND CHORD DISTANCE
   
   radius         = 1784.68;

   degrees        = 3.0 + 44.0/60.0 + 50.0/3600.0;
   
   radians        = degrees * M_PI / 180.0;

   circumference  = 2.0 * radius * M_PI;

   arcdistance    = degrees * circumference / 360.0;                    

   chorddistance  = 2.0 * radius * sin(radians/2.0);


   // CALC DEGREES FROM ARC DISTANCE AND RADIUS
   
   xarcdegrees    =  360.0 * arcdistance / circumference;
   
   
   // CALC DEGREES FROM CHORD DISTANCE AND RADIUS
   
   xradians       = 2.0 * asin(chorddistance/(2.0*radius));

   xchorddegrees  = rad2deg(xradians);


   // PRINT

   printf("Useful Metes and Bounds Math\n");
   printf("Radius........: %10.4f\n",radius);
   printf("Degrees.......: %10.4f\n",degrees);
   printf("Circumference.: %10.4f\n",circumference);
   printf("\n");
   
   printf("Arc Distance..: %10.4f\n",arcdistance);
   printf("Chord Distance: %10.4f\n",chorddistance);   
   printf("\n");
   
   
   printf("x Degrees....: %10.4f (from Arc Distance)\n",  xarcdegrees);
   printf("x Degrees....: %10.4f (from Chord Distance)\n",xchorddegrees);
   
   printf("\n");
   
   
   return 0;
}

