Clamp beta to minimal value to avoid singularity

This commit is contained in:
SiboVG 2024-10-12 01:01:59 +02:00
parent a5eae08456
commit 7c53e6017b

View File

@ -22,6 +22,7 @@ import info.openrocket.core.util.ModID;
* @author Sampo Niskanen <sampo.niskanen@iki.fi> * @author Sampo Niskanen <sampo.niskanen@iki.fi>
*/ */
public class FlightConditions implements Cloneable, ChangeSource, Monitorable { public class FlightConditions implements Cloneable, ChangeSource, Monitorable {
private static final double MIN_BETA = 0.25;
private List<EventListener> listenerList = new ArrayList<>(); private List<EventListener> listenerList = new ArrayList<>();
private EventObject event = new EventObject(this); private EventObject event = new EventObject(this);
@ -291,13 +292,10 @@ public class FlightConditions implements Cloneable, ChangeSource, Monitorable {
* @return the beta value. * @return the beta value.
*/ */
private static double calculateBeta(double mach) { private static double calculateBeta(double mach) {
if (mach < 0.99999) { if (mach < 1) {
return MathUtil.safeSqrt(1 - mach * mach); return MathUtil.max(MIN_BETA, MathUtil.safeSqrt(1 - mach * mach));
} else if (mach < 1.00001) {
// Clamp to avoid singularity near Mach 1
return MathUtil.safeSqrt(1 - 0.99999 * 0.99999);
} else { } else {
return MathUtil.safeSqrt(mach * mach - 1); return MathUtil.max(MIN_BETA, MathUtil.safeSqrt(mach * mach - 1));
} }
} }