2010-08-28 7 views
4

J'ai besoin d'une formule qui retourne des nombres normaux pour le point xy - similaire à la fonction normalize() d'actionscript.Fonction Javascript qui fonctionne comme la fonction normal d'actionscript (1)

var normal = {x:pt1.x-pt2.x,y:pt1.y-pt2.y}; 

normal = Normalize(1) // this I do not know how to implement in Javascript 
+2

double exact de [fonction Javascript qui fonctionne comme la Normaliser de actionscript (1)] (http://bytes.com/topic/javascript/answers/894371-javascript-function-works-like-actions-actionscripts-normalize-1-a);) –

+0

Que fait 'Normalize' dans Actionscript? Est-ce ceci: http://help.adobe.com/nl_NL/AS3LCR/Flash_10.0/flash/geom/Point.html#normalize%28%29 –

Répondre

2

Voici comment il pourrait être écrit en Actionscript:

function normalize(p:Point,len:Number):Point { 
    if((p.x == 0 && p.y == 0) || len == 0) { 
     return new Point(0,0); 
    } 
    var angle:Number = Math.atan2(p.y,p.x); 
    var nx:Number = Math.cos(angle) * len; 
    var ny:Number = Math.sin(angle) * len; 
    return new Point(nx,ny); 
} 

Donc, je suppose que dans JS il pourrait être quelque chose comme ceci:

function normalize(p,len) { 
    if((p.x == 0 && p.y == 0) || len == 0) { 
     return {x:0, y:0}; 
    }  
    var angle = Math.atan2(p.y,p.x); 
    var nx = Math.cos(angle) * len; 
    var ny = Math.sin(angle) * len; 
    return {x:nx, y:ny}; 
} 
5

Je pense que la fonction AS3 normalize est juste un moyen de mettre à l'échelle un vecteur unitaire:

function normalize(point, scale) { 
    var norm = Math.sqrt(point.x * point.x + point.y * point.y); 
    if (norm != 0) { // as3 return 0,0 for a point of zero length 
    point.x = scale * point.x/norm; 
    point.y = scale * point.y/norm; 
    } 
} 
+0

Je n'avais pas considéré le cas d'un point 0,0. Bonne prise! Vous pourriez vouloir placer le point à 0,0 dans ce cas, cependant (actuellement, vous le laissez comme il a été passé). Aussi, je me suis rendu compte que si l'échelle est nulle, il n'est pas nécessaire de calculer quoi que ce soit non plus. –

+0

@Juan Oui, j'ai laissé le point tel quel, puisque pour obtenir une longueur nulle, x et y doivent être 0, donc le point est déjà (0,0). Je n'ai pas optimisé la version ci-dessus;) – Patrick

1

J'ai aussi trouvé cela qui semble le faire.

var len = Math.sqrt(normal.x * normal.x + normal.y * normal.y) 
normal.x /= len; 
normal.y /= len; 

MERCI

+2

Oui c'est ma réponse;) – Patrick

Questions connexes