import numpy as np
import matplotlib.pyplot as plt

# Geometria Preliminar do Casco do Saveiro 12m - Izana Sacramento
plt.figure(figsize=(12, 8))

# 1. Perfil Lateral (Sheer line, Quilha, Roda de Proa)
plt.subplot(2, 1, 1)
x = np.linspace(0, 12, 100)
# Linha do Convés (Sheer line)
sheer = 1.85 - 0.35 * np.sin(np.pi * x / 12) + 0.15 * (1 - x/12)**2
# Linha da Quilha (Keel profile)
keel = np.zeros_like(x)
for i, xi in enumerate(x):
    if xi < 1.5:
        # Roda de proa curva lançada
        keel[i] = 0.55 + 0.9 * (1.5 - xi)**1.8
    elif xi > 11.2:
        # Cadaste de popa subindo
        keel[i] = 1.05 - 0.4 * ((xi - 11.2)/0.8)**1.5
    else:
        # Quilha corrida com caimento suave para a ré (drag)
        keel[i] = 0.55 + 0.50 * ((xi - 1.5) / 9.7)

# Linha d'água (DWL) a 1.05m do ponto mais baixo
dwl_z = np.ones_like(x) * 1.05

plt.plot(x, sheer, 'b-', lw=2, label="Linha do Convés (Borda)")
plt.plot(x, keel, 'saddlebrown', lw=2.5, label="Linha da Quilha e Roda de Proa")
plt.plot(x, dwl_z, 'c--', lw=1.5, label="Linha d'Água de Projeto (DWL)")
plt.fill_between(x, keel, dwl_z, where=(keel<=dwl_z), color='skyblue', alpha=0.3, label="Volume Submerso")

# Mastro e Gurupés ilustrativos
plt.plot([4.2, 4.0], [1.7, 13.5], 'k-', lw=3, label="Mastro (~12 m)")
plt.plot([0.3, -2.5], [1.75, 2.0], 'k-', lw=2, label="Gurupés de Proa (~2,8 m)")

plt.title("Saveiro Tradicional 12m - Izana Sacramento | Perfil Longitudinal", fontsize=12, fontweight='bold')
plt.xlabel("Comprimento (m)")
plt.ylabel("Altura / Cota Z (m)")
plt.grid(True, linestyle=':', alpha=0.6)
plt.legend(loc='upper right')
plt.gca().invert_yaxis() # Eixo Z tradicional na hidrostática ou visual padrão
plt.gca().invert_yaxis() # Restaurar normal para visualização intuitiva

# 2. Vista Superior (Plano de Flutuação / Boca)
plt.subplot(2, 1, 2)
# Boca na linha do convés
half_breadth_deck = 1.80 * np.sin(np.pi * (x / 12)**0.8) * (1 - 0.15*(x/12)**3)
# Boca na DWL
half_breadth_dwl = 1.65 * np.sin(np.pi * (np.clip(x-0.8, 0, 10.4)/10.4)**0.75)

plt.plot(x, half_breadth_deck, 'b-', lw=2, label="Meia-Boca no Convés (Deck)")
plt.plot(x, -half_breadth_deck, 'b-', lw=2)
plt.plot(x, half_breadth_dwl, 'c--', lw=1.5, label="Meia-Boca na Linha d'Água (DWL)")
plt.plot(x, -half_breadth_dwl, 'c--', lw=1.5)
plt.fill_between(x, -half_breadth_deck, half_breadth_deck, color='tan', alpha=0.25)

plt.title("Plano de Linhas d'Água (Vista Superior)", fontsize=12, fontweight='bold')
plt.xlabel("Comprimento (m)")
plt.ylabel("Meia-Boca Y (m)")
plt.axis('equal')
plt.grid(True, linestyle=':', alpha=0.6)
plt.legend(loc='lower right')

plt.tight_layout()
plt.savefig("/home/magdalena/eee/alunos/izana-sacramento/perfil_e_linhas_saveiro.png", dpi=300)
print("Gráfico gerado com sucesso.")
