Merge pull request #1765 from JoePfeiffer/fix-1728a
Improve sampling for SimulationRunDialog
This commit is contained in:
commit
f81d6c74ae
@ -49,9 +49,9 @@ import net.sf.openrocket.startup.Application;
|
||||
import net.sf.openrocket.unit.Unit;
|
||||
import net.sf.openrocket.unit.UnitGroup;
|
||||
import net.sf.openrocket.util.MathUtil;
|
||||
import net.sf.openrocket.util.Coordinate;
|
||||
import net.sf.openrocket.gui.widgets.SelectColorButton;
|
||||
|
||||
|
||||
public class SimulationRunDialog extends JDialog {
|
||||
private static final long serialVersionUID = -1593459321777026455L;
|
||||
private static final Logger log = LoggerFactory.getLogger(SimulationRunDialog.class);
|
||||
@ -270,6 +270,7 @@ public class SimulationRunDialog extends JDialog {
|
||||
private final int index;
|
||||
private final double burnoutTimeEstimate;
|
||||
private volatile double burnoutVelocity;
|
||||
private volatile double apogeeAltitude;
|
||||
|
||||
private final CustomExpressionSimulationListener exprListener;
|
||||
|
||||
@ -328,10 +329,11 @@ public class SimulationRunDialog extends JDialog {
|
||||
// in order to calculate things like optimal coast time, we'll keep updating max altitude
|
||||
// whenever we see that the rocket is going upwards. The last apogee found is the real one.
|
||||
for (SimulationStatus s : chunks) {
|
||||
if (s.getConfiguration().isStageActive(0) && (s.getRocketVelocity().z > 0)) {
|
||||
if (s.getConfiguration().isStageActive(0) &&
|
||||
((s.getRocketVelocity().z > 0) || (s.getRocketPosition().z > simulationMaxAltitude[index]))) {
|
||||
log.debug("updating simulationMaxAltitude[" + index + "] to " + s.getRocketPosition().z);
|
||||
simulationMaxAltitude[index] = s.getRocketPosition().z;
|
||||
simulationMaxVelocity[index] = Math.max(simulationMaxVelocity[index], s.getRocketVelocity().length());
|
||||
simulationMaxVelocity[index] = Math.max(simulationMaxVelocity[index], s.getRocketVelocity().z);
|
||||
}
|
||||
}
|
||||
|
||||
@ -367,14 +369,14 @@ public class SimulationRunDialog extends JDialog {
|
||||
// Past apogee, switch to landing
|
||||
if (simulationStage == -1 && status.getRocketVelocity().z < 0) {
|
||||
simulationStage++;
|
||||
log.debug("CHANGING to simulationStage " + simulationStage + ", apogee=" + simulationMaxAltitude[index]);
|
||||
apogeeAltitude = MathUtil.max(simulationMaxAltitude[index], 1);
|
||||
log.debug("CHANGING to simulationStage " + simulationStage + ", apogee=" + apogeeAltitude);
|
||||
}
|
||||
|
||||
// >= 0 Landing. z-position from apogee to zero
|
||||
// TODO: MEDIUM: several stages
|
||||
System.out.flush();
|
||||
log.debug("simulationStage landing (" + simulationStage + "): alt=" + status.getRocketPosition().z + " apogee=" + simulationMaxAltitude[index]);
|
||||
setSimulationProgress(MathUtil.map(status.getRocketPosition().z, simulationMaxAltitude[index], 0, APOGEE_PROGRESS, 1.0));
|
||||
log.debug("simulationStage landing (" + simulationStage + "): alt=" + status.getRocketPosition().z + " apogee=" + apogeeAltitude);
|
||||
setSimulationProgress(MathUtil.map(status.getRocketPosition().z, apogeeAltitude, 0, APOGEE_PROGRESS, 1.0));
|
||||
updateProgress();
|
||||
}
|
||||
|
||||
@ -449,16 +451,17 @@ public class SimulationRunDialog extends JDialog {
|
||||
switch (event.getType()) {
|
||||
case APOGEE:
|
||||
log.debug("APOGEE");
|
||||
publish(status);
|
||||
publish(new SimulationStatus(status));
|
||||
break;
|
||||
|
||||
case LAUNCH:
|
||||
publish(status);
|
||||
log.debug("LAUNCH");
|
||||
publish(new SimulationStatus(status));
|
||||
break;
|
||||
|
||||
case SIMULATION_END:
|
||||
log.debug("END");
|
||||
publish(status);
|
||||
publish(new SimulationStatus(status));
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -471,7 +474,7 @@ public class SimulationRunDialog extends JDialog {
|
||||
public void postStep(SimulationStatus status) {
|
||||
if (System.currentTimeMillis() >= time + UPDATE_MS) {
|
||||
time = System.currentTimeMillis();
|
||||
publish(status);
|
||||
publish(new SimulationStatus(status));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user