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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  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 8,164 veces)
leosansan


Desconectado Desconectado

Mensajes: 1.314


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

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

Si las cajas están perpendiculares al suelo, vamos apoyadas o paralelas al suelo, bastaría "jugar" con los cuatro vértices del suelo de cada caja y, aún así, hay unos cuantitos casos. ¿Seguro que el programa no trae incorporada la opción collision?.



REEDITO:

Cada línea rosa es una posible colisión, en total ocho y como hay cuatro lados treinta y dos en total y usando distancia de un punto a una recta inclusive, suponiendo que la caja móvil se pueda acercar a la fija por delante, por detrás, por la derecha, por la izquierda o por cada esquina.Y eso sin girar el cubo móvil respecto al tercer eje. Creo que debe haber un método más simple que el puramente matemático. Pero si lo consideras "razonable" me pongo a ello

Saluditos y ánimos! ....


REEDITO: Ya he conseguido reducir los 16 casos de colisiones"laterales" a uno sólo usando las coordenadas de los centros.


« Última modificación: 23 Abril 2013, 16:38 pm por leosansan » 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 #11 en: 24 Abril 2013, 14:37 pm »

Gracias  ;-)
No, no hay ningún método "collision" para hacerlo por que básicamente lo estoy programando yo al 100% (de librería externa sólo el OpenGL)
He conseguido detectar la colisión, determinar si choca de frente, desde arriba o desde abajo. En los casos de Arriba y abajo, funciona bien (arriba, pues gravedad = 0; y desde abajo, Aceleracion = -Aceleración). El problema viene cuando tengo que programar que, determine con qué cara choca, la dirección, y la dirección de desplazamiento. Alguna forma sencillita de hacerlo?


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 #12 en: 24 Abril 2013, 23:59 pm »

Bueno, yo he estado pensando como detectar las colisiones, y personalmente si las cajas son rectangulares, de lados sin ninguna relacion entre si, y que pueden medir cualquier valor distinto de 0, creo que no se puede hacer de una manera sencilla. Seria mas o menos abordable si las cajas no giraran, pero ademas pueden incidir una sobre otra en cualquier grado de inclinacion.

Ademas tengo una pregunta ¿Las cajas pueden atravesarse entre si? Si no fuera asi (seria como simular solidos) se cumpliria una propiedad interesante, y que da pie a simplificar el algoritmo: "En todos los choques, al menos un vertice de una de las cajas de encuentra sobre la superficie de la otra". Y podria empezar a trabajar por ahi, comprobando la pertenencia de los vertices de la caja 0 a las rectas que delimitan la 1, y que ademas lo hagan en el intervalo de valores en que los puntos de dicha recta forman el lado de la caja 1. Con un calculo reciproco de este estilo, para todos los vertices y para todas las rectas, habria una deteccion 100% segura de la colision o no colision, y ademas se sabria al menos un punto de contacto, que quizas te sirva para, posteriormente, jugar con las fisicas como comentas.

En principio con solo la distancia entre los centros no se puede detectar con absoluta certeza una colision de cajas rectangulares de forma arbitraria, y que pueden no estar alineadas con los ejes de ninguna forma, pues son capaces de girar sobre su centro incrementos de angulo no acotados.
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 #13 en: 25 Abril 2013, 16:41 pm »

jaja gracias por tu respuesta, ya he conseguido detectar las colisiones perfectamente, ahora me falta la parte dificil, determinar si puedo avanzar o no hacia ellas
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 #14 en: 25 Abril 2013, 16:51 pm »

Seria interesante ver como lo has hecho, o que lo explicaras por encima si estas de acuerdo. ¿A que te refieres con avanzar hacia ellas?
« Última modificación: 25 Abril 2013, 16:54 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 #15 en: 26 Abril 2013, 14:53 pm »

Pues, con lo de moverme hacia ellas, me refiero a que, cuando avanzas hacia un objeto, choques y no lo puedas atravesar, pero teniendo un vector de dirección especifico para cuando estás colisionando y deslizarte por la cara.

