elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con las matemáticas !!!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con las matemáticas !!!  (Leído 9,130 veces)
BlackM4ster


Desconectado Desconectado

Mensajes: 499


Error, el teclado no funciona. Pulse F1 para continuar


Ver Perfil WWW
Ayuda con las matemáticas !!!
« en: 10 Abril 2013, 20:36 pm »

Hola, estoy programando bounding boxes y tengo un problema a la hora de girar el objeto. P es el centro del objeto, tenemos el tamaño de x y de z. También tenemos el ángulo de rotación respecto al eje Z. Cual sería la formula para sacar el punto B en el segundo ejemplo?



En línea

- Pásate por mi web -
https://codeisc.com
avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Ayuda con las matemáticas !!!
« Respuesta #1 en: 10 Abril 2013, 21:30 pm »

Es que te podría ayudar pero no entiendo como está el objeto en el plano ahora mismo, aunque suponiendo que quieres girarlo con respecto al eje Z puedes usar trigonometría(que creo que sigue valiendo en el 3D por lo menos en este caso):
Siendo un punto B(1x,2y,3z) girarlo con respecto al eje Z 20º ,como la altura no cambia pues puedes girarlo con trigonometría quedando el punto

B' = ( cos(20) * 1 , 2 * sen (20) , 3z) = ( 0,93x , 0,68y , 3z)



« Última modificación: 10 Abril 2013, 21:33 pm por avesudra » En línea

Regístrate en
BlackM4ster


Desconectado Desconectado

Mensajes: 499


Error, el teclado no funciona. Pulse F1 para continuar


Ver Perfil WWW
Re: Ayuda con las matemáticas !!!
« Respuesta #2 en: 10 Abril 2013, 21:33 pm »

mm interesante, lo estaba resolviendo yo de esta manera:
Código:
dist[1] = sqrt(pow(pj.x-vx[1],2)+pow(pj.z-vz[1],2));
for (int i=1;i!=9;i+=2){
vx[i] = pj.x + dist[1] * sin((pj.ang_x+ang[i])*PI/180);
vz[i] = pj.z + dist[1] * cos((pj.ang_x+ang[i])*PI/180);}
En línea

- Pásate por mi web -
https://codeisc.com
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Ayuda con las matemáticas !!!
« Respuesta #3 en: 10 Abril 2013, 21:37 pm »

En lugar de PI/180, pon:

Código:
0,0174532

Le quitas a la maquina una división ingame (recuerda que la división es una operación costosa).
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
BlackM4ster


Desconectado Desconectado

Mensajes: 499


Error, el teclado no funciona. Pulse F1 para continuar


Ver Perfil WWW
Re: Ayuda con las matemáticas !!!
« Respuesta #4 en: 10 Abril 2013, 21:45 pm »

Muchas gracias a los 2, es cierto, pero la optimizacion la haré más tarde  ;-)
En línea

- Pásate por mi web -
https://codeisc.com
Kilowatt

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: Ayuda con las matemáticas !!!
« Respuesta #5 en: 11 Abril 2013, 16:26 pm »

Siento si interrumpo, solo pasaba por aqui, vi el problema y me gustaria poner mi solucion a ver si la ven bien.

Trasladas el eje a p (Al final sumaras las coordenadas del vector (OP) que une el origen que finalmente uses y el punto p).

Ahora, conoces el vector Bp (B con coordenadas con respecto a P)  y quieres B'P (B' con coordenadas tambien con respecto a P). En tu ejemplo, Bp seria ((-tam_x/2)X + (tam_z/2) Z).

Sabiendo Bp conoces Xbp y Zbp, sus coordenadas, por lo que tambien:
El modulo de Bp: Mbp = ((Xbp^2)+(Zbp^2))^(1/2);
Su angulo con respecto al eje P: Abp=arctg(Zbp/Xbp);

Tambien sabes el angulo de rotacion, que sera positivo o negativo segun el sentido de rotacion, en tu ejemplo negativo: -Ar.

Asi que las coordenadas de B'p seran ((Mbp*Cos(Abp - Ar))X + (Mbp*Sen(Abp - Ar))Z)

Y tu punto B' con respecto al eje que quieras usar (O) sera:

B' = (Xb'p + Px, Zb'p + Pz); Donde (Xb'p , Zb'p) son las coordenadas del vector B'p, ya hallado ; y (Px , Pz) son las coordenadas del punto p con respecto a O.
« Última modificación: 11 Abril 2013, 16:30 pm por Kilowatt » En línea

BlackM4ster


Desconectado Desconectado

Mensajes: 499


Error, el teclado no funciona. Pulse F1 para continuar


Ver Perfil WWW
Re: Ayuda con las matemáticas !!!
« Respuesta #6 en: 12 Abril 2013, 15:12 pm »

 ;-) Te aplaudo, gracias por la respuesta. Ahora mismo, los bounding boxes son cuadrados (angulos de 45º y 135), asi que directamente los pongo yo. Estoy trabajando en un loader de objetos en 3D. Cuando acabe de hacerlo, aplicaré tu forma ya que no serán todos cuadrados. Por casualidad no sabrias detectar colisiones entre un bounding box alineado al objeto y otro? o uno alineado y el otro a los ejes?
En línea

- Pásate por mi web -
https://codeisc.com
Kilowatt

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: Ayuda con las matemáticas !!!
« Respuesta #7 en: 22 Abril 2013, 19:51 pm »

