2014-05-20 3 views
1

Je fais pivoter un rectangle et je souhaite maintenant calculer la nouvelle position du coin supérieur gauche.Rotation du rectangle et calcul du coin

mon calcul actuel est:

Point upLeft = new Point(
     // x-coordinate 
       (int) Math.round((oldx * Math.cos(objectAngleRad)) 
         - (oldy * Math.sin(objectAngleRad))), 
       // y-coordinate 
       (int) Math.round((oldx * Math.sin(objectAngleRad)) 
         + (oldy * Math.cos(objectAngleRad)))); 

Le calcul ne fonctionne pas. Quelqu'un peut-il voir l'erreur?

+1

n'a même pas essayé votre code, mais je voulais demander pourquoi n'utilisez-vous affine? http://docs.oracle.com/javase/7/docs/api/java/awt/geom/AffineTransform.html –

+1

Mon ami a implémenté la rotation, je n'ai que l'angle et la position actuelle du rectangle. – user3658206

+0

mais peut-être que nous pouvons essayer de changer le code. Merci :) – user3658206

Répondre

3

Vous devez soustraire le milieu du rectangle avant de tourner, puis ajoutez-le après, sinon vous tourner le coin de l'origine (0,0)

Point upLeft = new Point(
    // x-coordinate 
     (int) Math.round(midx + ((oldx-midx) * Math.cos(objectAngleRad)) 
           - ((oldy-midy) * Math.sin(objectAngleRad))), 
    // y-coordinate 
     (int) Math.round(midy + ((oldx-midx) * Math.sin(objectAngleRad)) 
           + ((oldy-midy) * Math.cos(objectAngleRad)))); 
+0

Merci. Cela fonctionne avec une petite erreur d'environ 10pi je vais essayer de le réparer et de poster la version de travail après. – user3658206

+0

Cela fonctionne, j'ai seulement eu une erreur dans mon calcul. – user3658206

Questions connexes