Source code for aerosandbox.geometry.nosecone_shapes.haack

import aerosandbox.numpy as np


[docs]def haack_series( x_over_L: np.ndarray, C=1 / 3 ): theta = np.arccos(1 - 2 * x_over_L) radius = (( theta - np.sin(2 * theta) / 2 + C * np.sin(theta) ** 3 ) / np.pi) ** 0.5 return radius
[docs]def karman( x_over_L: np.ndarray, ): return haack_series( x_over_L=x_over_L, C=0 )
[docs]def LV_haack( x_over_L: np.ndarray, ): return haack_series( x_over_L=x_over_L, C=1 / 3 )
[docs]def tangent( x_over_L: np.ndarray, ): return haack_series( x_over_L=x_over_L, C=2 / 3 )
if __name__ == '__main__': import matplotlib.pyplot as plt import aerosandbox.tools.pretty_plots as p fig, ax = plt.subplots()
[docs] x_over_L = np.cosspace(0, 1, 2000)
FR = 3 plt.plot(x_over_L * FR, karman(x_over_L), label="$C=0$ (LD-Haack, Karman)") plt.plot(x_over_L * FR, LV_haack(x_over_L), label="$C=1/3$ (LV-Haack)") plt.plot(x_over_L * FR, tangent(x_over_L), label="$C=2/3$ (Tangent)") p.equal() p.show_plot( f"Nosecone Haack Series\nFineness Ratio $FR = {FR}$", "Length $x$", "Radius $r$" )