2010-12-16 3 views
5

Comment obtenir 4 points de rotation à certains degrés autour d'un pointeur pour former un rectangle? Je peux faire pivoter un point autour d'un point, mais je ne peux pas le décaler pour faire un rectangle qui ne soit pas déformé.Faire pivoter un rectangle autour d'un point

+2

avez-vous essayé de le faire jusqu'à présent? du code? merci – Trufa

+3

Traduisez vos quatre points de sorte que vous traitiez le pointeur comme le centre, effectuez la rotation via la méthode de matrice de rotation standard, puis traduisez les points en arrière. [Explication ici] (http://www.euclideanspace.com/maths/geometry/affine/aroundPoint/index.htm) – Michal

+0

Si j'ai compris que je l'utiliserais, mais j'ai besoin d'une solution en anglais ou de préférence JavaScript. – Anonymous

Répondre

23

Si vous pouvez faire pivoter un point autour d'un point, il devrait être facile de faire pivoter un rectangle - il vous suffit de faire pivoter 4 points.

est ici une fonction js pour faire tourner un point autour d'une origine:

function rotate_point(pointX, pointY, originX, originY, angle) { 
    angle = angle * Math.PI/180.0; 
    return { 
     x: Math.cos(angle) * (pointX-originX) - Math.sin(angle) * (pointY-originY) + originX, 
     y: Math.sin(angle) * (pointX-originX) + Math.cos(angle) * (pointY-originY) + originY 
    }; 
} 

Et vous pouvez le faire à chaque point. est un exemple: http://jsfiddle.net/dahousecat/4TtvU/

Modifier l'angle et exécuter frappé pour voir le résultat ...

+0

Pouvez-vous expliquer cela? jsfiddle.net/bjhc34xk/7 Est-ce que cela a quelque chose à voir avec l'approximation de PI, ou peut-être des erreurs mathématiques en virgule flottante? –

+1

fourchu violon de Felix pour inclure un curseur pour l'entrée dynamique pour le rendre plus facile à expérimenter - https://jsfiddle.net/brichins/0ccdd362/ – brichins

+2

@MaxMastalerz Je suis sûr que vous avez évolué à partir de maintenant, mais votre violon est probablement ne fais pas ce que tu pensais. Vous modifiez la coordonnée X de votre point de terminaison, au milieu du calcul, puis faites pivoter la coordonnée Y à partir de ce point de décalage au lieu du centre. Résultats dans une spirale d'or cool, mais je pense que vous vouliez faire cela: https://jsfiddle.net/brichins/w2rxsbt4/ – brichins

Questions connexes