x2XcarleX2x commited on
Commit
7ee5c66
·
verified ·
1 Parent(s): 92286ff

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -24
app.py CHANGED
@@ -6,12 +6,13 @@ import math
6
  from scipy.special import comb
7
  import time
8
 
9
- # --- Funções Matemáticas (Inalteradas) ---
 
10
  def bernstein_poly(i, n, t):
11
  return comb(n, i) * (t**(i)) * ((1 - t)**(n - i))
12
 
13
- # --- MUDANÇA #1: VELOCIDADE AUMENTADA (Menos Vetores) ---
14
- def bezier_curve_3d(points, n_times=24): # De 60 para 40 vetores por ciclo
15
  n_points = len(points)
16
  x_points, y_points, z_points = np.array([p[0] for p in points]), np.array([p[1] for p in points]), np.array([p[2] for p in points])
17
  t = np.linspace(0.0, 1.0, n_times)
@@ -24,37 +25,38 @@ def aprender_com_o_eco_3d(pontos_do_eco: list):
24
  p1, p2 = np.array(pontos_do_eco[0]), np.array(pontos_do_eco[-1])
25
  return {"velocity_vector": p2 - p1}
26
 
27
- # --- Função Principal do Gradio (Motor de Alta Velocidade) ---
28
 
29
  def motor_da_simulacao_infinita(angulo_camera: int):
30
  """
31
- Motor da simulação que roda em um loop infinito, com um universo expandido
32
- e maior velocidade de movimento.
33
  """
34
- ponto_a = np.array([-40., 20., 10.])
35
- vetor_inercia = np.array([30., 90., -120.])
36
  historico_rastro = [ponto_a.tolist()]
37
 
38
- fig = plt.figure(figsize=(32, 32)); ax = fig.add_subplot(111, projection='3d')
39
  cor_fundo = '#0a0a0a'; fig.patch.set_facecolor(cor_fundo); ax.set_facecolor(cor_fundo)
40
 
41
  ciclo_num = 0
42
  while True:
43
  ciclo_num += 1
44
 
45
- # --- MUDANÇA #2: UNIVERSO EXPANDIDO (Alvos Mais Distantes) ---
46
- ponto_b = np.random.rand(3) * 240 - 80 # Agora de -100 a 100 em cada eixo
 
47
 
48
  ponto_controle = ponto_a + vetor_inercia
49
  pontos_curva = [ponto_a, ponto_controle, ponto_b]
50
- x_ciclo, y_ciclo, z_ciclo = bezier_curve_3d(pontos_curva) # Gera 40 vetores
51
 
52
  novos_pontos_rastro = list(zip(x_ciclo, y_ciclo, z_ciclo))
53
  historico_rastro.extend(novos_pontos_rastro)
54
- max_rastro = 8 # Rastro um pouco menor para dar sensação de velocidade
55
  historico_rastro = historico_rastro[-max_rastro:]
56
 
57
- tamanho_eco = 15
58
  pontos_eco = list(zip(x_ciclo[-tamanho_eco:], y_ciclo[-tamanho_eco:], z_ciclo[-tamanho_eco:]))
59
  vetor_inercia = aprender_com_o_eco_3d(pontos_eco)["velocity_vector"]
60
 
@@ -64,10 +66,10 @@ def motor_da_simulacao_infinita(angulo_camera: int):
64
  ax.cla()
65
  ax.xaxis.pane.fill = False; ax.yaxis.pane.fill = False; ax.zaxis.pane.fill = False
66
  ax.grid(color='#222222', linestyle='--')
67
- ax.view_init(elev=30., azim=angulo_camera + (len(historico_rastro) - len(x_ciclo) + frame) * 0.2) # Rotação de câmera um pouco mais rápida
68
 
69
- # --- MUDANÇA #2 (Continuação): Ajusta os limites do gráfico para o novo universo ---
70
- ax.set_xlim(-110, 110); ax.set_ylim(-110, 110); ax.set_zlim(-110, 110)
71
  ax.set_xticklabels([]); ax.set_yticklabels([]); ax.set_zticklabels([])
72
 
73
  ax.scatter(*ponto_a, s=150, c='lime', alpha=0.7)
@@ -82,25 +84,26 @@ def motor_da_simulacao_infinita(angulo_camera: int):
82
  ax.text2D(0.05, 0.95, info_texto, transform=ax.transAxes, color='white', fontsize=10)
83
 
84
  yield fig
85
- time.sleep(0.005)
 
86
 
87
  ponto_a = ponto_b
88
 
89
  plt.close(fig)
90
 
91
- # --- Interface Gradio (Inalterada) ---
92
- with gr.Blocks(theme=gr.themes.Base(primary_hue="yellow")) as demo:
93
  gr.Markdown(
94
  """
95
- # 🚀 Simulador Autônomo 3D (Alta Velocidade)
96
- Clique em "Iniciar" para dar partida no motor da simulação. O agente (bola) irá navegar
97
- em alta velocidade por um universo expandido, gerando novos alvos aleatórios em um loop infinito.
98
  """
99
  )
100
  with gr.Row():
101
  with gr.Column(scale=1):
102
  angulo_camera_slider = gr.Slider(-180, 180, value=45, label="Ângulo Inicial da Câmera")
