2010-10-19 5 views
2

Je faisais un utilitaire pour créer rapidement des ombres portées de CSS, et s'est rendu compte que ceci peut seulement être fait dans IE avec IE filters. Cependant, la Direction utilise Shadow Filter au lieu de (x, y) les coordonnées:Javascript: Formule pour obtenir la direction de X, Y coordonne

filter: "progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=135, Color='#000000');" 

Comment peut être calculée à partir Direction (x, y) les coordonnées?

Edit: En utilisant les réponses données et plus de détails à partir this link: Je modifié mon code comme suit:

function(x, y){ 
    var d = Math.atan2(x, y) * (180/Math.PI); 
    if(d < 0){ d = 180 - d; } 
    return d; 
} 

Si vous passez Déport horizontal et Déport vertical que vous utiliserez comme X, Y, respectivement , vous obtiendrez un degré de 0 à 359.

Répondre

11

La direction est en degrés.

Alors

x = cos(direction) 
y = sin(direction) 

Si votre calculatrice fonctionne en radians (comme toute calculette saine d'esprit devrait), vous pouvez convertir des degrés en radians avec

radians = degrees/180 * pi 

où pi = 3,14159 ... ou Math. PI

Pour aller dans l'autre sens, utilisez 'atan'

radians = Math.atan(y/x) 

En Javascript vous avez une fonction Math.atan2 qui prend y et x comme paramètres.

radians = Math.atan2(y, x) 

radians à degrés est:

degrees = radians/pi * 180 

donc le résultat est:

direction = Math.atan2(y, x)/Math.PI * 180 
+0

+1: Bien que vous avez mentionné atan2; c'est la bonne chose car elle est sans danger tant qu'au moins l'un des arguments est non nul (contrairement à l'atan). –

+0

Merci. Bonne explication. –

Questions connexes