Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using MathNet.Spatial.Euclidean;
- using System;
- namespace ConsoleApp1 {
- class Program {
- static double DegreeToRadian(double angle) {
- return Math.PI * angle / 180.0;
- }
- static double RadianToDegree(double angle) {
- return angle * (180.0 / Math.PI);
- }
- static void Main(string[] args) {
- double[,] data = {
- {
- -18.9689, // earthLat
- -49.465, // earthLon
- 6378, // earthHei
- -27.14, // satLat
- 105.39, // satLon
- 6801.91, // satHei
- // Az: ~ 151.45
- // Elev: ~ -62.8
- },
- };
- for(int i = 0; i < data.GetLength(0); i++) {
- CalcAz.CalcAzEl(
- DegreeToRadian(data[i, 0]),
- DegreeToRadian(data[i, 1]),
- DegreeToRadian(data[i, 2]),
- DegreeToRadian(data[i, 3]),
- DegreeToRadian(data[i, 4]),
- DegreeToRadian(data[i, 5]),
- out double az, out double elev);
- Console.WriteLine("Modelo:");
- Console.WriteLine(" - earthLat: {0}", data[i, 0]);
- Console.WriteLine(" - earthLon: {0}", data[i, 1]);
- Console.WriteLine(" - earthHei: {0}", data[i, 2]);
- Console.WriteLine(" - satLat: {0}", data[i, 3]);
- Console.WriteLine(" - satLon: {0}", data[i, 4]);
- Console.WriteLine(" - satHei: {0}", data[i, 5]);
- Console.WriteLine("Resultado:");
- Console.WriteLine(" - az: {0}",
- RadianToDegree(az));
- Console.WriteLine(" - elev: {0}",
- RadianToDegree(elev));
- }
- Console.Read();
- }
- }
- public class CalcAz {
- // altAnt = raio da terra
- public static void CalcAzEl(double latAnt, double longAnt, double altAnt, double latSat, double longSat, double altSat, out double az, out double elev) {
- Vector3D vectO = BuildPolVector(latAnt, longAnt, altAnt);
- Vector3D vectS = BuildPolVector(latSat, longSat, altSat);
- Vector3D vectR = vectS - vectO;
- //Como encontrar o U, E, N?
- UnitVector3D vectE = (BuildPolVector(latAnt, longAnt + 1, altAnt) - vectO).Normalize();
- UnitVector3D vectN = (BuildPolVector(latAnt + 1, longAnt, altAnt) - vectO).Normalize();
- //E - Lest N - Norte
- //U = vectO.normalize
- UnitVector3D vectRNorm = vectR.Normalize();
- elev = Math.Asin(vectRNorm.DotProduct(vectO.Normalize()));
- az = Math.Atan((vectRNorm.DotProduct(vectE)) / (vectRNorm.DotProduct(vectN)));
- }
- private static Vector3D BuildPolVector(double longi, double lat, double alt) {
- return new Vector3D(alt * Math.Sin(lat) * Math.Cos(longi),
- alt * Math.Sin(lat) * Math.Sin(longi),
- alt * Math.Sin(lat));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement