static int Main(string[] args) { if (args.Length != 10) { Console.WriteLine(UsageText); return(1); } // Validate and parse command line arguments. double lat1 = ParseNumber("lat1", args[0]); double lon1 = ParseNumber("lon1", args[1]); double elv1 = ParseNumber("elv1", args[2]); double az1 = ParseNumber("az1", args[3]); double alt1 = ParseNumber("alt1", args[4]); double lat2 = ParseNumber("lat2", args[5]); double lon2 = ParseNumber("lon2", args[6]); double elv2 = ParseNumber("elv2", args[7]); double az2 = ParseNumber("az2", args[8]); double alt2 = ParseNumber("alt2", args[9]); var obs1 = new Observer(lat1, lon1, elv1); var obs2 = new Observer(lat2, lon2, elv2); // Use an arbitrary but consistent time for the Earth's rotation. AstroTime time = new AstroTime(0.0); // Convert geographic coordinates of the observers to vectors. AstroVector pos1 = Astronomy.ObserverVector(time, obs1, EquatorEpoch.OfDate); AstroVector pos2 = Astronomy.ObserverVector(time, obs2, EquatorEpoch.OfDate); // Convert horizontal coordinates into unit direction vectors. AstroVector dir1 = DirectionVector(time, obs1, alt1, az1); AstroVector dir2 = DirectionVector(time, obs2, alt2, az2); // Find the closest point between the skew lines. return(Intersect(pos1, dir1, pos2, dir2)); }