Long burn thrust to weight

The Rocketry Forum

Help Support The Rocketry Forum:

This site may earn a commission from merchant affiliate links, including eBay, Amazon, and others.
For those who might want to know, that ROT is based on limiting the CP shift to 1 caliber. More detail on this topic can be found in the document NAR Safety In Sport Rocketry (Training for RSO and Safety Check 2013), page 25

Yes. Under 14 deg AOA, caliber shift is less than 1, based on wind tunnel data. TAN(14) = 1/4, hence the 4X windspeed rule.

This ROT based on real data and the relevant parameter, ie velocity. I have no idea how a rule using thrust came in to being. Relic of the past. Let's not use it.
 
Some people say CG, others say CP. No one seems to have any science behind why. The only thing I can offer is to consider two points. The higher the top button, the straighter the rocket will be on the pad. However, as stated above, the lower the top button, the longer the rocket stays on the rail during initial thrust. Find the sweet spot. For most, the sweet spot ends up being somewhere around the top CR.

Heres a thought, where the lower rail button is may be more important. Once the top rail button exits the rail the only thing keeping the rocket straight is momentum. If it starts to turn into the wind the fins will push back the other way, but the rocket can only rotate around the lower button. If that button is above the CP it will try and correct the flight. If it is below the CP it will act in the wrong direction.
 
Front one close to the CG, if possible. Back one as far down as possible. If you think of it as a lever with a load balanced forward, it makes good sense.
 
Heres a thought, where the lower rail button is may be more important. Once the top rail button exits the rail the only thing keeping the rocket straight is momentum. If it starts to turn into the wind the fins will push back the other way, but the rocket can only rotate around the lower button. If that button is above the CP it will try and correct the flight. If it is below the CP it will act in the wrong direction.

This makes conceptual sense to me. Further CG is from pivot the more rotational inertia. Closer pivot is to CP the lower the rotational moment.

On the other hand widely spaced lugs straddling the CP would minimise rail torque and therefore rail drag.

A lug or button at the CG could be useful for a swing demonstration.

Several competing design principles, looks like.
 
I don't think so, as I rarely put lugs on my sims but rail length is still effective.

Well if you don't bother putting the data in then it cannot do the calculations for you...


Code:
[SIZE=2][COLOR=#3f7f5f][SIZE=2][COLOR=#3f7f5f]/*[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#3f7f5f][SIZE=2][COLOR=#3f7f5f]
* Calculate the effective launch rod length taking into account launch [U]lugs[/U].
* If no [U]lugs[/U] are found, assume a tower launcher of full length.
*/
[/COLOR][/SIZE][/COLOR][/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]double[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]length[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]this[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2].[/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]simulationConditions[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].getLaunchRodLength();
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]double[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]lugPosition[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = Double.[/SIZE][B][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]NaN[/COLOR][/SIZE][/COLOR][/SIZE][/I][/B][SIZE=2];
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]for[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] (RocketComponent [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]c[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] : [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]this[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2].[/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]configuration[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].getActiveComponents()) {
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]     if[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] ([/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]c[/COLOR][/SIZE][/COLOR][/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]instanceof[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] LaunchLug) {
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]        double[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e] pos[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]c[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].toAbsolute([/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] Coordinate([/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]c[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].getLength()))[0].[/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]x[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2];
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]        if[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] (Double.[I]isNaN[/I]([/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]lugPosition[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]) || [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]pos[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] > [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]lugPosition[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]) {
[/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]            lugPosition[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]pos[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2];[/SIZE]
[SIZE=2]        }
    }
}
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]if[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] (!Double.[I]isNaN[/I]([/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]lugPosition[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2])) {
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]    double[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]maxX[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = 0;
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]    for[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] (Coordinate [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]c[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] : [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]this[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2].[/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]configuration[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].getBounds()) {
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]        if[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] ([/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]c[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].[/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]x[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] > [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]maxX[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2])
[/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]            maxX[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]c[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].[/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]x[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2];[/SIZE]
[SIZE=2]    }
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]    if[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] ([/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]maxX[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] >= [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]lugPosition[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]) {
[/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]        length[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = Math.[I]max[/I](0, [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]length[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] - ([/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]maxX[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] - [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]lugPosition[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]));
    }
}
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]this[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2].[/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]effectiveLaunchRodLength[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]length[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2];[/SIZE]
 
Well if you don't bother putting the data in then it cannot do the calculations for you...


