motor updates

This commit is contained in:
Sampo Niskanen 2012-01-23 19:03:24 +00:00
parent b5642117ce
commit 7eca17a372
6 changed files with 181 additions and 63 deletions

View File

@ -14,5 +14,5 @@ while echo "$1" | grep -q "^-" ; do
done done
java -cp bin/:lib/miglayout15-swing.jar:lib/jcommon-1.0.16.jar:lib/jfreechart-1.0.13.jar:lib/iText-5.0.2.jar:. $JAVAOPTS net.sf.openrocket.startup.Startup "$@" java -cp bin/:lib/miglayout15-swing.jar:lib/jcommon-1.0.16.jar:lib/jfreechart-1.0.13.jar:lib/iText-5.0.2.jar $JAVAOPTS net.sf.openrocket.startup.Startup "$@"

View File

@ -234,7 +234,15 @@ public class RockSimMotorLoader extends AbstractMotorLoader {
// Motor type // Motor type
str = attributes.get("Type"); str = attributes.get("Type");
type = Motor.Type.fromName(str); if ("single-use".equalsIgnoreCase(str)) {
type = Motor.Type.SINGLE;
} else if ("hybrid".equalsIgnoreCase(str)) {
type = Motor.Type.HYBRID;
} else if ("reloadable".equalsIgnoreCase(str)) {
type = Motor.Type.RELOAD;
} else {
type = Motor.Type.UNKNOWN;
}
// Calculate mass // Calculate mass
str = attributes.get("auto-calc-mass"); str = attributes.get("auto-calc-mass");
@ -352,6 +360,7 @@ public class RockSimMotorLoader extends AbstractMotorLoader {
if (!calculateCG) { if (!calculateCG) {
motorDigest.update(DataType.CG_PER_TIME, toArray(cg)); motorDigest.update(DataType.CG_PER_TIME, toArray(cg));
} }
// FIXME: Should this use CG_SPECIFIC ???
motorDigest.update(DataType.FORCE_PER_TIME, thrustArray); motorDigest.update(DataType.FORCE_PER_TIME, thrustArray);
final String digest = motorDigest.getDigest(); final String digest = motorDigest.getDigest();

View File

@ -23,20 +23,6 @@ public interface Motor {
this.description = description; this.description = description;
} }
public static Type fromName( String name ) {
if ( name == null ) {
return UNKNOWN;
}
if ("single-use".equalsIgnoreCase(name)) {
return SINGLE;
} else if ("hybrid".equalsIgnoreCase(name)) {
return HYBRID;
} else if ("reloadable".equalsIgnoreCase(name)) {
return RELOAD;
} else {
return UNKNOWN;
}
}
/** /**
* Return a short name of this motor type. * Return a short name of this motor type.
@ -134,16 +120,28 @@ public interface Motor {
public Coordinate getLaunchCG(); public Coordinate getLaunchCG();
public Coordinate getEmptyCG(); public Coordinate getEmptyCG();
/**
* Return an estimate of the burn time of this motor, or NaN if an estimate is unavailable.
*/
public double getBurnTimeEstimate(); public double getBurnTimeEstimate();
/**
* Return an estimate of the average thrust of this motor, or NaN if an estimate is unavailable.
*/
public double getAverageThrustEstimate(); public double getAverageThrustEstimate();
/**
* Return an estimate of the maximum thrust of this motor, or NaN if an estimate is unavailable.
*/
public double getMaxThrustEstimate(); public double getMaxThrustEstimate();
/**
* Return an estimate of the total impulse of this motor, or NaN if an estimate is unavailable.
*/
public double getTotalImpulseEstimate(); public double getTotalImpulseEstimate();
public double[] getTimePoints();
public double[] getThrustPoints();
public Coordinate[] getCGPoints();
} }

View File

@ -68,7 +68,23 @@ public class MotorDigest {
} }
public void update(DataType type, int... values) {
public void update(DataType type, double... values) {
int multiplier = type.getMultiplier();
int[] intValues = new int[values.length];
for (int i = 0; i < values.length; i++) {
double v = values[i];
v = next(v);
v *= multiplier;
v = next(v);
intValues[i] = (int) Math.round(v);
}
update(type, intValues);
}
private void update(DataType type, int... values) {
// Check for correct order // Check for correct order
if (lastOrder >= type.getOrder()) { if (lastOrder >= type.getOrder()) {
@ -91,23 +107,6 @@ public class MotorDigest {
} }
private void update(DataType type, int multiplier, double... values) {
int[] intValues = new int[values.length];
for (int i = 0; i < values.length; i++) {
double v = values[i];
v = next(v);
v *= multiplier;
v = next(v);
intValues[i] = (int) Math.round(v);
}
update(type, intValues);
}
public void update(DataType type, double... values) {
update(type, type.getMultiplier(), values);
}
private static double next(double v) { private static double next(double v) {
return v + Math.signum(v) * EPSILON; return v + Math.signum(v) * EPSILON;
} }
@ -138,7 +137,7 @@ public class MotorDigest {
* @param m the motor to digest * @param m the motor to digest
* @return the digest * @return the digest
*/ */
public static String digestMotor(Motor m) { public static String digestMotor(ThrustCurveMotor m) {
// Create the motor digest from data available in RASP files // Create the motor digest from data available in RASP files
MotorDigest motorDigest = new MotorDigest(); MotorDigest motorDigest = new MotorDigest();

View File

@ -0,0 +1,112 @@
package net.sf.openrocket.motor;
import net.sf.openrocket.util.BugException;
import net.sf.openrocket.util.Coordinate;
public class ThrustCurveMotorPlaceholder implements Motor {
private final Motor.Type type;
private final String manufacturer;
private final String designation;
private final double diameter;
private final double length;
private final String digest;
private final double delay;
private final double launchMass;
private final double emptyMass;
public ThrustCurveMotorPlaceholder(Type type, String manufacturer, String designation, double diameter, double length,
String digest, double delay, double launchMass, double emptyMass) {
this.type = type;
this.manufacturer = manufacturer;
this.designation = designation;
this.diameter = diameter;
this.length = length;
this.digest = digest;
this.delay = delay;
this.launchMass = launchMass;
this.emptyMass = emptyMass;
}
@Override
public Type getMotorType() {
return type;
}
public String getManufacturer() {
return manufacturer;
}
@Override
public String getDesignation() {
return designation;
}
@Override
public String getDesignation(double designationDelay) {
return designation + "-" + ThrustCurveMotor.getDelayString(designationDelay);
}
@Override
public String getDescription() {
return "";
}
@Override
public double getDiameter() {
return diameter;
}
@Override
public double getLength() {
return length;
}
@Override
public String getDigest() {
return digest;
}
public double getDelay() {
return delay;
}
@Override
public MotorInstance getInstance() {
throw new BugException("Called getInstance on PlaceholderMotor");
}
@Override
public Coordinate getLaunchCG() {
return new Coordinate(length / 2, 0, 0, launchMass);
}
@Override
public Coordinate getEmptyCG() {
return new Coordinate(length / 2, 0, 0, emptyMass);
}
@Override
public double getBurnTimeEstimate() {
return Double.NaN;
}
@Override
public double getAverageThrustEstimate() {
return Double.NaN;
}
@Override
public double getMaxThrustEstimate() {
return Double.NaN;
}
@Override
public double getTotalImpulseEstimate() {
return Double.NaN;
}
}