1 package net.sf.openrocket.util;
4 * A WorldCoordinate contains the latitude, longitude and altitude position of a rocket.
6 public class WorldCoordinate {
8 /** Mean Earth radius */
9 public static final double REARTH = 6371000.0;
10 /** Sidearial Earth rotation rate */
11 public static final double EROT = 7.2921150e-5;
14 private final double lat, lon, alt;
17 * Constructs a new WorldCoordinate
18 * @param lat latitude in degrees north. From -90 to 90, values outside are clamped.
19 * @param lon longitude in degrees east. From -180 to 180, values outside are reduced to the range.
20 * @param alt altitude in m. Unbounded.
22 public WorldCoordinate(double lat, double lon, double alt) {
23 this.lat = MathUtil.clamp(Math.toRadians(lat), -Math.PI / 2, Math.PI / 2);
24 this.lon = MathUtil.reduce180(Math.toRadians(lon));
30 public double getAltitude() {
35 * Returns Longitude in radians
37 public double getLongitudeRad() {
42 * Returns Longitude in degrees
44 public double getLongitudeDeg() {
45 return Math.toDegrees(this.lon);
49 * Returns latitude in radians
51 public double getLatitudeRad() {
56 * Returns latitude in degrees
58 public double getLatitudeDeg() {
59 return Math.toDegrees(this.lat);
64 public String toString() {
65 return "WorldCoordinate[lat=" + lat + ", lon=" + lon + ", alt=" + alt + "]";
71 public boolean equals(Object obj) {
72 if (!(obj instanceof WorldCoordinate)) {
75 WorldCoordinate other = (WorldCoordinate) obj;
76 return (MathUtil.equals(this.lat, other.lat) &&
77 MathUtil.equals(this.lon, other.lon) && MathUtil.equals(this.alt, other.alt));
81 public int hashCode() {
82 return ((int) (1000 * lat * lon * alt));