00001 /* -*- Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- */ 00002 /* 00003 * Copyright (c) 1999 Regents of the University of California. 00004 * All rights reserved. 00005 * 00006 * Redistribution and use in source and binary forms, with or without 00007 * modification, are permitted provided that the following conditions 00008 * are met: 00009 * 1. Redistributions of source code must retain the above copyright 00010 * notice, this list of conditions and the following disclaimer. 00011 * 2. Redistributions in binary form must reproduce the above copyright 00012 * notice, this list of conditions and the following disclaimer in the 00013 * documentation and/or other materials provided with the distribution. 00014 * 3. All advertising materials mentioning features or use of this software 00015 * must display the following acknowledgement: 00016 * This product includes software developed by the MASH Research 00017 * Group at the University of California Berkeley. 00018 * 4. Neither the name of the University nor of the Research Group may be 00019 * used to endorse or promote products derived from this software without 00020 * specific prior written permission. 00021 * 00022 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 00023 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00024 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00025 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 00026 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 00027 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 00028 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 00029 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 00030 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 00031 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 00032 * SUCH DAMAGE. 00033 * 00034 * @(#) $ 00035 * 00036 * Contributed by Tom Henderson, UCB Daedalus Research Group, June 1999 00037 */ 00038 00039 #ifndef __ns_sat_geometry_h__ 00040 #define __ns_sat_geometry_h__ 00041 00042 #include <math.h> 00043 #include <trace.h> 00044 #include "object.h" 00045 00046 // Various constants 00047 #define PI 3.1415926535897 00048 #define MU 398601.2 // Greek Mu (km^3/s^2) 00049 #define LIGHT 299793 // km/s 00050 #define EARTH_PERIOD 86164 // seconds 00051 #define EARTH_RADIUS 6378 // km 00052 #define GEO_ALTITUDE 35786 // km 00053 #define ATMOS_MARGIN 150 // km 00054 00055 #define DEG_TO_RAD(x) ((x) * PI/180) 00056 #define RAD_TO_DEG(x) ((x) * 180/PI) 00057 #define DISTANCE(s_x, s_y, s_z, e_x, e_y, e_z) (sqrt((s_x - e_x) * (s_x - e_x) \ 00058 + (s_y - e_y) * (s_y - e_y) + (s_z - e_z) * (s_z - e_z))) 00059 00060 struct coordinate { 00061 double r; // km 00062 double theta; // radians 00063 double phi; // radians 00064 // Convert to cartesian as follows: 00065 // x = rsin(theta)cos(phi) 00066 // y = rsin(theta)sin(phi) 00067 // z = rcos(theta) 00068 }; 00069 00070 // Library of routines involving satellite geometry 00071 class SatGeometry : public TclObject { 00072 public: 00073 SatGeometry() { printf("Started\n");} 00074 static double distance(coordinate, coordinate); 00075 static void spherical_to_cartesian(double, double, double, 00076 double &, double &, double &); 00077 static double propdelay(coordinate, coordinate); 00078 static double get_latitude(coordinate); 00079 static double get_longitude(coordinate); 00080 static double get_radius(coordinate a) { return a.r; } 00081 static double get_altitude(coordinate); 00082 static double check_elevation(coordinate, coordinate, double); 00083 static int are_satellites_mutually_visible(coordinate, coordinate); 00084 00085 protected: 00086 // Define "command" appropriately if you want OTcl access to this class 00087 int command(/*int argc, const char*const* argv */) { return 0; } 00088 }; 00089 00090 #endif // __ns_sat_geometry_h__