Code:
[SIZE=2][COLOR=#3f7f5f][SIZE=2][COLOR=#3f7f5f]/*[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#3f7f5f][SIZE=2][COLOR=#3f7f5f]
* Calculate the effective launch rod length taking into account launch [U]lugs[/U].
* If no [U]lugs[/U] are found, assume a tower launcher of full length.
*/
[/COLOR][/SIZE][/COLOR][/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]double[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]length[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]this[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2].[/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]simulationConditions[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].getLaunchRodLength();
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]double[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]lugPosition[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = Double.[/SIZE][B][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]NaN[/COLOR][/SIZE][/COLOR][/SIZE][/I][/B][SIZE=2];
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]for[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] (RocketComponent [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]c[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] : [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]this[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2].[/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]configuration[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].getActiveComponents()) {
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]     if[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] ([/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]c[/COLOR][/SIZE][/COLOR][/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]instanceof[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] LaunchLug) {
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]        double[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e] pos[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]c[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].toAbsolute([/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] Coordinate([/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]c[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].getLength()))[0].[/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]x[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2];
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]        if[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] (Double.[I]isNaN[/I]([/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]lugPosition[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]) || [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]pos[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] > [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]lugPosition[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]) {
[/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]            lugPosition[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]pos[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2];[/SIZE]
[SIZE=2]        }
    }
}
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]if[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] (!Double.[I]isNaN[/I]([/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]lugPosition[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2])) {
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]    double[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]maxX[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = 0;
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]    for[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] (Coordinate [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]c[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] : [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]this[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2].[/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]configuration[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].getBounds()) {
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]        if[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] ([/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]c[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].[/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]x[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] > [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]maxX[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2])
[/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]            maxX[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]c[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].[/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]x[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2];[/SIZE]
[SIZE=2]    }
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]    if[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] ([/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]maxX[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] >= [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]lugPosition[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]) {
[/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]        length[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = Math.[I]max[/I](0, [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]length[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] - ([/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]maxX[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] - [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]lugPosition[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]));
    }
}
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]this[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2].[/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]effectiveLaunchRodLength[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]length[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2];[/SIZE]
Good to know OR can take a stab at this , thanks for the heads up. I use flyaways more often than anything else, but it's a useful tip to tuck away.
 
Last edited:
Well if you don't bother putting the data in then it cannot do the calculations for you...


Code:
[SIZE=2][COLOR=#3f7f5f][SIZE=2][COLOR=#3f7f5f]/*[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#3f7f5f][SIZE=2][COLOR=#3f7f5f]
* Calculate the effective launch rod length taking into account launch [U]lugs[/U].
* If no [U]lugs[/U] are found, assume a tower launcher of full length.
*/
[/COLOR][/SIZE][/COLOR][/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]double[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]length[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]this[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2].[/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]simulationConditions[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].getLaunchRodLength();
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]double[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]lugPosition[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = Double.[/SIZE][B][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]NaN[/COLOR][/SIZE][/COLOR][/SIZE][/I][/B][SIZE=2];
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]for[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] (RocketComponent [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]c[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] : [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]this[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2].[/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]configuration[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].getActiveComponents()) {
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]     if[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] ([/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]c[/COLOR][/SIZE][/COLOR][/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]instanceof[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] LaunchLug) {
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]        double[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e] pos[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]c[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].toAbsolute([/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] Coordinate([/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]c[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].getLength()))[0].[/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]x[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2];
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]        if[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] (Double.[I]isNaN[/I]([/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]lugPosition[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]) || [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]pos[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] > [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]lugPosition[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]) {
[/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]            lugPosition[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]pos[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2];[/SIZE]
[SIZE=2]        }
    }
}
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]if[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] (!Double.[I]isNaN[/I]([/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]lugPosition[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2])) {
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]    double[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]maxX[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = 0;
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]    for[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] (Coordinate [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]c[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] : [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]this[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2].[/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]configuration[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].getBounds()) {
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]        if[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] ([/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]c[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].[/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]x[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] > [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]maxX[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2])
[/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]            maxX[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]c[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].[/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]x[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2];[/SIZE]
[SIZE=2]    }
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]    if[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] ([/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]maxX[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] >= [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]lugPosition[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]) {
[/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]        length[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = Math.[I]max[/I](0, [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]length[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] - ([/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]maxX[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] - [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]lugPosition[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]));
    }
}
[/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]this[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2].[/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]effectiveLaunchRodLength[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = [/SIZE][SIZE=2][COLOR=#6a3e3e][SIZE=2][COLOR=#6a3e3e]length[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2];[/SIZE]

I'll check tonight to be sure, but this code looks right to me for launch lugs but wrong for rail buttons- it shortens the effective rail length by the distance between the lowest lug and the bottom of the rocket. For rail buttons though as you all have been discussing, once the top button leaves the rod you no longer have guidance from the rod(and possibly have inverted guidance which is fascinating!)

So to get openrocket to work for rail buttons you may only want to use the top button. Alternatively, this thread makes me wonder about using three buttons with the bottom two pretty close together. Hmm.
 
Alternatively, this thread makes me wonder about using three buttons with the bottom two pretty close together. Hmm.

I've been saying this is the proper thing to do for years.
However too many people think it's impossible to drill three holes in a line.....so be careful ;-)
 
Alternatively, this thread makes me wonder about using three buttons with the bottom two pretty close together. Hmm.

I've been saying this is the proper thing to do for years.
However too many people think it's impossible to drill three holes in a line.....so be careful ;-)

Fred, I agree. I have three buttons on a couple rockets. Sure, it take a little more work, but is the best solution for certain situations.


Sent from my iPhone using Rocketry Forum
 
Back
Top