Introduce mesh.py, che costruisce una griglia strutturata di quadrilateri a 4 nodi sulla superficie media del cilindro, chiusa lungo la circonferenza, come base per la futura analisi FEM. plot_mesh.py la visualizza in vista isometrica e main.py raccoglie tutte le azioni del progetto dietro un unico punto di ingresso. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
60 lines
1.6 KiB
Python
60 lines
1.6 KiB
Python
# Visualizzazione della sola mesh a elementi shell della fascetta, in vista
|
||
# isometrica: facce chiare con i bordi degli elementi in evidenza.
|
||
|
||
from pathlib import Path
|
||
|
||
import matplotlib
|
||
import matplotlib.pyplot as plt
|
||
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
|
||
|
||
from mesh import genera_mesh, riepilogo_mesh
|
||
|
||
|
||
def main() -> None:
|
||
dati = genera_mesh()
|
||
print(riepilogo_mesh(dati))
|
||
|
||
nodi = dati["nodi"]
|
||
facce = nodi[dati["elementi"]]
|
||
|
||
raggio_m = dati["raggio_m"]
|
||
lunghezza_m = dati["lunghezza_m"]
|
||
|
||
fig = plt.figure(figsize=(9, 7))
|
||
ax = fig.add_subplot(projection="3d")
|
||
ax.view_init(elev=35.264, azim=45)
|
||
ax.set_box_aspect((lunghezza_m, 2 * raggio_m, 2 * raggio_m))
|
||
ax.set_axis_off()
|
||
|
||
collezione = Poly3DCollection(
|
||
facce,
|
||
facecolors="#d9e3f0",
|
||
edgecolors="#2b3a55",
|
||
linewidths=0.4,
|
||
shade=True,
|
||
lightsource=matplotlib.colors.LightSource(azdeg=315, altdeg=45),
|
||
)
|
||
ax.add_collection3d(collezione)
|
||
|
||
ax.set_xlim(0.0, lunghezza_m)
|
||
ax.set_ylim(-raggio_m, raggio_m)
|
||
ax.set_zlim(-raggio_m, raggio_m)
|
||
ax.set_title(
|
||
f"Mesh shell: {dati['n_elementi_x']} × "
|
||
f"{dati['n_elementi_circonferenza']} elementi quadrangolari"
|
||
)
|
||
|
||
if matplotlib.get_backend().lower() == "agg":
|
||
cartella = Path("dataset")
|
||
cartella.mkdir(parents=True, exist_ok=True)
|
||
percorso = cartella / "mesh.png"
|
||
fig.savefig(percorso, dpi=150)
|
||
print(f"Backend non interattivo: immagine salvata in {percorso}")
|
||
return
|
||
|
||
plt.show()
|
||
|
||
|
||
if __name__ == "__main__":
|
||
main()
|