Advertisement
Guest User

Azimuth

a guest
Oct 20th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.16 KB | None | 0 0
  1. using MathNet.Spatial.Euclidean;
  2. using System;
  3.  
  4. namespace ConsoleApp1 {
  5. class Program {
  6. static double DegreeToRadian(double angle) {
  7. return Math.PI * angle / 180.0;
  8. }
  9.  
  10. static double RadianToDegree(double angle) {
  11. return angle * (180.0 / Math.PI);
  12. }
  13.  
  14. static void Main(string[] args) {
  15. double[,] data = {
  16. {
  17. -18.9689, // earthLat
  18. -49.465, // earthLon
  19. 6378, // earthHei
  20.  
  21. -27.14, // satLat
  22. 105.39, // satLon
  23. 6801.91, // satHei
  24.  
  25. // Az: ~ 151.45
  26. // Elev: ~ -62.8
  27. },
  28. };
  29.  
  30. for(int i = 0; i < data.GetLength(0); i++) {
  31. CalcAz.CalcAzEl(
  32. DegreeToRadian(data[i, 0]),
  33. DegreeToRadian(data[i, 1]),
  34. DegreeToRadian(data[i, 2]),
  35. DegreeToRadian(data[i, 3]),
  36. DegreeToRadian(data[i, 4]),
  37. DegreeToRadian(data[i, 5]),
  38. out double az, out double elev);
  39.  
  40. Console.WriteLine("Modelo:");
  41. Console.WriteLine(" - earthLat: {0}", data[i, 0]);
  42. Console.WriteLine(" - earthLon: {0}", data[i, 1]);
  43. Console.WriteLine(" - earthHei: {0}", data[i, 2]);
  44. Console.WriteLine(" - satLat: {0}", data[i, 3]);
  45. Console.WriteLine(" - satLon: {0}", data[i, 4]);
  46. Console.WriteLine(" - satHei: {0}", data[i, 5]);
  47.  
  48. Console.WriteLine("Resultado:");
  49. Console.WriteLine(" - az: {0}",
  50. RadianToDegree(az));
  51. Console.WriteLine(" - elev: {0}",
  52. RadianToDegree(elev));
  53. }
  54.  
  55. Console.Read();
  56. }
  57. }
  58.  
  59. public class CalcAz {
  60. // altAnt = raio da terra
  61. public static void CalcAzEl(double latAnt, double longAnt, double altAnt, double latSat, double longSat, double altSat, out double az, out double elev) {
  62. Vector3D vectO = BuildPolVector(latAnt, longAnt, altAnt);
  63. Vector3D vectS = BuildPolVector(latSat, longSat, altSat);
  64.  
  65. Vector3D vectR = vectS - vectO;
  66.  
  67. //Como encontrar o U, E, N?
  68. UnitVector3D vectE = (BuildPolVector(latAnt, longAnt + 1, altAnt) - vectO).Normalize();
  69. UnitVector3D vectN = (BuildPolVector(latAnt + 1, longAnt, altAnt) - vectO).Normalize();
  70. //E - Lest N - Norte
  71. //U = vectO.normalize
  72. UnitVector3D vectRNorm = vectR.Normalize();
  73.  
  74. elev = Math.Asin(vectRNorm.DotProduct(vectO.Normalize()));
  75.  
  76. az = Math.Atan((vectRNorm.DotProduct(vectE)) / (vectRNorm.DotProduct(vectN)));
  77. }
  78.  
  79. private static Vector3D BuildPolVector(double longi, double lat, double alt) {
  80.  
  81. return new Vector3D(alt * Math.Sin(lat) * Math.Cos(longi),
  82. alt * Math.Sin(lat) * Math.Sin(longi),
  83. alt * Math.Sin(lat));
  84.  
  85. }
  86. }
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement