Cambiar figura "Wave Grid" (malla ondeante) por curva de Lissajous 3D, con ecuaciones paramétricas más hipnóticas y resultónas visualmente. ## Cambios Principales **Archivos renombrados:** - `wave_grid_shape.h/cpp` → `lissajous_shape.h/cpp` - Clase `WaveGridShape` → `LissajousShape` **Ecuaciones implementadas:** - x(t) = A * sin(3t + φx) - Frecuencia 3 en X - y(t) = A * sin(2t) - Frecuencia 2 en Y - z(t) = A * sin(t + φz) - Frecuencia 1 en Z - Ratio 3:2:1 produce patrón de "trenza elegante" **Animación:** - Rotación global dual (ejes X/Y) - Animación de fase continua (morphing) - Más dinámica y orgánica que Wave Grid **defines.h:** - `WAVE_GRID_*` → `LISSAJOUS_*` constantes - `ShapeType::WAVE_GRID` → `ShapeType::LISSAJOUS` **engine.cpp:** - Actualizado include y instanciación - Arrays de figuras DEMO actualizados - Tecla W ahora activa Lissajous ## Resultado Curva 3D paramétrica hipnótica con patrón entrelazado, rotación continua y morphing de fase. Más espectacular que el grid ondeante anterior. 🌀 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
27 lines
1.2 KiB
C++
27 lines
1.2 KiB
C++
#pragma once
|
|
|
|
#include "shape.h"
|
|
|
|
// Figura: Curva de Lissajous 3D
|
|
// Comportamiento: Curva paramétrica 3D con rotación global y animación de fase
|
|
// Ecuaciones: x(t) = A*sin(freq_x*t + phase_x), y(t) = A*sin(freq_y*t), z(t) = A*sin(freq_z*t + phase_z)
|
|
class LissajousShape : public Shape {
|
|
private:
|
|
float freq_x_ = 0.0f; // Frecuencia en eje X
|
|
float freq_y_ = 0.0f; // Frecuencia en eje Y
|
|
float freq_z_ = 0.0f; // Frecuencia en eje Z
|
|
float phase_x_ = 0.0f; // Desfase X (animado)
|
|
float phase_z_ = 0.0f; // Desfase Z (animado)
|
|
float rotation_x_ = 0.0f; // Rotación global en eje X (rad)
|
|
float rotation_y_ = 0.0f; // Rotación global en eje Y (rad)
|
|
float amplitude_ = 0.0f; // Amplitud de la curva (píxeles)
|
|
int num_points_ = 0; // Cantidad total de puntos
|
|
|
|
public:
|
|
void generatePoints(int num_points, float screen_width, float screen_height) override;
|
|
void update(float delta_time, float screen_width, float screen_height) override;
|
|
void getPoint3D(int index, float& x, float& y, float& z) const override;
|
|
const char* getName() const override { return "LISSAJOUS"; }
|
|
float getScaleFactor(float screen_height) const override;
|
|
};
|