[JAVA] Formules souvent utilisées lors de la création d'animations

Voici quelques formules souvent utilisées lors de la création d'animations. Ou plutôt, c'est un mémo. C'est un lieu incontournable lorsqu'on pense aux expressions interactives autres que Game.

Si vous l'implémentez dans Swift, vous pouvez l'animer en utilisant la formule précédemment publiée Implémenter EnterFrameBeacon dans Swift.

Formule de puissance

Force = masse x accélération $ F = ma $

Formule d'accélération

Accélération = masse / force $ \displaystyle a = \frac{F}{m} $

L'accélération est également le taux de changement du passage du temps.

$ \displaystyle a = \frac{dv}{dt} $

En d'autres termes, cela vaut également.

$ \displaystyle \frac{dv}{dt} = a = \frac{F}{m} $

De même, la vitesse est le taux de changement de position dans le temps.

$ \displaystyle v = \frac{dx}{dv} $

Intégration numérique

L'heure actuelle est $ t $ $ Dt $ (temps delta) pour le changement d'heure du sentiment de pas d'écriture

Intégration Euler

var t: Float = 0.0
let dt: Float = 1.0
var velocity: Float = 0.0
var position: Float = 0.0
let force: Float = 10.0
let mass: Float = 1.0
        
position = position + velocity * dt
velocity = velocity + (force / mass ) * dt
t = t + dt

Formule de base $ s = ut + 0.5at^2 $

RK4 (Lungekuta 4)

struct State {
    float x;
    float v;
};


struct Derivative {
    float dx; // dx/dt = velocity
    float dv; // dv/dt = acceleration
};

/**
 
 */
float acceleration(const State &state, float t){
    const float k = 10;
    const float b = 1;
    return -k * state.x - b * state.v;
}

/**
 
 */
Derivative evaluate(const State &initial, float t, float dt, const Derivative &d){
    State state;
    state.x = initial.x + d.dx * dt;
    state.v = initial.v + d.dv * dt;
    
    Derivative output;
    output.dx = state.x;
    output.dv = acceleration(state, t+dt);
    return output;
}

/**
 
 */
void integrate(State &state, float t, float dt){
    Derivative a, b, c, d;
    
    a = evaluate(state, t, dt, Derivative());
    b = evaluate(state, t, dt*0.5f, a);
    c = evaluate(state, t, dt*0.5f, b);
    d = evaluate(state, t, dt, c);
    
    float dxdt = 1.0f / 6.0f * (a.dx + 2.0f*(b.dx + c.dx) + d.dx);
    float dvdt = 1.0f / 6.0f * (a.dv + 2.0f*(b.dv + c.dv) + d.dv);
    
    state.x = state.x + dxdt * dt;
    state.v = state.v + dvdt * dt;
    
}

Recommended Posts

Formules souvent utilisées lors de la création d'animations
Gemme souvent utilisée dans les rails