2013-02-27 6 views
0

J'ai fait une enquête sur la rotation d'un point à un certain angle d'un certain point et de la question: C++: Rotating a vector around a certain point Je suis venu avec suivre jusqu'à présent, mais il ne me donne pas le résultat correct, quelqu'un peut s'il vous plaît identifier le problèmeAngle de point autour de certain point

const float angle = -90.0; 
const float degreePerRadian = 57.2957795; 
const float s = sin(angle/degreePerRadian); 
const float c = cos(angle/degreePerRadian); 
int p1x = 320; 
int p1y = 480; 
int p2x = 320; 
int p2y = 320; 

float centerX = (p2x - p1x)/2 + p1x; 
float centerY = (p2y - p1y)/2 + p1y; 
p2x -= centerX; 
p2y -= centerY; 
double newX = centerX + (p2x * c - p2y * s); 
double newY = centerY + (p2x * s + p2y * c); 

je reçois: newX = 240 et Newy = 400

EDIT: Je un plan bizarre que

       | 
           | ^
           | | 
           | 
     ------->^(320, 480) | (y+) 
      90° |    | | 
       |    | | 
       |    | 
       . (320, 320) | 
           | 
           | 
     --------------------------(0,0) 
       <-- (x+) -- 

Si et je veux savoir angle de 90 degrés pour le point (320, 480) si la ligne tombe à gauche et à droite

En fait, pour être plus précis, la plaine est à l'envers (fondamentalement, j'utilise QGraphicsScene donc en haut à gauche est et en bas à droite 0,0 est la largeur(), hauteur()

   (x+) ---> 
    (0,0) -------------------------- 
    | 
    | 
    |  . (320, 320) 
    |  | 
    |  | 
    |  | 90° 
    |  . (320, 480)---------- 
    | 
    | 
(y+) | 
    | 
    | 
+2

Utilisez-vous des valeurs en radians? Pour autant que je me souvienne, la plupart des fonctions sin/cos les attendent en radians. – Losiowaty

+0

@Losiowaty Ok, donc si je le change de radian à degrés je reçois (-160, 2.87183e-07) – abumusamq

+0

Non, radians sont BONS :) C'était juste une première chose à demander qui est venu à l'esprit. – Losiowaty

Répondre

1

Votre 16e ligne de code de lien est incorrect. Il devrait être:

double nouveauY = centreY + (p2x * s + p2y * c);

Questions connexes