public Polar2d(Vector2d point) { Polar2d polar = CartesianToPolar(point); angle = polar.angle; radius = polar.radius; }
//--------------Static Functions----------------// /// <summary> /// the angle difference from angle1 to angle2 (in radians) /// </summary> /// <param name="angle1"></param> /// <param name="angle2"></param> /// <returns></returns> public static double Angle(double angle1, double angle2) { Polar2d angle1Pol = new Polar2d(1, angle1); Polar2d angle2Pol = new Polar2d(1, angle2); return(Vector2d.Angle(angle1Pol.cartesian, angle2Pol.cartesian) * Mathd.Deg2Rad); }
private Vector3d Position(double time) { if (orbit.sma == 0) { return(Vector3d.zero); } double parentMass; if (solarIndex.Count == 2) { parentMass = GameManager.instance.data.stars[solarIndex[0]].solar.mass; } else if (solarIndex.Count == 3) { parentMass = GameManager.instance.data.stars[solarIndex[0]].solar.satelites[solarIndex[1]].mass; } else { throw new System.Exception("parentMass not found."); } var ena = ENA(time, parentMass); var pos = new Vector3d(orbit.sma * (Mathd.Cos(ena) - orbit.ecc), orbit.sma * Mathd.Sqrt(1 - (orbit.ecc * orbit.ecc)) * Mathd.Sin(ena)); var pol = new Polar2d(pos); pol.angle += orbit.lpe; var pos2 = pol.cartesian; return(pos2); }
/// <summary> /// Converts Cartesian coords to polar coords with angle in radians /// </summary> /// <param name="point">Cartesian coordinate</param> /// <returns></returns> public static Polar2d CartesianToPolar(Vector2d point) { Polar2d polar; double angle = Mathd.Atan(point.y / point.x); if (point.x < 0) { angle += Mathd.PI; } else if (point.y < 0) { angle += Mathd.PI * 2; } polar = new Polar2d(point.magnitude, angle); return(polar); }
/// <summary> /// Creates x and y variable from polar coords /// </summary> /// <param name="polar">Polar coords</param> /// <returns></returns> public static Vector2d PolarToCartesian(Polar2d polar) { return(new Vector2d(polar.radius * Mathd.Cos(polar.angle), polar.radius * Mathd.Sin(polar.angle))); }