Skip to content

Instantly share code, notes, and snippets.

@akshayka
Created June 21, 2025 16:40
Show Gist options
  • Select an option

  • Save akshayka/e3b0ee70648d8723f0332244aae5e0ab to your computer and use it in GitHub Desktop.

Select an option

Save akshayka/e3b0ee70648d8723f0332244aae5e0ab to your computer and use it in GitHub Desktop.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.14.5/dist/favicon.ico" />
<!-- Preload is necessary because we show these images when we disconnect from the server,
but at that point we cannot load these images from the server -->
<link rel="preload" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.14.5/dist/assets/gradient-yHQUC_QB.png" as="image" />
<link rel="preload" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.14.5/dist/assets/noise-60BoTA8O.png" as="image" />
<!-- Preload the fonts -->
<link rel="preload" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.14.5/dist/assets/Lora-VariableFont_wght-B2ootaw-.ttf" as="font" crossorigin="anonymous" />
<link rel="preload" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.14.5/dist/assets/PTSans-Regular-CxL0S8W7.ttf" as="font" crossorigin="anonymous" />
<link rel="preload" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.14.5/dist/assets/PTSans-Bold-D9fedIX3.ttf" as="font" crossorigin="anonymous" />
<link rel="preload" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.14.5/dist/assets/FiraMono-Regular-BTCkDNvf.ttf" as="font" crossorigin="anonymous" />
<link rel="preload" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.14.5/dist/assets/FiraMono-Medium-DU3aDxX5.ttf" as="font" crossorigin="anonymous" />
<link rel="preload" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.14.5/dist/assets/FiraMono-Bold-CLVRCuM9.ttf" as="font" crossorigin="anonymous" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta name="description" content="a marimo app" />
<link rel="apple-touch-icon" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.14.5/dist/apple-touch-icon.png" />
<link rel="manifest" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.14.5/dist/manifest.json" />
<script data-marimo="true">
function __resizeIframe(obj) {
var scrollbarHeight = 20; // Max between windows, mac, and linux
function setHeight() {
var element = obj.contentWindow.document.documentElement;
// If there is no vertical scrollbar, we don't need to resize the iframe
if (element.scrollHeight === element.clientHeight) {
return;
}
// Create a new height that includes the scrollbar height if it's visible
var hasHorizontalScrollbar = element.scrollWidth > element.clientWidth;
var newHeight = element.scrollHeight + (hasHorizontalScrollbar ? scrollbarHeight : 0);
// Only update the height if it's different from the current height
if (obj.style.height !== `${newHeight}px`) {
obj.style.height = `${newHeight}px`;
}
}
// Resize the iframe to the height of the content and bottom scrollbar height
setHeight();
// Resize the iframe when the content changes
const resizeObserver = new ResizeObserver((entries) => {
setHeight();
});
resizeObserver.observe(obj.contentWindow.document.body);
}
</script>
<marimo-filename hidden>mo-3226.py</marimo-filename>
<title>mo-3226</title>
<script type="module" crossorigin crossorigin="anonymous" src="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.14.5/dist/assets/index-g8LxgBK2.js"></script>
<link rel="stylesheet" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.14.5/dist/assets/index-BVt8Dtzn.css">
<script data-marimo="true">
window.__MARIMO_STATIC__ = {};
window.__MARIMO_STATIC__.files = {};
</script>
</head>
<body>
<div id="root"></div>
<script data-marimo="true">
window.__MARIMO_MOUNT_CONFIG__ = {
"filename": "mo-3226.py",
"mode": "read",
"version": "0.14.5",
"serverToken": "static",
"config": {"completion": {"activate_on_typing": true, "copilot": false}, "display": {"cell_output": "above", "code_editor_font_size": 14, "custom_css": [], "dataframes": "rich", "default_table_page_size": 10, "default_width": "compact", "theme": "light"}, "formatting": {"line_length": 79}, "keymap": {"overrides": {}, "preset": "default"}, "language_servers": {"pylsp": {"enable_flake8": false, "enable_mypy": true, "enable_pydocstyle": false, "enable_pyflakes": false, "enable_pylint": false, "enable_ruff": true, "enabled": true}}, "package_management": {"manager": "uv"}, "runtime": {"auto_instantiate": true, "auto_reload": "off", "default_sql_output": "auto", "on_cell_change": "autorun", "output_max_bytes": 8000000, "reactive_tests": true, "std_stream_max_bytes": 1000000, "watcher_on_save": "lazy"}, "save": {"autosave": "after_delay", "autosave_delay": 1000, "format_on_save": false}, "server": {"browser": "default", "follow_symlink": false}, "snippets": {"custom_paths": [], "include_default_snippets": true}},
"configOverrides": {},
"appConfig": {"sql_output": "auto", "width": "medium"},
"view": {"showAppCode": true},
"notebook": {"cells": [{"code": "mo.md(\n r\"\"\"\n#Thrust Vectoring Analysis\n\nBased on a NASA report - [Optimal Pitch Thrust-Vector Angle and Benefits for all Flight Regimes](https://ntrs.nasa.gov/api/citations/20000034897/downloads/20000034897.pdf)\n\nUse JSBSim to compare how varying the thrust vector angle can minimize fuel burn for a given flight condition and compare the results to the NASA report.\n\nTests performed for a cruise condition and for a climb condition.\n\"\"\"\n)", "code_hash": "c1bfd22b2110bcdadf02fc623ff359ce", "config": {"column": null, "disabled": false, "hide_code": true}, "id": "Hbol", "name": "_"}, {"code": "import numpy as np\nimport matplotlib.pyplot as plt\nplt.plot([1, 2])\nplt.gca()", "code_hash": "28a1baf8fbd45fba0a4e4f3d35b90ca5", "config": {"column": null, "disabled": false, "hide_code": false}, "id": "MJUe", "name": "_"}, {"code": "import marimo as mo", "code_hash": "1d0db38904205bec4d6f6f6a1f6cec3e", "config": {"column": null, "disabled": false, "hide_code": false}, "id": "vblA", "name": "_"}], "metadata": {"marimo_version": "0.14.5"}, "version": "1"},
"session": {"cells": [{"code_hash": "28a1baf8fbd45fba0a4e4f3d35b90ca5", "console": [], "id": "MJUe", "outputs": [{"data": {"image/png": "data:image/png;base64,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"}, "type": "data"}]}, {"code_hash": "1d0db38904205bec4d6f6f6a1f6cec3e", "console": [], "id": "vblA", "outputs": [{"data": {"text/plain": ""}, "type": "data"}]}, {"code_hash": "c1bfd22b2110bcdadf02fc623ff359ce", "console": [], "id": "Hbol", "outputs": [{"data": {"text/html": "<span class=\"markdown prose dark:prose-invert\"><h1 id=\"thrust-vectoring-analysis\">Thrust Vectoring Analysis</h1>\n<span class=\"paragraph\">Based on a NASA report - <a href=\"https://ntrs.nasa.gov/api/citations/20000034897/downloads/20000034897.pdf\" rel=\"noopener\" target=\"_blank\">Optimal Pitch Thrust-Vector Angle and Benefits for all Flight Regimes</a></span>\n<span class=\"paragraph\">Use JSBSim to compare how varying the thrust vector angle can minimize fuel burn for a given flight condition and compare the results to the NASA report.</span>\n<span class=\"paragraph\">Tests performed for a cruise condition and for a climb condition.</span></span>"}, "type": "data"}]}], "metadata": {"marimo_version": "0.14.5"}, "version": "1"},
"runtimeConfig": null,
};
</script>
<marimo-code hidden="">
import%20marimo%0A%0A__generated_with%20%3D%20%220.14.5%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%20r%22%22%22%0A%20%20%20%20%23Thrust%20Vectoring%20Analysis%0A%0A%20%20%20%20Based%20on%20a%20NASA%20report%20-%20%5BOptimal%20Pitch%20Thrust-Vector%20Angle%20and%20Benefits%20for%20all%20Flight%20Regimes%5D(https%3A%2F%2Fntrs.nasa.gov%2Fapi%2Fcitations%2F20000034897%2Fdownloads%2F20000034897.pdf)%0A%0A%20%20%20%20Use%20JSBSim%20to%20compare%20how%20varying%20the%20thrust%20vector%20angle%20can%20minimize%20fuel%20burn%20for%20a%20given%20flight%20condition%20and%20compare%20the%20results%20to%20the%20NASA%20report.%0A%0A%20%20%20%20Tests%20performed%20for%20a%20cruise%20condition%20and%20for%20a%20climb%20condition.%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_()%3A%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20import%20matplotlib.pyplot%20as%20plt%0A%20%20%20%20plt.plot(%5B1%2C%202%5D)%0A%20%20%20%20plt.gca()%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20return%20(mo%2C)%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
</marimo-code>
<marimo-code-hash hidden="">ba31b7a4e136e0b5d79c31603ea280e9ff3d326401561bed4d269961b61988d0</marimo-code-hash>
</body>
</html>
import marimo
__generated_with = "0.14.0"
app = marimo.App(width="medium")
@app.cell(hide_code=True)
def _(mo):
mo.md(
r"""
#Thrust Vectoring Analysis
Based on a NASA report - [Optimal Pitch Thrust-Vector Angle and Benefits for all Flight Regimes](https://ntrs.nasa.gov/api/citations/20000034897/downloads/20000034897.pdf)
Use JSBSim to compare how varying the thrust vector angle can minimize fuel burn for a given flight condition and compare the results to the NASA report.
Tests performed for a cruise condition and for a climb condition.
"""
)
return
@app.cell
def _():
import numpy as np
import matplotlib.pyplot as plt
plt.plot([1, 2])
plt.gca()
return
@app.cell
def _():
import marimo as mo
return (mo,)
if __name__ == "__main__":
app.run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment