[JAVA] Formeln, die häufig beim Erstellen von Animationen verwendet werden

Hier sind einige Formeln, die häufig beim Erstellen von Animationen verwendet werden. Oder besser gesagt, es ist ein Memo. Es ist ein unvermeidlicher Ort, wenn Sie über andere interaktive Ausdrücke als das Spiel nachdenken.

Wenn Sie es in Swift implementieren, können Sie es mithilfe der zuvor veröffentlichten Formel Implementieren von EnterFrameBeacon in Swift animieren.

Leistungsformel

Kraft = Masse x Beschleunigung $ F = ma $

Beschleunigungsformel

Beschleunigung = Masse / Kraft $ \displaystyle a = \frac{F}{m} $

Die Beschleunigung ist auch die Änderungsrate des Zeitablaufs.

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

Mit anderen Worten, dies gilt auch.

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

In ähnlicher Weise ist Geschwindigkeit die Änderungsrate der Position über die Zeit.

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

Numerische Integration

Die aktuelle Zeit ist $ t $ $ Dt $ (Deltazeit) für die Zeitänderung des Schreibschrittgefühls

Euler-Integration

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

Grundformel $ 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

Formeln, die häufig beim Erstellen von Animationen verwendet werden
Edelstein oft in Schienen verwendet