Antes de nada, perdon por la tardanza.

Realmente no se a que te refieres con bounding box alineado al objeto, porque de programacion en C no voy muy alla, solo he hecho java. De todas formas voy a suponer que el bounding box delimita hasta donde llega el objeto (por su nombre) y quieres saber si hay colision entre dos de estas cajas. A no ser que ya haya metodos que faciliten el trabajo, detectar una colision lleva un poquito de trabajo desde mi punto de vista, pero supongamos algo:

Lo normal es que no haya colisiones, asi que un metodo que no requiera mucho trabajo por parte del PC y que si da true significa que NO HAY colisiones sera el siguiente (Ojo, si este algoritmo da true significa que no hay colisiones, pero si da false no significa nada, puede que las haya o puede que no, y tendremos que estudiarlo mas a fondo, pero en principio esta bien para ponerlo de condicion en un if y ahorrarnos computo si lo normal es que no se produzcan colisiones).

El principio es el siguiente: Tenemos dos bounding boxes, una centrada en P0 y otra en P1, si sus origenes distan mas de la distancia entre el punto de la BB en P0 mas lejano del centro (P0), sumado a la distancia del punto de la BB en P1 mas lejano del centro (P1), es imposible que haya colision.

Esto es, si el modulo del vector que va desde P0 hasta P1, desde ahora P01, es menor que dicha distancia, da false. Definamos algunas cosas:

P01 = ((XP0 - XP1)X + (ZP0 - ZP1)Z); Vector P01
MP01 = ((XP01)^2 + (ZP01)^2)^(1/2) = ((XP0 - XP1)^2 + (ZP0 - ZP1)^2)^(1/2) ; Modulo del vector P01

Ahora necesitamos la distancia al centro del punto(s) mas lejano. Siendo cuadrados, dichos puntos son los vertices, llamemos a la longitud del lado de la BB0, L0, y L1 para el lado de BB1. Voy a generalizarlo para rectangulos, pues en tu ejemplo has llamado de distinta forma a los lados (tam_x y tam_z), asi que supongo que no tienen porque ser iguales, de esta forma BB0 tiene los lados L0A y L0B, y BB1 tiene L1A y L1B. (Ejemplo: si la caja de tu dibujo fuera BB0, L0A seria tam_x y L0B sera tam_z o al reves, el orden es indiferente). Definimos:

DM0 = ((L0A/2)^2 + (L0B/2)^2)^(1/2); Mayor distancia desde P0 hasta un punto contenido en BB0, esto es, a cuanta distancia esta el punto mas externo de BB0.
DM1 = ((L1A/2)^2 + (L1B/2)^2)^(1/2); Analogo a DM0, pero para BB1.

Asi, si MP01 es menor que DM0 + DM1, el algoritmo da true y deberias estudiar mas a fondo lo que esta pasando con otro algoritmo que pensare luego para hacerlo con la mayor simpleza que se me ocurra. Sin embargo, si da false, puedes descartar toda posibilidad de colision.

Espero que te sirva de algo, aunque lo he hecho bastante rapido sin pensarlo mucho, asi que puede ser que tenga errores o que haya una manera mas rapida y facil de hacerlo y la he pasado por alto. Intentare ponerte que haria yo en caso de que diera false lo antes posible.

Un saludo.
« Última modificación: 22 Abril 2013, 20:59 pm por Kilowatt » En línea

Kilowatt

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: Ayuda con las matemáticas !!!
« Respuesta #8 en: 22 Abril 2013, 21:14 pm »

He estado pensando un poco lo de las colisiones, y aunque creo que voy camino de dar con un metodo, me facilitaria mucho las cosas saber con que informacion de las bounding boxes cuentas en todo momento, ademas de las coordenadas del centro y la longitud de sus lados. Si pudiera conocer su grado de inclinacion o la posicion concreta de sus vertices en ese momento por ejemplo atajaria bastante, ya que con lo que se estoy haciendo cosas demasiado complejas para calcular algo tan simple, asi que dudo que tenga alguna utilidad.
En línea

BlackM4ster


Desconectado Desconectado

Mensajes: 499


Error, el teclado no funciona. Pulse F1 para continuar


Ver Perfil WWW
Re: Ayuda con las matemáticas !!!
« Respuesta #9 en: 23 Abril 2013, 15:14 pm »

Pues yo he conseguido sacar los ocho vertices de ambos bounding boxes y sería con eso
En línea

- Pásate por mi web -
https://codeisc.com
Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con las matemáticas !!!
Programación General
BlackM4ster 1 2,325 Último mensaje 24 Abril 2013, 19:22 pm
por Saberuneko
Ayuda con las matemáticas 2 !!!
Programación C/C++
BlackM4ster 4 2,883 Último mensaje 14 Abril 2013, 11:35 am
por BlackM4ster
Ayuda: Mejorar en matemáticas
Foro Libre
orocrux 3 1,694 Último mensaje 7 Enero 2015, 00:47 am
por JonaLamper
ayuda con matematicas
Dudas Generales
MRx86 3 2,561 Último mensaje 1 Diciembre 2016, 15:23 pm
por MCKSys Argentina
Develar un hash sha 256 o 512 con matematicas vorticiales
Hacking
Kerstui 4 5,186 Último mensaje 15 Mayo 2024, 01:09 am
por Serapis
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines