¿Cómo hago para que un vehículo se mueva a un punto y se detenga sin rebasar u oscilar?

9

Ok, entonces consideremos que tenemos un vehículo como el que describí en mi respuesta a esta pregunta , con una posición 2D, velocidad, velocidad angular y fricción / fricción. Se puede acelerar y romper en una cantidad variable, pero no se detiene al instante o alcanza la velocidad máxima al instante. ¿Cómo puedo hacer que se mueva a un punto en particular y se detenga, en el menor tiempo posible, sin rebasar ni oscilar?

Estaba pensando algo como:

  • girar hacia la posición de destino.
  • acelerar
  • mira 1 marca adelante, preguntando "Si aplicara los descansos la próxima marca, ¿superaría el objetivo?"
  • Si se sobrepasa, aplique los descansos ahora en cierta cantidad.

Estoy seguro de que este es un problema resuelto y que probablemente haya un método mejor que el que describí.

Iain
fuente

Respuestas:

3

Usando el cálculo, si conoce su velocidad y la tasa de desaceleración máxima, entonces puede conocer su distancia mínima de frenado. Con eso en mente, puede saber exactamente cuándo necesita aplicar los frenos (dejando de lado los errores de redondeo / cuantización) para detenerse en un determinado punto.

Ahora, espero que alguien mejor en matemáticas que yo publique la fórmula real ...

Kylotan
fuente
2
finalPositionDelta = -0.5 * sqr(currentSpeed) / maximumDecelerationSin embargo, esto supone que su desaceleración es una constante, que dependiendo de la profundidad de su simulación puede no ser el caso. Yo iría con la solución de Ranieri. (Vaya, lo siento, es desaceleración DIV, no mul)
Tenpn
Sí, este método sigue siendo útil incluso si lo enmarca como un problema de los sistemas de control, porque comprender los gradientes involucrados debería ayudar a evitar la inestabilidad u oscilación en la medición de errores.
Kylotan el
1

A veces, en el desarrollo del juego, debes tomar atajos. El atajo aquí se llama Impulso, que, físicamente hablando, es una fuerza muy grande aplicada en muy poco tiempo. En lugar de integrarlo con el tiempo, simplemente lo aplica al parámetro como un cambio directo: establezca la velocidad en 0.

La pregunta es: ¿quieres usar el acceso directo o no?

ADB
fuente
2
No me preocupa tomar atajos si es invisible para el jugador, pero si un vehículo pudiera detenerse en el acto sería muy extraño.
Iain
1
Eso es ciertamente cierto, sin embargo, ayuda a detenerse precisamente en el punto que desea después de una deceleración, evitando así cálculos complejos y dividiendo el paso de tiempo demasiadas veces.
ADB