Movement physics with vectors

The diagrams on this page might not be 100% acurate, they are just meant to illustrate.

Context

This is meant to help to move in Byte Arena's realistic world simulation, where physics works just the same as in real life.

What are vectors for?

We use vectors to model physical forces. They point into a direction and indicate a force. Arithmetic on vector is particularly useful in realistic movement engine, we will see why later.

The velocity

Your agent has a certain mass, if the mass is in movement we say that it has a velocity. It represents its current force.
We also model it as a vector.

Definitions

The desired vector

In autonomous vehicule there is a notion called desired vector, it's just the direction (and force) in which your agent wants to go.
For example, if you need to go to the left, your agent's desired vector will point to the left.
We call it a desire because you might have other forces applied to your agent, the velocity is one.

Calculate a direction

In this case, your agent is in front of two obstacles (one on the right and one on the left) and you need to pass in the middle of them.

Using vectors is simple, the formula is the following: $$\begin{align*} \vec{c} &= \vec{a} + \vec{b} \\ \vec{c} &= \begin{Bmatrix}a_1 + b_1\\a_2 + b_2\\\end{Bmatrix} \end{align*}$$

The arriving technique

Imagine you want to stop at a desired position.

At this point of the article you would probably send the desired vector at full magnitude in direction of that point. Let's try it! You will notice that once the point has been reached by your agent, depending of your current speed and \(\vec velocity\) you will end up after the point.
Your agent will then send the opposite vector to reach the point again, and so on. It will end once the physics has reduce your velocity enough due to friction, but that is probably going to take some time.

Given the fact that you won't be able to stop immediatly once you reached the desired point, you will need to use a technique called arriving.

This technique consist of reducing your \(\vec velocity\) (and thus speed) before actually arriving to the point.

p is the point you want to reach.
\(\vec c\) is the velocity of the agent.
\(\vec d\) is the desired direction.
t is the point where you need to reduce your velocity (it was set arbitrarily). We are going to reduce the desired \(\vec velocity\) by dividing it by 2.
$$ \vec{c'} = \vec{d} - \vec{c} \\ \begin{equation} ∥c'∥ = \begin{cases} \vec c, & \text{if}\ \vec{c} < t \\ \vec c / 2, & \text{if}\ \vec{c} >= t \end{cases} \end{equation} $$

Implementation

Byte Arena provides an official implementation of a two dimensional vector written in JavaScript, you can find it here: bytearena-sdk-vector2.

Reach out

Say hello: [email protected].

Ping me on Twitter: @svensauleau.