bug fixes
[debian/openrocket] / src / net / sf / openrocket / simulation / BasicLandingStepper.java
index 0af17121516c476316eb3598816bb352558ce079..dc67e85375c60cdc8c2e15d1937f433c8db999ec 100644 (file)
@@ -4,14 +4,14 @@ import net.sf.openrocket.models.atmosphere.AtmosphericConditions;
 import net.sf.openrocket.rocketcomponent.RecoveryDevice;
 import net.sf.openrocket.simulation.exception.SimulationException;
 import net.sf.openrocket.util.Coordinate;
+import net.sf.openrocket.util.GeodeticComputationStrategy;
 import net.sf.openrocket.util.MathUtil;
+import net.sf.openrocket.util.WorldCoordinate;
 
 public class BasicLandingStepper extends AbstractSimulationStepper {
        
        private static final double RECOVERY_TIME_STEP = 0.5;
        
-       // FIXME:  Add lat/lon code here as well
-       
        @Override
        public SimulationStatus initialize(SimulationStatus status) throws SimulationException {
                return status;
@@ -55,6 +55,13 @@ public class BasicLandingStepper extends AbstractSimulationStepper {
                linearAcceleration = linearAcceleration.sub(0, 0, gravity);
                
 
+               // Add coriolis acceleration
+               Coordinate coriolisAcceleration = status.getSimulationConditions().getGeodeticComputation().getCoriolisAcceleration(
+                               status.getRocketWorldPosition(), status.getRocketVelocity());
+               linearAcceleration = linearAcceleration.add(coriolisAcceleration);
+               
+
+
                // Select time step
                double timeStep = MathUtil.min(0.5 / linearAcceleration.length(), RECOVERY_TIME_STEP);
                
@@ -65,6 +72,12 @@ public class BasicLandingStepper extends AbstractSimulationStepper {
                status.setSimulationTime(status.getSimulationTime() + timeStep);
                
 
+               // Update the world coordinate
+               WorldCoordinate w = status.getSimulationConditions().getLaunchSite();
+               w = status.getSimulationConditions().getGeodeticComputation().addCoordinate(w, status.getRocketPosition());
+               status.setRocketWorldPosition(w);
+               
+
                // Store data
                FlightDataBranch data = status.getFlightData();
                boolean extra = status.getSimulationConditions().isCalculateExtras();
@@ -93,6 +106,14 @@ public class BasicLandingStepper extends AbstractSimulationStepper {
                        data.setValue(FlightDataType.TYPE_REYNOLDS_NUMBER, Re);
                }
                
+
+               data.setValue(FlightDataType.TYPE_LATITUDE, status.getRocketWorldPosition().getLatitudeRad());
+               data.setValue(FlightDataType.TYPE_LONGITUDE, status.getRocketWorldPosition().getLongitudeRad());
+               if (status.getSimulationConditions().getGeodeticComputation() != GeodeticComputationStrategy.FLAT) {
+                       data.setValue(FlightDataType.TYPE_CORIOLIS_ACCELERATION, coriolisAcceleration.length());
+               }
+               
+
                data.setValue(FlightDataType.TYPE_VELOCITY_Z, status.getRocketVelocity().z);
                data.setValue(FlightDataType.TYPE_ACCELERATION_Z, linearAcceleration.z);