2010-03-12 6 views
9

J'ai un point dans un rectangle dont j'ai besoin pour faire pivoter un degré arbitraire et trouver le x y du point. Comment puis-je faire cela en utilisant javascript. Au-dessous du x, y serait quelque chose comme 1,3 et après je passe 90 dans la méthode, il reviendra 3,1.Rotation du point dans le rectangle

|-------------| 
| *   | 
|    | 
|    | 
|-------------| 
_____ 
| *| 
|  | 
|  | 
|  | 
|  | 
_____ 

|-------------| 
|    | 
|    | 
|   *| 
|-------------| 
_____ 
|  | 
|  | 
|  | 
|  | 
|* | 
_____ 

En gros Je cherche le courage de cette méthode

function Rotate(pointX,pointY,rectWidth,rectHeight,angle){ 
    /*magic*/  
    return {newX:x,newY:y}; 
} 

Répondre

9

Cela devrait le faire:

function Rotate(pointX, pointY, rectWidth, rectHeight, angle) { 
    // convert angle to radians 
    angle = angle * Math.PI/180.0 
    // calculate center of rectangle 
    var centerX = rectWidth/2.0; 
    var centerY = rectHeight/2.0; 
    // get coordinates relative to center 
    var dx = pointX - centerX; 
    var dy = pointY - centerY; 
    // calculate angle and distance 
    var a = Math.atan2(dy, dx); 
    var dist = Math.sqrt(dx * dx + dy * dy); 
    // calculate new angle 
    var a2 = a + angle; 
    // calculate new coordinates 
    var dx2 = Math.cos(a2) * dist; 
    var dy2 = Math.sin(a2) * dist; 
    // return coordinates relative to top left corner 
    return { newX: dx2 + centerX, newY: dy2 + centerY }; 
} 
+0

Votre oublièrent Math. sur atan2, cos, et le péché, mais c'est parfait !! – Dested

+0

@Dested: Merci. Corrigé le code. – Guffa

2
newX = Math.cos(angle) * pointX - Math.sin(angle) * pointY; 
newY = Math.sin(angle) * pointX + Math.cos(angle) * pointY; 

Assurez-vous d'indiquer les coordonnées relatives à l'origine de la rotation !

(ai pas vérifié la syntaxe exactement, mais le calcul est basé sur une matrice de rotation)

Questions connexes