103
- start_btn = gr.Button("🚀 Iniciar Simulação Infinita", variant="primary")
104
  with gr.Column(scale=2):
105
  plot_output = gr.Plot(label="Visualização em Tempo Real")
106
 
 
6
  from scipy.special import comb
7
  import time
8
 
9
+ # --- Funções Matemáticas ---
10
+
11
  def bernstein_poly(i, n, t):
12
  return comb(n, i) * (t**(i)) * ((1 - t)**(n - i))
13
 
14
+ # --- MUDANÇA #1: CICLOS ULTRA-RÁPIDOS (Menos Vetores) ---
15
+ def bezier_curve_3d(points, n_times=20): # Apenas 20 vetores por ciclo!
16
  n_points = len(points)
17
  x_points, y_points, z_points = np.array([p[0] for p in points]), np.array([p[1] for p in points]), np.array([p[2] for p in points])
18
  t = np.linspace(0.0, 1.0, n_times)
 
25
  p1, p2 = np.array(pontos_do_eco[0]), np.array(pontos_do_eco[-1])
26
  return {"velocity_vector": p2 - p1}
27
 
28
+ # --- Função Principal do Gradio (Motor Hyperdrive) ---
29
 
30
  def motor_da_simulacao_infinita(angulo_camera: int):
31
  """
32
+ Motor da simulação que roda em um loop infinito, com um universo compacto
33
+ e velocidade de movimento extrema.
34
  """
35
+ ponto_a = np.array([0., 0., 0.])
36
+ vetor_inercia = np.array([10., 10., 10.])
37
  historico_rastro = [ponto_a.tolist()]
38
 
39
+ fig = plt.figure(figsize=(8, 8)); ax = fig.add_subplot(111, projection='3d')
40
  cor_fundo = '#0a0a0a'; fig.patch.set_facecolor(cor_fundo); ax.set_facecolor(cor_fundo)
41
 
42
  ciclo_num = 0
43
  while True:
44
  ciclo_num += 1
45
 
46
+ # --- MUDANÇA #2: UNIVERSO COMPACTO ---
47
+ # Alvos aleatórios em um espaço de -25 a 25 (4x menor que o anterior)
48
+ ponto_b = np.random.rand(3) * 50 - 25
49
 
50
  ponto_controle = ponto_a + vetor_inercia
51
  pontos_curva = [ponto_a, ponto_controle, ponto_b]
52
+ x_ciclo, y_ciclo, z_ciclo = bezier_curve_3d(pontos_curva)
53
 
54
  novos_pontos_rastro = list(zip(x_ciclo, y_ciclo, z_ciclo))
55
  historico_rastro.extend(novos_pontos_rastro)
56
+ max_rastro = 150 # Rastro mais curto para um visual mais limpo
57
  historico_rastro = historico_rastro[-max_rastro:]
58
 
59
+ tamanho_eco = 10 # Eco menor para trajetórias mais curtas
60
  pontos_eco = list(zip(x_ciclo[-tamanho_eco:], y_ciclo[-tamanho_eco:], z_ciclo[-tamanho_eco:]))
61
  vetor_inercia = aprender_com_o_eco_3d(pontos_eco)["velocity_vector"]
62
 
 
66
  ax.cla()
67
  ax.xaxis.pane.fill = False; ax.yaxis.pane.fill = False; ax.zaxis.pane.fill = False
68
  ax.grid(color='#222222', linestyle='--')
69
+ ax.view_init(elev=25., azim=angulo_camera + (len(historico_rastro) - len(x_ciclo) + frame) * 0.5) # Rotação de câmera mais rápida
70
 
71
+ # --- MUDANÇA #2 (Continuação): Limites do gráfico para o universo compacto ---
72
+ ax.set_xlim(-30, 30); ax.set_ylim(-30, 30); ax.set_zlim(-30, 30)
73
  ax.set_xticklabels([]); ax.set_yticklabels([]); ax.set_zticklabels([])
74
 
75
  ax.scatter(*ponto_a, s=150, c='lime', alpha=0.7)
 
84
  ax.text2D(0.05, 0.95, info_texto, transform=ax.transAxes, color='white', fontsize=10)
85
 
86
  yield fig
87
+ # --- MUDANÇA #3: ATUALIZAÇÃO MAIS RÁPIDA ---
88
+ time.sleep(0.01) # Pausa mínima para a UI respirar
89
 
90
  ponto_a = ponto_b
91
 
92
  plt.close(fig)
93
 
94
+ # --- Interface Gradio ---
95
+ with gr.Blocks(theme=gr.themes.Base(primary_hue="red")) as demo:
96
  gr.Markdown(
97
  """
98
+ # Simulador Autônomo 3D (Modo Hyperdrive)
99
+ Clique em "Iniciar" para dar partida no motor da simulação. O agente irá navegar em **velocidade extrema**
100
+ por um universo compacto, gerando novos alvos aleatórios em um loop infinito.
101
  """
102
  )
103
  with gr.Row():
104
  with gr.Column(scale=1):
105
  angulo_camera_slider = gr.Slider(-180, 180, value=45, label="Ângulo Inicial da Câmera")
106
+ start_btn = gr.Button("🚀 Iniciar Simulação (Hyperdrive)", variant="primary")
107
  with gr.Column(scale=2):
108
  plot_output = gr.Plot(label="Visualização em Tempo Real")
109