fork download
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. #define deg2rad 0.01745329251994433
  5.  
  6. struct Data
  7. {
  8. double X, Y, Z;
  9. double B, L, H;
  10. double a;
  11. double b;
  12. };
  13.  
  14. void BLH2XYZ(Data *dsrc)
  15. {
  16. double e = sqrt(1 - (dsrc->b / dsrc->a)*(dsrc->b / dsrc->a));
  17. double sinB = sin(dsrc->B);
  18. double cosB = cos(dsrc->B);
  19. double sinL = sin(dsrc->L);
  20. double cosL = cos(dsrc->L);
  21.  
  22. double tanB_2 = tan(dsrc->B) * tan(dsrc->B);
  23. double f = 1 - e * e;
  24. double fd = sqrt(1 + f * tanB_2);
  25.  
  26. dsrc->X = (dsrc->a * cosL) / fd + dsrc->H * cosB * cosL;
  27. dsrc->Y = (dsrc->a * sinL) / fd + dsrc->H * cosB * sinL;
  28.  
  29. double fd2 = sqrt(1 - e * e * sinB * sinB);
  30. dsrc->Z = (dsrc->a * f * sinB) / fd2 + dsrc->H * sinB;
  31. }
  32.  
  33. int main()
  34. {
  35. Data dsrc;
  36. dsrc.a = 6378137.0000; dsrc.b = 6356752.3142;
  37. dsrc.B = 30 * deg2rad; dsrc.L = 114 * deg2rad; dsrc.H = 20;
  38.  
  39. BLH2XYZ(&dsrc);
  40. printf("%.4lf %.4lf %.4lf\n", dsrc.B, dsrc.L, dsrc.H);
  41. printf("%.4lf %.4lf %.4lf\n", dsrc.X, dsrc.Y, dsrc.Z);
  42. }
Success #stdin #stdout 0s 15232KB
stdin
Standard input is empty
stdout
0.5236    1.9897    20.0000
-2248551.5924    5050329.5646    3170383.7353