por Altair » Mar Jul 19, 2011 7:36 am
No estoy muy seguro de que sea una animacion. Yo lo entiendo asi, estoy cambiando las coordenadas XY de un objeto, desde sus coordenadas iniciales a las finales. No me importan las coordenadas XY intermedias que hay por medio.
Por ejemplo, con estos datos:
ob.x=0
ob.y=0
ob.angle=0
lo hago avanzar 100 pixels en X, se que quedan asi las coordenadas XY
ob.x=100
ob.y=0
Por otra parte he hecho un sistema, un tanto cutre, pero que parece funcionar:
El eje X es horizontal y es positivo hacia la derecha
El eje Y es vertical y es positivo hacia abajo
Los 0 grados estan en el eje X positivo y crecen en sentido horario
x=0
y=0
distancia=100
angulo=80
Esto nos pone un objeto en las coordenadas X e Y indicadas, que avanzara 100 pixels con un angulo de 80 grados. Teniendo en cuenta como van los angulos, eso indica que va hacia abajo casi en linea recta, un poco a la derecha del eje Y positivo.
Finales teoricos:
x=0+100=100
y=0+100=100
Teniendo en cuenta solamente las coordenadas X e Y y la distancia, las coordenadas destino quedarian asi.
Lado X:
100 -> 100%
X -> 10 grados
X= 100*10/100=1000/100=10
x=0+10=10
Si avanzamos un 100%, recorremos 100 pixels.
El lado opuesto del angulo tiene 10 grados (recordemos que tenemos un giro de 80 grados, 90-80=10) y tenemos que calcular los pixels correspondientes.
Haciendo una regla de tres, nos da que tenemos una "ganancia" de 10 pixels.
Lado Y:
100 -> 100%
Y -> 80 grados
y=100*80/100=8000/100=80
y=0+80=80
Muy parecido a lo de antes.
Si avanzamos un 100%, recorremos 100 pixels.
El lado opuesto del angulo tiene ahora 80 grados (90-10).
Hacemos regla de tres y sale una ganancia en Y de 80 pixels
Coordenadas finales
x=0+10=10
y=0+80=80
A la coordenada X original (0) le sumamos la "ganancia" en X (10).
Hacemos lo mismo con la coordenada Y.
Lo que me tiene un tanto escamado es que 10+80 no suman 100 (la distancia que buscamos recorrer). Creo que eso indica que este metodo puede ser valido pero que falta pulirlo de alguna forma.
http://ayudaprogramacionmagazine.net/