Ver Mensaje Individual
  #5 (permalink)  
Antiguo 20/05/2015, 10:05
Fw190
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 11 meses
Puntos: 73
Respuesta: Rotacion con radianes

Supongamos que tengo un punto P en las coordenadas (6,3), es decir, P(6,3).
Para sus coordenadas polares (pongo los ángulos en grados), tenemos:

r = sqrt(x^2+y^2) = sqrt(6^2+3^2) = sqrt(36+9) = sqrt(45) = 6.708
A = atan(y/x) = atan(3/6) = atan(0.5) = 26.565

es decir, las coordenadas polares de ese punto son un segmento de longitud 6.708 y un ángulo respecto del eje horizontal de 26.565 grados, o sea, P(6.708,26.565).

Supongamos que quiero girarlo un ángulo de 30 grados en sentido contrario a las agujas del reloj (por convenio, este es el sentido positivo de giro). El nuevo ángulo será:

B = A+30 = 56.565

Las nuevas coordenadas polares de P serán P(6.708, 56.565).
Pasando a cartesianas:

x = r*cos(B) = 6.708*cos(56.565) = 3.696
y = r*sin(B) = 6.708*sin(56.565) = 5.598

En coordenadas cartesianas, tenemos P(3.696, 5.598).

Estos cálculos están hechos, lógicamente, con números en coma flotante. Para pasar a coordenadas en la pantalla, tienes que pasarlos a entero con el redondeo que corresponda. También, como ya te dije, tienes que tener en cuenta que el punto (0,0) de la pantalla es la esquina superior izquierda, con lo que las coordenadas horizontales crecen de izquierda a derecha (normal), pero las verticales crecen de arriba hacia abajo (al contrario de lo normal), con lo que tendrás que recalcular las coordenadas verticales de lo que vayas a trazar. También debes tener en cuenta la traslación del origen de coordenadas, si no lo vas a tener en la esquina superior izquierda (o inferior izquierda si aplicas la inversión del eje vertical). Haz todos los cálculos en coma flotante (float o double), a las constantes que utilices añádeles un punto decimal para forzar a que te las evalúe como números en coma flotante (si no, en alguna ocasión podría aplivcar aritmética entera y trastocarte por completo el resultado).