import%20marimo%0A%0A__generated_with%20%3D%20%220.13.15%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20rf%22%22%22%0A%20%20%20%20%23%20Aircraft%20Carrier%20Flight%20Path%20Angles%0A%0A%20%20%20%20From%20the%20%5BLSO%20NATOPS%20manual%5D(%5Bhttps%3A%2F%2Fwww.navyair.com%2FLSO_NATOPS_Manual.pdf%5D(https%3A%2F%2Finfo.publicintelligence.net%2FLSO-NATOPS-MAY09.pdf)).%0A%0A%20%20%20%20%23%23%23%204.2.7%20%20Effective%20Glideslope%20Due%20to%20Wind%20and%20Deck%20Motion%0A%0A%20%20%20%20The%20glideslope%20angle%2C%20referred%20to%20as%0A%20%20%20%20the%20basic%20angle%20aboard%20ship%2C%20is%20the%20fixed%20pitch%20angle%0A%20%20%20%20around%20which%20the%20lens%20assembly%20stabilizes.%20A%20basic%0A%20%20%20%20angle%20setting%20of%203.5%C2%B0%20is%20most%20commonly%20used%2C%20with%204%C2%B0%0A%20%20%20%20used%20for%20higher%20wind-over-deck%20conditions%20(38%2B%20knots)%0A%20%20%20%20or%20on%20the%20small%20decks%20when%20hook-to-ramp%20clearance%20is%0A%20%20%20%20near%20the%2010-foot%20minimum.%20In%20moderate%20wind-over-deck%0A%20%20%20%20conditions%20(32%20to%2037%20knots)%2C%20a%203.75%C2%B0%20basic%20angle%20may%20be%0A%20%20%20%20desirable.%20In%20Figure%204-7%2C%20note%20that%20decreased%20closure%20rate%0A%20%20%20%20of%20aircraft%20to%20ship%20caused%20by%20wind-over-deck%20reduces%20the%0A%20%20%20%20actual%20glideslope%20flown%20(effective%20glideslope).%0A%0A%20%20%20%20Wind%20Over%20Deck%20(kts)%20%7C%20Basic%20Angle%20(degrees)%20%7C%20Effective%20Glideslope*%0A%20%20%20%20%3A------%3A%20%7C%20%3A------%3A%20%7C%20%3A------%3A%0A%20%20%20%2035%20%20%20%20%20%20%20%7C%204%20%20%20%20%20%20%7C%203.2%0A%20%20%20%2030%20%20%20%20%20%20%20%7C%203.5%20%20%20%20%7C%202.8%0A%20%20%20%20*Based%20on%20a%20130kt%20approach%20speed%0A%0A%20%20%20%20%7Bmo.image(%22public%2FCarrierFlightPath%2FFig4.7-GlideSlope-vs-RHW.png%22)%7D%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20rf%22%22%22%0A%20%20%20%20%23%23%23%20Calculating%20Effective%20Glideslope%2FFlight%20Path%20Angle%0A%0A%20%20%20%20Given%20the%20glideslope%20angle%20(Basic%20Angle)%20of%20the%20meatball%2C%20the%20approach%20speed%20of%20the%20aircraft%20and%20the%20wind%20over%20the%20deck%20based%20on%20the%20aircraft%20carrier's%20speed%20we%20need%20to%20calculate%20the%20flight%20path%20angle%20that%20the%20aircraft%20will%20follow%2C%20also%20known%20as%20the%20'effective%20glideslope'.%0A%0A%20%20%20%20Some%20simple%20trigonometry.%0A%0A%20%20%20%20%7Bmo.image('public%2FCarrierFlightPath%2FFlightPathTrig.png'%2C%20width%3D500)%7D%0A%0A%20%20%20%20%24%24%20h%20%3D%20AS%20tan(BA)%20%24%24%0A%0A%20%20%20%20%24%24%20%5Cgamma%20%3D%20atan(%5Cfrac%7B%7Bh%7D%7D%7B%7BWOD%20%2B%20AS%7D%7D)%20%24%24%0A%0A%20%20%20%20Some%20code%20to%20implement%20the%20flight%20path%20angle%20calculation%20and%20to%20compare%20the%20results%20across%20different%20glide%20slope%20angles%20with%20varying%20amounts%20of%20wind%20over%20the%20deck.%0A%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(math)%3A%0A%20%20%20%20def%20effectiveFlightPathAngle(glideslope_angle%2C%20approach_speed%2C%20wind_over_deck)%3A%0A%20%20%20%20%20%20%20%20h%20%3D%20approach_speed%20*%20math.tan(math.radians(glideslope_angle))%0A%20%20%20%20%20%20%20%20return%20math.degrees(math.atan(h%20%2F%20(wind_over_deck%20%2B%20approach_speed)))%0A%20%20%20%20return%20(effectiveFlightPathAngle%2C)%0A%0A%0A%40app.cell%0Adef%20_(effectiveFlightPathAngle)%3A%0A%20%20%20%20effectiveFlightPathAngle(4.0%2C%20130%2C%2035)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(effectiveFlightPathAngle)%3A%0A%20%20%20%20effectiveFlightPathAngle(3.5%2C%20130%2C%2030)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(effectiveFlightPathAngle%2C%20plt)%3A%0A%20%20%20%20def%20plotFPAvsWODGlideslopes()%3A%0A%20%20%20%20%20%20%20%20plt.figure()%0A%0A%20%20%20%20%20%20%20%20approach_speed%20%3D%20130%0A%20%20%20%20%20%20%20%20glide_slopes%20%3D%20%5B3.0%2C%203.5%2C%204.0%5D%0A%0A%20%20%20%20%20%20%20%20for%20glide_slope%20in%20glide_slopes%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20points%20%3D%20%5B%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20wod%20in%20range(0%2C%2051%2C%201)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20points.append((wod%2C%20effectiveFlightPathAngle(glide_slope%2C%20approach_speed%2C%20wod)))%0A%20%20%20%20%20%20%20%20%20%20%20%20wind_over_deck%2C%20gamma%20%3D%20zip(*points)%0A%20%20%20%20%20%20%20%20%20%20%20%20plt.plot(wind_over_deck%2C%20gamma%2C%20label%3Df'%7Bglide_slope%7D%C2%B0%20Glideslope')%0A%0A%20%20%20%20%20%20%20%20plt.xlabel('Wind%20Over%20Deck%20(kt)')%0A%20%20%20%20%20%20%20%20plt.ylabel('Flight%20Path%20Angle%20(deg)')%0A%20%20%20%20%20%20%20%20plt.legend()%0A%20%20%20%20%20%20%20%20plt.title('Flight%20Path%20Angle%20vs%20Wind%20Over%20Deck')%3B%0A%0A%20%20%20%20%20%20%20%20plt.show()%0A%0A%20%20%20%20plotFPAvsWODGlideslopes()%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(effectiveFlightPathAngle%2C%20plt)%3A%0A%20%20%20%20def%20plotFPAvsWODApproachSpeeds()%3A%0A%20%20%20%20%20%20%20%20plt.figure()%0A%0A%20%20%20%20%20%20%20%20approach_speeds%20%3D%20%5B110%2C%20130%2C%20150%5D%0A%20%20%20%20%20%20%20%20glide_slope%20%3D%203.5%0A%0A%20%20%20%20%20%20%20%20for%20approach_speed%20in%20approach_speeds%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20points%20%3D%20%5B%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20wod%20in%20range(0%2C%2051%2C%201)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20points.append((wod%2C%20effectiveFlightPathAngle(glide_slope%2C%20approach_speed%2C%20wod)))%0A%20%20%20%20%20%20%20%20%20%20%20%20wind_over_deck%2C%20gamma%20%3D%20zip(*points)%0A%20%20%20%20%20%20%20%20%20%20%20%20plt.plot(wind_over_deck%2C%20gamma%2C%20label%3Df'%7Bapproach_speed%7Dkt%20Approach%20Speed')%0A%0A%20%20%20%20%20%20%20%20plt.xlabel('Wind%20Over%20Deck%20(kt)')%0A%20%20%20%20%20%20%20%20plt.ylabel('Flight%20Path%20Angle%20(deg)')%0A%20%20%20%20%20%20%20%20plt.legend()%0A%20%20%20%20%20%20%20%20plt.title('Flight%20Path%20Angle%20vs%20Wind%20Over%20Deck')%3B%0A%0A%20%20%20%20%20%20%20%20plt.show()%0A%0A%20%20%20%20plotFPAvsWODApproachSpeeds()%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%0A%20%20%20%20import%20matplotlib.pyplot%20as%20plt%0A%20%20%20%20import%20math%0A%20%20%20%20return%20math%2C%20mo%2C%20plt%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
a31f6ed3b275bf76182a0eb35e832b9d78b87214ba522d4aded8587a70428127