Tema: Rotacion 2D
Ver Mensaje Individual
  #5 (permalink)  
Antiguo 20/11/2013, 15:09
Avatar de marlanga
marlanga
 
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: Rotacion 2D

En mi código, no haría falta calcular la posición central cada vez que se rota, porque no se mueve.

Y ese trozo de código que has puesto, mezla rotación con traslación.

Traslación (muevo el rectangulo al origen de coordenadas 0,0. Como sé que el centro es (Ox, Oy), resto cada componente a las coordenadas de cada vértice del cuadrado.
Código Javascript:
Ver original
  1. var x=matriz[i].x-Ox;
  2. var y=matriz[i].y-Ox;

Rotación:
Código Javascript:
Ver original
  1. var cos=Math.cos(radianes);
  2. var sen=Math.sin(radianes);
  3. matriz[i].x=(x*cos-y*sen);
  4. matriz[i].y=(x*sen+y*cos);

Traslación, muevo el rectángulo a donde estaba.
Código Javascript:
Ver original
  1. matriz[i].x= matriz[i].x+Ox;
  2.  matriz[i].y= matriz[i].y+Oy;


Una matriz se puede ver como una colección de coordenadas. Es decir, un array bidimensional (o cualquier estructura de datos, como la que tú usas). Sobre las matrices se pueden hacer 3 operaciones matemáticas, que son la traslación, la rotación, y la escalación. La translación sirve para mover una matriz de coordenadas hacia el punto (x,y) que quieras. Se hace sumando a cada componente X de cada vertice de la matriz, la coordenada X del punto. Con la coordenada Y igual.

La rotación sirve para rotar cada vértice de un array de vértices con el ángulo que quieras. Solo hay que saber que siempre se rotará sobre el origen de coordenadas, es decir, sobre (0,0).

La escalación sirve para aumentar o disminuir la distancia de cada vértice con el origen de coordenadas, y se hace multiplicando cada componente de cada vértice, por un número dado (que se llama número escalar).

Para rotar sobre el centro de un objeto, primero hay que hacer que el centro del objeto coincida con la coordenada (0,0) Luego rotas, y por ultimo lo vuelves a trasladar a donde estaba.

para escalar, tambien es interesante mover el centro del objeto al orígen de coordenadas. Así, cuando escales, harás que el objeto aumente o disminuya de tamaño. Por ejemplo, escalar por 2 hará que el objeto sea el doble de grande. Escalar por 0.5, hará que sea la mitad de pequeño. Si escalas el objeto sin moverlo al origen de coordenadas, se deformará.