Miércoles 6 de Noviembre de 2024, 02:34
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Transformacion De Figuras En 2d (x,y)
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Transformacion De Figuras En 2d (x,y) (Leído 2118 veces)
scullyERA
Miembro activo
Mensajes: 42
Nacionalidad:
Transformacion De Figuras En 2d (x,y)
«
en:
Martes 7 de Febrero de 2006, 19:47 »
0
-----Hola a todos. Estoy entrando apenas a la graficación y sus principios y me acaban de dejar un proyecto en el que tenemos que hacer que un cochecito pueda ser movido por el usuario y cuando llegue a una esquina cualquiera se pueda rotar (90° grados a la izquierda o derecha o 180° en el caso de regresar por el mismo camino). Con la traslación creo no tener problemas, pero con respecto a la rotación tengo 2 problemas:
-----En el caso de usar las fórmulas
x'= cos (angulo) * radio
y'= sen (angulo) * radio
necesito saber el angulo al que se encuentra el punto a rotar, en el caso de 0°, 45°, 90° y múltiplos de estos no hay bronca, pero sólo cuando yo le pongo el "angulo normal" en que se encuentra; pero no siempre se encuentran en estos angulos y NO SÉ NI ENCUENTRO UNA FORMA EFICIENTE Y LIBRE DE ERRORES de cómo conseguir el ángulo en el que se encuentra el punto para después rotarlo n grados; como un principio hice lo sig:
Código: Text
struct PUNTO
{int x,y;};
float angulo (PUNTO p, PUNTO p0, float r)
{float a=0; //el angulo
PUNTO q; //punto a rotar
do
{a+= (0.001*PI)/180; //incrementamos el angulo actual en 0.001 grados
q.x= p0.x +r* cos (a); //conseguimos el nuevo valor de x
q.y= p0.y -r* sin (a); //conseguimos el nuevo valor de y
} while (q.x != p.x && a< 2*PI || q.y != p.y && a< 2*PI);
if (a >= 2*PI) //si el angulo es mayor o igual a 360 grados
printf ("Las coordenadas del punto son (%d,%d)",
q.x -maxx/2, q.y -maxy/2);
return a;
}
-----Lo que hice era teniendo un punto p (componentes x,y) y un eje de rotacion p0. De acuerdo a su distancia r rotaba un punto q desde al angulo cero hasta que sus componentes (x,y) concordaran exactamente con los del punto p original, y el angulo final era el supuesto angulo del punto p, pero como verán este metodo es muy subjetivo y tiene sin duda errores.
-----Después lo intenté hacer con las fórmulas
x'= x * cos (angulo) - y * sen (angulo)
y'= x * sen (angulo) + y * cos (angulo)
pero en el proceso de rotación, el radio entre el eje de rotación y el punto no se mantenía constante y me hacía unos desajustes que no comprendo.
-----Por lo que tengo entendido (he escuchado) se necesita uso de matrices para rotar un punto, alguien me podría decir cómo se le hace para rotar un punto?? Les agradecería mucho una explicación o ayudadita de cómo hacerlo.
Tweet
Amilius
Miembro HIPER activo
Mensajes: 665
Re: Transformacion De Figuras En 2d (x,y)
«
Respuesta #1 en:
Martes 7 de Febrero de 2006, 21:48 »
0
Veo que te falta base matemática, lo que necesitas es la funcion arco de la tangente, y mejor el clasico "atan2", que recibe los delta x y delta y y de devuelve el angulo.
Incluso se hace en ensamblador con 4 instrucciones.
FLD Y
FLD X
FPATAN
FWAIT
P.D. Lo natural siempre es usar radianes. Desecha los "grados", eso solo sirve para mostrar informacion final, nunca los metas en tus calculos internos.
patitofeo
Miembro MUY activo
Mensajes: 145
Re: Transformacion De Figuras En 2d (x,y)
«
Respuesta #2 en:
Jueves 9 de Febrero de 2006, 13:13 »
0
Si solo necesitas rotar a razon de 90º o 180º yo te aconsejo que no utilices trigonometria y hagas tratamiento matricial que es mas rapido y eficiente.
para rotar una imagen 90º solo tienes que hacer la transpuesta
para rotar 180º invierte el orden de las columnas y de las filas
para rotar 270º las suma de ambas.
Asi te ahorras hacer el calculo trigonometrico de cada pixel.
Saludos
Solman
Miembro MUY activo
Mensajes: 151
Re: Transformacion De Figuras En 2d (x,y)
«
Respuesta #3 en:
Lunes 13 de Febrero de 2006, 13:31 »
0
yo logre hacer eso q quieres hacer mira lo puedes bajar..... jeje
http://www.tiendaguadalajara.com/descargasvj.php?inicio=12
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Transformacion De Figuras En 2d (x,y)