Ajustar amortiguación para absorción rápida sin oscilación

Incrementar constantes de damping para lograr amortiguamiento crítico
y eliminar oscilaciones durante la convergencia a la esfera RotoBall.

## Cambios

**defines.h - Nuevos valores:**
- `ROTOBALL_DAMPING_BASE`: 15.0 → 35.0 (+133%)
  - Amortiguamiento crítico calculado: c ≈ 2*√(k*m) = 2*√(300*1) ≈ 34.64
- `ROTOBALL_DAMPING_NEAR`: 50.0 → 80.0 (+60%)
  - Absorción rápida cuando están cerca del punto

## Problema Resuelto

**Antes (subdamped):**
- Las pelotas oscilaban varias veces antes de estabilizarse
- Sobrepasaban el punto destino repetidamente
- Convergencia lenta con "rebotes" visuales

**Ahora (critically damped):**
- Las pelotas convergen directamente sin oscilar
- Se "pegan" suavemente a la esfera
- Absorción rápida y visualmente limpia

## Teoría

Sistema masa-resorte-amortiguador:
- Subdamped (c < 2√km): Oscila antes de estabilizar
- Critically damped (c = 2√km): Converge rápido sin oscilar
- Overdamped (c > 2√km): Converge muy lento

Valores ajustados para estar en el punto crítico, logrando
la convergencia más rápida posible sin oscilación.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-10-03 13:27:26 +02:00
parent 91ab6487b3
commit 355fa4ffb7
2 changed files with 18 additions and 12 deletions

View File

@@ -387,30 +387,36 @@ position += velocity * deltaTime
### Constantes Físicas Ajustables
```cpp
// En defines.h
// En defines.h (VALORES ACTUALES - Amortiguamiento crítico)
ROTOBALL_SPRING_K = 300.0f; // Rigidez resorte
ROTOBALL_DAMPING_BASE = 15.0f; // Amortiguación lejos
ROTOBALL_DAMPING_NEAR = 50.0f; // Amortiguación cerca
ROTOBALL_DAMPING_BASE = 35.0f; // Amortiguación lejos (crítico ≈ 2*√k*m)
ROTOBALL_DAMPING_NEAR = 80.0f; // Amortiguación cerca (absorción rápida)
ROTOBALL_NEAR_THRESHOLD = 5.0f; // Distancia "cerca" (px)
ROTOBALL_MAX_FORCE = 1000.0f; // Límite fuerza (seguridad)
```
**Changelog de Ajustes:**
- **v1:** `DAMPING_BASE=15.0, NEAR=50.0` → Oscilación visible (subdamped)
- **v2:** `DAMPING_BASE=35.0, NEAR=80.0`**Absorción rápida sin oscilación**
### Ajustes Recomendados
**Si oscilan demasiado:**
**Si siguen oscilando (poco probable):**
```cpp
ROTOBALL_DAMPING_BASE = 25.0f; // Más amortiguación
ROTOBALL_DAMPING_NEAR = 70.0f; // Estabilización fuerte
ROTOBALL_DAMPING_BASE = 50.0f; // Amortiguamiento super crítico
ROTOBALL_DAMPING_NEAR = 100.0f; // Absorción instantánea
```
**Si tardan en llegar:**
**Si llegan muy lento:**
```cpp
ROTOBALL_SPRING_K = 500.0f; // Resorte más rígido
ROTOBALL_SPRING_K = 400.0f; // Más fuerza
ROTOBALL_DAMPING_BASE = 40.0f; // Compensar con más damping
```
**Si se "pegan" muy rápido (sin inercia visible):**
**Si quieres más "rebote" visual:**
```cpp
ROTOBALL_DAMPING_NEAR = 30.0f; // Menos amortiguación cerca
ROTOBALL_DAMPING_BASE = 25.0f; // Menos amortiguación
ROTOBALL_DAMPING_NEAR = 60.0f; // Ligera oscilación
```
### Ventajas del Sistema

View File

@@ -74,8 +74,8 @@ constexpr int ROTOBALL_MAX_BRIGHTNESS = 255; // Brillo máximo (frente, 0-
// Física de atracción RotoBall (sistema de resorte)
constexpr float ROTOBALL_SPRING_K = 300.0f; // Constante de rigidez del resorte (N/m)
constexpr float ROTOBALL_DAMPING_BASE = 15.0f; // Amortiguación base (lejos del punto)
constexpr float ROTOBALL_DAMPING_NEAR = 50.0f; // Amortiguación cerca del punto (estabilización)
constexpr float ROTOBALL_DAMPING_BASE = 35.0f; // Amortiguación base (amortiguamiento crítico ≈ 2*√k*m)
constexpr float ROTOBALL_DAMPING_NEAR = 80.0f; // Amortiguación cerca del punto (absorción rápida)
constexpr float ROTOBALL_NEAR_THRESHOLD = 5.0f; // Distancia "cerca" en píxeles
constexpr float ROTOBALL_MAX_FORCE = 1000.0f; // Fuerza máxima aplicable (evita explosiones)