Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ```cs
- void DrawPatchedConic() { Vector2[] points = new Vector2[conicSize];
- var min = (gObject.elements.eccentricity < 1) ? 0 : - OrbitalCalculator.AdvancedOrbital.turnAngle(gObject.elements.eccentricity); var max = (gObject.elements.eccentricity < 1) ? 2 * Mathf.PI : OrbitalCalculator.AdvancedOrbital.turnAngle(gObject.elements.eccentricity);
- for (int i = 1; i <= conicSize; i++) { var trueAnomaly = Mathf.Lerp(min, max, (float)i/(float)(conicSize)); var radius = OrbitalCalculator.OrbitalPoints.radiusFromTrueAnomaly(trueAnomaly, gObject.elements.eccentricity, gObject.elements.semiMajorAxis); points[i-1] = OrbitalCalculator.OrbitalPoints.PositionVectorFromTrueAnomaly(trueAnomaly, radius, gObject.elements.periapsisPosition) + gObject.telemetry.tryGetOrbitCenter.telemetry.currentPosition; }
- conicLine.ClearAllPoints(); conicLine.AddPoints(points);
- Draw.Polyline(conicLine, gObject.elements.eccentricity < 1, lineThickness, PolylineJoins.Simple, Color.grey); }
- ```
- ```cs
- public static float radiusFromTrueAnomaly(float trueAnomaly, float eccentricity, float semiMajorAxis) => (semiMajorAxis * (1 - Mathf.Pow(eccentricity, 2))) / (1 + eccentricity * Mathf.Cos(trueAnomaly));
- public static Vector2 PositionVectorFromTrueAnomaly(float trueAnomaly, float radius, Vector2 periapsisPosition) => Tools.RotateVector(periapsisPosition, trueAnomaly).normalized * radius;
- ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement