Fix issues in CG importing

This commit is contained in:
SiboVG 2023-04-01 19:53:46 +02:00
parent bd02f17f8f
commit 3ddb7b7844

View File

@ -384,9 +384,7 @@ public class SimulationHandler extends AbstractElementHandler {
AxialStage booster = rocket.getStage(1);
// Do a back-transform of the combined CG of the sustainer and booster1 to get the CG of booster1
Double CG = getCGFromCombinedCG(booster1CG, sustainerCG, sustainerLaunchWt, booster1LaunchWt - sustainerLaunchWt);
// ! this CG is relative to the front of the sustainer, we need it referenced to the front of the booster
CG = CG - booster.getPosition().x;
Double CG = getCGFromCombinedCG(sustainerLaunchWt, booster1LaunchWt - sustainerLaunchWt, sustainerCG, booster1CG);
/*
the above CG is the combined CG of booster1 and its motor (if present),
@ -394,6 +392,9 @@ public class SimulationHandler extends AbstractElementHandler {
*/
CG = getStageCGWithoutMotorCG(booster, CG, booster1Mount, booster1Engine, fcid);
// ! this CG is relative to the front of the sustainer, we need it referenced to the front of the booster
CG = CG - booster.getPosition().x;
booster.setCGOverridden(true);
booster.setSubcomponentsOverriddenCG(true);
booster.setOverrideCGX(CG);
@ -419,9 +420,7 @@ public class SimulationHandler extends AbstractElementHandler {
AxialStage booster = rocket.getStage(2);
// Do a back-transform of the combined CG of the sustainer, booster1, and booster2 to get the CG of booster2
Double CG = getCGFromCombinedCG(booster2CG, booster1CG, booster1LaunchWt, booster2LaunchWt - booster1LaunchWt);
// ! this CG is relative to the front of the sustainer, we need it referenced to the front of the booster
CG = CG - booster.getPosition().x;
Double CG = getCGFromCombinedCG(booster1LaunchWt, booster2LaunchWt - booster1LaunchWt, booster1CG, booster2CG);
/*
the above CG is the combined CG of booster2 and its motor (if present),
@ -429,6 +428,9 @@ public class SimulationHandler extends AbstractElementHandler {
*/
CG = getStageCGWithoutMotorCG(booster, CG, booster2Mount, booster2Engine, fcid);
// ! this CG is relative to the front of the sustainer, we need it referenced to the front of the booster
CG = CG - booster.getPosition().x;
booster.setCGOverridden(true);
booster.setSubcomponentsOverriddenCG(true);
booster.setOverrideCGX(CG);
@ -438,13 +440,13 @@ public class SimulationHandler extends AbstractElementHandler {
/**
* Return the CG of object B from the CG of object A, the combined CG of A and B, and the masses of A and B.
* @param combinedCG the combined CG of A and B
* @param objAMass the mass of object A (known CG)
* @param objBMass the mass of object B (unknown CG)
* @param objACG the CG of object A
* @param objAMass the mass of object A
* @param objBMass the mass of object B
* @param combinedCG the combined CG of A and B
* @return the CG of object B
*/
private Double getCGFromCombinedCG(Double combinedCG, Double objACG, Double objAMass, Double objBMass) {
private Double getCGFromCombinedCG(Double objAMass, Double objBMass, Double objACG, Double combinedCG) {
if (combinedCG == null || objACG == null || objAMass == null || objBMass == null) {
return combinedCG;
}
@ -470,15 +472,14 @@ public class SimulationHandler extends AbstractElementHandler {
Coordinate[] CGPoints = motor.getCGPoints();
if (CGPoints != null && CGPoints.length > 1) {
double mountLocationX = mount.getLocations()[0].x + mount.getLength(); // Bottom location of the mount
double motorLength = motor.getLength();
double motorPositionXRel = mount.getMotorPosition(fcid).x; // Motor position relative to the mount
double mountLocationX = mount.getLocations()[0].x;
double motorLocationX = mountLocationX + motorPositionXRel; // Front location of the motor
double motorCG = motorLocationX + CGPoints[0].x;
// RASAero assumes motor CG to be at half the motor length from the bottom of the parent
double motorCG = mountLocationX - motorLength / 2;
return combinedCG * (1 + motorMass / stageMass)
- motorCG * (motorMass / stageMass);
return getCGFromCombinedCG(motorMass, stageMass, motorCG, combinedCG);
}
return null;
return combinedCG;
}
}