2016-09-11 1 views
0

See this DiagramNeed 2D Rotation interpolation logique

J'ai besoin logique pour l'interpolation de rotation

public static float interPolateKeyForAngle(int startFrame, int endFrame, int currentFrame, float initialAngle, float endAngle) 
{ 
    int frameDif = endFrame - startFrame + 1; 
    int difCurrentFrame = Math.abs(startFrame - currentFrame) + 1; 

    //Calculate here 
} 

Je sais que l'angle de départ en position 0e et angle de fin en 10e position i besoin de calculer la 1 à la position 9 angles certains un s'il vous plaît aidez-moi.

Merci.

+0

quelque chose comme ceci: 'return ((endAngle - initialAngle) * (currentFrame - startFrame))/(endFrame - startFrame) + initialAngle;' –

+0

j'essaie déjà ce calcul son seulement tourner l'horloge sage j'ai besoin de calculer le chemin le plus court et trouve l'angle dans cette direction. –

+0

Ce qui pourrait signifier que vous devez normaliser la différence d'angle entre -Pi et Pi. Essayez d'utiliser 'delta = endAngle - initialAngle; delta = fmod (delta + 3 * Pi, 2 * Pi) - Pi'. – LutzL

Répondre

0

interpolation linéaire entre deux valeurs discrètes est toujours

(V0.(n-i) + V1.i)/n 

0≤i≤n, pour n intervalles (à savoir n-1 valeurs intermédiaires).

+0

Le problème est que les angles enveloppent autour de 360 ​​° degrés, et donc cet algo va parfois échouer. La direction de l'interpolation devrait être spécifiée aussi je pense. – ja72

+0

@ ja72: vous auriez dû le mentionner dans la question. Ajoutez à 'V1' un multiple approprié de' 360 ° 'de sorte que' V1-V0' soit l'angle de rotation total, dans le bon sens. Notez qu'il est impossible de trouver ce multiple à partir des 'V0' et' V1' donnés seuls. –