///<summary> /// Gives only the trajectory segments which are specified by argument ///</summary> public TrajectorySegment[] GetTrajectorySegments(int lenght) { TrajectorySegment[] result = new TrajectorySegment[lenght]; GetTrajectory(lenght); for (int i = 0; i < lenght; i++) { result[i] = segments[i]; } return(result); }
public static TrajectorySegment CalculateTrajectorySegment(Vector2 position, Vector2 velocity) { TrajectorySegment result = new TrajectorySegment(); result.positions[0] = position + velocity / BattleTimeManager.frameRate; for (int i = 1; i < TrajectorySegment.lenght; i++) { velocity += Gravity.SampleGravityField(result.positions[i - 1]) / BattleTimeManager.frameRate; result.positions[i] = result.positions[i - 1] + velocity / BattleTimeManager.frameRate; } result.endVelocity = velocity; return(result); }
///<summary> /// Calculates another step of trajectory ///</summary> public void Step() { // Robi to na zasadzie: // 1. Wzięcia elementu z początku listy // 2. Obliczenia dla niego nowych wartości (odświeżenia) // 3. Dodanie go na koniec listy TrajectorySegment segmentToRefresh = firstSegment; segmentToRefresh = Orbiter.CalculateTrajectorySegment(segments[segments.Count - 1].lastPosition, segments[segments.Count - 1].endVelocity); segments.RemoveAt(0); segments.Add(segmentToRefresh); }