El codigo de detección es algo así:
Código
  1. bool Colision_Pj_Objeto(int IdObjeto){
  2.  
  3. pj.bounding.Crear(pj.bounding.Tipo,0);
  4. objeto[IdObjeto].bounding.Crear(objeto[IdObjeto].bounding.Tipo,IdObjeto);
  5.  
  6. for(int i=1;i<9;i++){
  7. if(Colision_Punto_ABCD(pj.bounding.vx[i],pj.bounding.vy[i],pj.bounding.vz[i],IdObjeto) == true) return 1;
  8. }
  9.  
  10. return 0;
  11. }
  12.  
  13. bool Colision_Punto_ABCD(float p_x,float p_y,float p_z,int IdObjeto){
  14.  
  15. //if(objeto[IdObjeto].usado == true){
  16.  
  17.    if(p_x >= objeto[IdObjeto].bounding.vx[1] && p_x <= objeto[IdObjeto].bounding.vx[3] &&
  18.    p_y >= objeto[IdObjeto].bounding.vy[2] && p_y <= objeto[IdObjeto].bounding.vy[1] &&
  19.    p_z >= objeto[IdObjeto].bounding.vz[5] && p_z <= objeto[IdObjeto].bounding.vz[1])
  20.    {
  21.        return true;
  22. }
  23. return false;
  24. }
« Última modificación: 26 Abril 2013, 14:54 pm por Black Master » En línea

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


Desconectado Desconectado

Mensajes: 499


Error, el teclado no funciona. Pulse F1 para continuar


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

Saco una foto, estoy haciendo un game engine (mi primer juego, justo acababa de aprender c++ de forma decente cuando me metí con OpenGL). Os cuento el problema desde el principio:
Tengo 3 tipos de detectores de colisiones programados:
 - Bounding sphere (para cosas que no requieren precision absoluta como coger monedas)
 - Axis aligned Bounding Box (Los bloques de terreno "B")
 - Objet aligned bounding box (El personaje "A")
Tengo programada una simulación de la gravedad que hace que cada frame (el juego está capado a 30fps) baje un poco a no ser que haya colision. Detectar la colision entre los dos bloques es fácil, pero no sé luego como saber si estoy chocando de frente, de costado... y a partir de eso evitar ciertos movimientos como caminar hacia el objeto (deslizarse por el objeto)
Dejo un video del juego en cuestión (Minuto 2:15, donde el cursor es rojo, es el que digo)


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 #17 en: 26 Abril 2013, 15:34 pm »

Pues, con lo de moverme hacia ellas, me refiero a que, cuando avanzas hacia un objeto, choques y no lo puedas atravesar, pero teniendo un vector de dirección especifico para cuando estás colisionando y deslizarte por la cara.
Por decir algo, no puedes hacer que su velocidad sea cero?.

O activar algun booleano para indicar que deje de mover.
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 #18 en: 26 Abril 2013, 17:10 pm »

Si, es lo que estoy intentando: que cuando choques con una cara, la dirección hacia esa cara se bloquee y no se desplace hacia ese eje. He conseguido hacerlo bastante decente, ya os contaré  ;-)
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 #19 en: 26 Abril 2013, 17:11 pm »

Como dicen arriba, podrias simplemente pararlo, o si sabes un punto que hace colision me imagino que sabras la cara del otro objeto con la que estas colisionando, y si conoces la direccion del movimiento y la velocidad, podrias hacer que en el momento de la colision solo permaneciera la componente de la velocidad tangencial a dicha superficie, si la hubiera. Asi la caja cuando chocara se seguiria moviendo pero nunca hacia dentro de la otra, sino pegado a ella, deslizando.

Simplificandolo para un objeto movil y otro inmovil, se puede hacer de una manera sencilla, pero me tienes que decir si puedes saber sobre que cara del objeto inmovil chocas y si conoces la velocidad y la direccion del objeto movil en todo momento. Si conoces esas tres cosas se hace facil.

« Última modificación: 26 Abril 2013, 17:20 pm por Kilowatt » En línea

Páginas: 1 [2] 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Matematicas en programacion [ayuda]
Programación General
Psyke1 2 3,154 Último mensaje 6 Mayo 2010, 23:04 pm
por Psyke1
Ayuda de matematicas!!! « 1 2 »
Foro Libre
Angel Zero 18 8,916 Último mensaje 30 Julio 2010, 19:40 pm
por Angel Zero
Ayuda, matemáticas,ecuación de primer grado. « 1 2 »
Dudas Generales
anonimo12121 10 9,166 Último mensaje 3 Febrero 2011, 15:15 pm
por anonimo12121
Ayuda: Mejorar en matemáticas
Foro Libre
orocrux 3 1,491 Último mensaje 7 Enero 2015, 00:47 am
por JonaLamper
ayuda con matematicas
Dudas Generales
MRx86 3 2,378 Último mensaje 1 Diciembre 2016, 15:23 pm
por MCKSys Argentina
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines