Nose cones, transitions and solids of revolution
In short
- What it models: the outer shape of nose cones and transitions (conical, ogive, elliptical, power, parabolic and Haack series), and the volume, center of mass, inertia and surface areas of each, solid or as a shell of given wall thickness.
- Sources: G. A. Crowell Sr., The Descriptive Geometry of Nose Cones (1996), and appendix A of the published OpenRocket technical documentation v13.05 (2013).
- How well it is validated: by analytic tests only, the first of four kinds of evidence. Filled shapes match closed forms to 1e-10 (relative), and independent high-precision integrals to 1e-12 on 22 noses and transitions; 20 walls match to 1e-10. Not compared with OpenRocket, weighed parts or a real flight.
- What it leaves out: OpenRocket’s documentation doesn’t say how it measures wall thickness. Measuring it radially instead of square to the surface changes wall volume by 1.4% on a cone three calibres (base diameters) long. Where a steep end is cut square to the axis, rather than following the wall’s inner corner as hpr does, the part gains up to 2.24% of wall mass in this page’s examples. The OpenRocket comparison (M2.2) is to check both.
Code and sources
Code: hpr_design::shapes (profiles) and hpr_design::solids (volume, centroid, moments, areas).
Sources:
- [CR] G. A. Crowell Sr., The Descriptive Geometry of Nose Cones (1996), pp. 1–6 and 12–14. Cited, not pinned: the only copy found is on a plain-http university mirror, and the reference library (ADR-002) pins over https. [TD] gives the same curves.
- [TD] S. Niskanen, OpenRocket technical documentation v13.05 (2013), appendix A, pp. 102–106,
pinned as
openrocket-techdoc-13.05. This is the published document, not the program’s source.
Profiles
A profile gives the outer radius r(x) at distance x aft of its forward end, 0 ≤ x ≤ L. Each
shape is a normalized curve g(ξ) with g(0) = 0 at the tip and g(1) = 1 at the base:
| shape | g(ξ) or y(x) | parameter | source |
|---|---|---|---|
| conical | ξ | none | [CR] p. 1; [TD] A.1 |
| ogive | y = √(ρ² − (x − ρ cos α)²) + ρ sin α, α = atan(R/L) − acos(√(L² + R²)/2ρ) | ρ/ρ_t ≥ R/L | [CR] p. 4 |
| elliptical | √(1 − (1 − ξ)²) | none | [TD] A.6 |
| power series | ξⁿ | 0 < n ≤ 1 | [CR] p. 2; [TD] A.8 |
| parabolic series | (2ξ − K′ξ²)/(2 − K′) | 0 ≤ K′ ≤ 1 | [CR] p. 5; [TD] A.7 |
| Haack series | √((θ − sin 2θ/2 + C sin³θ)/π), θ = acos(1 − 2ξ) | 0 ≤ C ≤ 2/3 | [CR] p. 6; [TD] A.9–A.10 |
- Ogive. The shape is Crowell’s secant ogive: an arc of radius
ρthrough the tip and the base rim, withρgiven as a multiple of the tangent radiusρ_t = (R² + L²)/2R.1is the tangent ogive, whose slope is zero at the base.- Values above 1 meet the base at an angle.
- Values below 1 bulge past
Rbefore the base. - The arc reaches the tip only while its center is not above the axis, which needs
ρ ≥ (L² + R²)/2L. - The center is computed on the chord’s perpendicular bisector and the height as
y = x(2x_c − x)/(√(ρ² − (x − x_c)²) − y_c), which avoids the cancellation near the tip of a slender ogive.
- OpenRocket’s ogive parameter is not adopted. [TD] contradicts itself about it:
- A.3 defines it as
κ = ρ_t/ρ. - A.4–A.5 describe the first
Lof a tangent ogive of lengthL/κ, which atL = 4,R = 1,κ = ½hasρ = 24.8, notρ_t/κ = 17.0. - The planned
.orkimporter (M3.1) must settle the mapping by running the OpenRocket jar.
- A.3 defines it as
- Haack. Monotone for
C ≤ 2/3, becaused(g²)/dθ = sin²θ (2 + 3C cos θ)/π.C = 0is the von Kármán (LD-Haack) ogive andC = 1/3the LV-Haack. [TD] limitsCto1/3in the program. - Two shapes without drag data. A Haack nose or widening transition above
C = 1/3, and a bulged secant ogive (arc radius below the tangent ogive’s), have no drag data faster than sound, so hpr’s drag buildup refuses them since M1.8b1. Their shapes, mass properties and center of pressure are unaffected, and a drag table stands in for the drag (Aerodynamics). - Blunt tips. The elliptical, power-series (
n < 1) and Haack slopes are infinite at the tip.n = 0(a flat cylinder) is rejected; model it as a tube and a bulkhead. - Errors in [CR]. Its prose says “greater than twice the length” for the bulged secant ogive,
against its own formula. Its ogive and ellipsoid areas are wrong, and the author marked them so.
Its elliptical formula measures
xfrom the base, and its ellipse CP ratio should read2L/3. hpr uses none of those.
Transitions
A transition runs from fore radius R_f to aft radius R_a over L.
- Orientation. The shape’s tip lies at the smaller end. Growing aft,
r = R_f + (R_a − R_f) g(x/L). A boattail is the mirror image,r = R_a + (R_f − R_a) g(1 − x/L). [TD] doesn’t say how a shrinking transition is oriented; this choice keeps both ends’ radii exact and the profile monotone (Loft lesson L49). - Clipped ([TD] §A.7): cut a whole nose cone of base radius
max(R_f, R_a)where its radius ismin(R_f, R_a), with the nose length chosen so the piece isLlong.- Shapes other than the ogive invert
gby bisection. - The ogive’s curve depends on its fineness, so the nose length is found by bisection too.
- Conical and tangent-ogive transitions are the same clipped or not; the test checks this to 1e-12.
- A clipped ogive with
ρ/ρ_t < 1is rejected: its profile isn’t monotone, so the cut is ambiguous.
- Shapes other than the ogive invert
Solids of revolution
Per unit density, with inner radius r_i (zero when filled):
V = π ∫ (y² − r_i²) dx x̄ = π ∫ x (y² − r_i²) dx / V
J_a = (π/2) ∫ (y⁴ − r_i⁴) dx J_t = π ∫ [(y⁴ − r_i⁴)/4 + x² (y² − r_i²)] dx − V x̄²
S = 2π ∫ y √(1 + y′²) dx A_p = 2 ∫ y dx, x_p = ∫ x y dx / ∫ y dx
Each slice is an annulus: (π/2)(y⁴ − r_i⁴) dx about the axis and (π/4)(y⁴ − r_i⁴) dx about its
diameter, moved to the reference plane by the parallel-axis theorem. S excludes the end faces.
- Numerics. Each half of the profile is integrated from its own end in
u = s², whereuis the normalized distance from that end. The substitution removes theu^(−1/2)singularity of a blunt tip’s surface integrand, and measuring from the end keeps the tip exact. The integrals usehpr_core::quadrature(Quadrature) at a relative tolerance of 1e-12. - Walls (ADR-006, component geometry and mass properties).
- A wall of thickness
tis the part of the solid withintof the outer surface, sotis measured normal to the surface, which is how molded and laid-up shells are made. - Its inner radius is the lower envelope of circles of radius
ton the profile:r_i(x) = max(0, min_{s ∈ [0, L], |s−x| ≤ t} [y(s) − √(t² − (x − s)²)]). The surface is the profile over its own length, ends included, with no extension past a cut end. - The envelope is exact for any continuous profile. A point above the lower half of some
surface point’s circle has the profile crossing its height closer than
t, so it is in the wall anyway. - Cut ends. Where the surface meets the end plane at an obtuse angle inside the wall (the
small end of a transition, the base of a bulged ogive), the rim’s circle rounds the wall’s
inner corner.
- A square cut would add a sliver of
t² (tan φ − φ)/2of section per unit rim length, withφthe surface’s angle to the axis: 3.1e-4t²at 7°. On steep ends it matters: a square-cut part is heavier than this model by 1.26% of wall mass for a 27→49 mm transition over 15 mm (56°), and by 2.24% for 20→37.3 mm over 10 mm (60°), both witht = 2 mm. The OpenRocket comparison (M2.2) should check how real parts and OpenRocket treat such ends. - The sliver grows without bound only as the end turns vertical. There, a square cut (made by
extending the surface along its tangent) closes the end with a disc of thickness
t. - The first version did extend along finite end tangents only. Its wall mass jumped by 8.3% between shapes whose end slopes rounded to finite and to infinite.
- A square cut would add a sliver of
- The minimum comes from a 32-point scan, a golden-section search, and the two end points, which the search only approaches from inside.
- The hollow is integrated separately. It is split where
r_ireaches zero and where the nearest surface point moves between the lateral surface and a rim, since both are kinks. - [TD] doesn’t say how OpenRocket measures thickness, and [CR] measures it radially. The two
differ by a factor
√(1 + y′²)in wall volume, 1.4% for a cone three calibres long. The OpenRocket comparison (M2.2) will measure OpenRocket’s choice.
- A wall of thickness
Verification
- Closed forms (
shapes::tests::nose_volumes_match_closed_forms, 1e-10 relative):- Every shape’s filled volume and centroid.
- Cone and ogive:
V,x̄,SandA_pfrom arc integrals. - Half spheroid:
x̄ = 5L/8, andSfor prolate and oblate cases. - Power series:
V = πR²L/(2n+1),x̄ = L(2n+1)/(2n+2), and the paraboloid’sS. - Power series and parabolic series:
A_pandx_ptoo; parabolic series by polynomial integrals. - Haack:
V = πR²L(½ + 3C/16)andx̄ = L(11 + 3C)/(2(8 + 3C)), integrated inθ. - Loft’s tangent-ogive value,
R = 0.04 m,L = 0.25 mgives6.7509e-4 m³(Loft lesson L91).
- mpmath references (
solids::tests::filled_solids_match_the_mpmath_references):- 22 noses and transitions of every family, in both directions, clipped and not.
- All seven quantities, to 1e-12 relative (worst measured 2.4e-14).
- Reference:
validation/fixtures/design/shape-integrals.json, fromvalidation/oracles/design/shapes.py(40-digit tanh-sinh on the defining formulas, Haack inθ, with no code shared with Rust). - These references alone check the wetted areas of the power series (
n ≠ ½) and parabolic series, both Haack areas, and the moments of inertia of the filled shapes.
- Walls against mpmath (
solids::tests::walls_match_the_mpmath_references):- 20 walls: 11 noses of every family, and 9 transitions both ways, including unclipped blunt ends and clipped ones.
- Volume, centroid and both moments to 1e-10 relative (worst measured 5.9e-12).
- Reference:
validation/fixtures/design/wall-integrals.json, fromvalidation/oracles/design/walls.py, which shares no code with Rust.- It finds the envelope from the roots of its derivative, bracketed from the window edges and solved by bisection.
- It splits the integrals at the kinks it finds, and requires every hollow integral’s error estimate below 1e-18.
- Reviews found three faults this test now pins:
- Blunt transition ends failed to converge, or were 5e-6 low, until the end points became candidates.
- Tangent extensions made wall mass jump with the end slope.
- The oracle itself first missed minima next to the window edge and left kinks unsplit.
- Walls by hand:
- A conical wall is the cone minus the same cone moved aft by
t/sin β: volume, centroid and both moments by hand, to 1e-9. A cone so thick that its hollow is 3.8 mm long matches the same formula to 1e-12 (a_nearly_filled_cone_matches_the_offset_cone). - A conical transition’s wall is the square-cut frustum shell less the fore rim’s sliver, in
polar coordinates about the rim: mass and centroid to 1e-10, sliver section to 1e-10
(
mass::tests::hollow_transition_and_freeform_fin_cg_are_exact_centroids). - A tangent-ogive wall is bounded by the concentric arc of radius
ρ − t: volume by hand, to 1e-10. - A tube matches the hollow-cylinder formulas.
- A wall thicker than the body fills it, and a thin wall’s volume tends to
S t.
- A conical wall is the cone minus the same cone moved aft by
- Profiles: each ends at
0andR, slopes match central differences, and parameters out of range are errors (Loft lesson L48).- Haack tips use
θ = 2 asin √ξand a Taylor series forθ − sin 2θ/2belowθ = 0.1, so the tip slope is+∞, never NaN. - Ogive radius ratios up to 1e12 give the cone. A power series at the minimum exponent, 0.05,
matches its closed-form volume as a nose and as transitions both ways
(
extreme_parameters_stay_accurate_or_fail_loudly). - Unknown fields in a shape or wall are rejected.
- Transitions hit both radii and are monotone both ways, clipped or not (Loft lesson L49); bulged ogives are excluded because their profile is deliberately not monotone.
- Power-series exponents below 0.05 are rejected. Blunter profiles approach a flat face the integrals can’t resolve, and unclipped transitions below about 0.038 fail to converge.
- Haack tips use