Advertisement
fastman92

GPS representation

Aug 23rd, 2013
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.47 KB | None | 0 0
  1. #pragma once
  2. #include <math.h>
  3.  
  4. int pow(int base, int exponent)
  5. {
  6.     int value = base;
  7.  
  8.     if(exponent >= 1)
  9.     {
  10.         while (exponent > 1)
  11.         {
  12.             value *= base;
  13.             exponent--;
  14.         }
  15.     }
  16.     else
  17.     {
  18.         while (exponent < 1)
  19.         {
  20.             value /= base;
  21.             exponent++;
  22.         }
  23.     }
  24.  
  25.     return value;
  26. }
  27.  
  28. namespace DMS
  29. {
  30.     struct tDMS
  31.     {
  32.         int degrees;
  33.         int minutes;
  34.         double seconds;
  35.     };
  36.  
  37.     void double_to_DMS(tDMS* outDMS, double value)
  38.     {
  39.         outDMS -> degrees = (int)value;
  40.         double newVal = fabs(value);
  41.         newVal = newVal - (int)newVal;
  42.  
  43.         outDMS -> minutes = (int)(newVal * 60.0);
  44.        
  45.         outDMS -> seconds = 3600*(newVal - (outDMS -> minutes / 60.0));
  46.     }
  47.  
  48.     void representDoubleAsIntegerDividedByPowerOf10(char* outString, double num)
  49.     {
  50.         char numberStr[32];
  51.         sprintf(numberStr, "%g", num);
  52.  
  53.         char* decimalDot = strchr(numberStr, '.');     
  54.  
  55.         int neededExponent;
  56.  
  57.         if(decimalDot != NULL)
  58.         {
  59.             neededExponent = strlen(decimalDot+1);
  60.             *decimalDot = NULL;
  61.  
  62.             int dividend = pow(10, neededExponent);
  63.             sprintf(outString, "%hs%hs/%d", numberStr, decimalDot+1, dividend);
  64.         }
  65.         else
  66.             sprintf(outString, "%hs/1", numberStr);
  67.     }
  68.  
  69.     void doubleToRationalGPSrepresentation(char* outStr, double value)
  70.     {
  71.         DMS::tDMS DMS_value;
  72.         DMS::double_to_DMS(&DMS_value, fabs(value));
  73.  
  74.         char seconds[32];
  75.  
  76.         representDoubleAsIntegerDividedByPowerOf10(seconds, DMS_value.seconds);
  77.  
  78.         sprintf(outStr, "%d/1 %d/1 %hs", DMS_value.degrees, DMS_value.minutes, seconds);
  79.     }
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement