x2XcarleX2x commited on
Commit
7760b04
·
verified ·
1 Parent(s): 0c5d221

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +51 -1
app.py CHANGED
@@ -76,4 +76,54 @@ def motor_da_simulacao_infinita(angulo_camera: int):
76
  ax.set_xlim(-70, 70); ax.set_ylim(-70, 70); ax.set_zlim(-70, 70)
77
  ax.set_xticklabels([]); ax.set_yticklabels([]); ax.set_zticklabels([])
78
 
79
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
  ax.set_xlim(-70, 70); ax.set_ylim(-70, 70); ax.set_zlim(-70, 70)
77
  ax.set_xticklabels([]); ax.set_yticklabels([]); ax.set_zticklabels([])
78
 
79
+ # Desenha checkpoints e o rastro contínuo
80
+ ax.scatter(*ponto_a, s=150, c='lime', alpha=0.7)
81
+ ax.scatter(*ponto_b, s=150, c='red', marker='X', alpha=0.9)
82
+
83
+ rastro_np = np.array(historico_rastro)
84
+ # Desenha o rastro até o ponto atual da bola
85
+ indice_global_frame = len(historico_rastro) - len(x_ciclo) + frame
86
+ ax.plot(rastro_np[:indice_global_frame+1, 0], rastro_np[:indice_global_frame+1, 1], rastro_np[:indice_global_frame+1, 2], '-', color='#ff4500', linewidth=4, alpha=0.6)
87
+
88
+ # Desenha a bola na posição atual
89
+ ax.plot([x_ciclo[frame]], [y_ciclo[frame]], [z_ciclo[frame]], 'o', color='#ff4500', markersize=8, markeredgecolor='white')
90
+
91
+ # Informações na tela
92
+ info_texto = f"Ciclo: {ciclo_num}\nAlvo: {np.round(ponto_b, 1)}"
93
+ ax.text2D(0.05, 0.95, info_texto, transform=ax.transAxes, color='white', fontsize=10)
94
+
95
+ # Envia o frame atual para a UI
96
+ yield fig
97
+ time.sleep(0.02) # Pequena pausa para controlar a velocidade
98
+
99
+ # Prepara para o próximo ciclo
100
+ ponto_a = ponto_b
101
+
102
+ plt.close(fig) # Este código nunca será alcançado, mas é uma boa prática
103
+
104
+ # --- Interface Gradio ---
105
+
106
+ with gr.Blocks(theme=gr.themes.Base(primary_hue="orange")) as demo:
107
+ gr.Markdown(
108
+ """
109
+ # ♾️ Simulador Autônomo 3D de Convergência
110
+ Clique em "Iniciar" para dar partida no motor da simulação. O agente (bola) irá navegar
111
+ autonomamente pelo espaço, gerando novos alvos aleatórios em um loop infinito e deixando um rastro contínuo.
112
+ **Para parar, simplesmente recarregue a página.**
113
+ """
114
+ )
115
+ with gr.Row():
116
+ with gr.Column(scale=1):
117
+ angulo_camera_slider = gr.Slider(-180, 180, value=45, label="Ângulo da Câmera")
118
+ start_btn = gr.Button("🚀 Iniciar Simulação Infinita", variant="primary")
119
+ with gr.Column(scale=2):
120
+ plot_output = gr.Plot(label="Visualização em Tempo Real")
121
+
122
+ start_btn.click(
123
+ fn=motor_da_simulacao_infinita,
124
+ inputs=[angulo_camera_slider],
125
+ outputs=[plot_output]
126
+ )
127
+
128
+ if __name__ == "__main__":
129
+ demo.launch()