Foros-FIUBA Foros HostingPortal
 FAQ  •  Buscar  •  Wiki  •  Apuntes  •  Planet  •  Mapa  •  Eyeon  •  Chat
Preferencias  •  Grupos de Usuarios
Registrarse  •  Perfil  •  Entrá para ver tus mensajes privados  •  Login
Ver tema siguiente
Ver tema anterior

Responder al tema Ver tema anteriorEnviar por mail a un amigo.Mostrar una Lista de los Usuarios que vieron este TemaGuardar este Tema como un archivoPrintable versionEntrá para ver tus mensajes privadosVer tema siguiente
Autor Mensaje
dr4
Nivel 1



Registrado: 18 Dic 2014
Mensajes: 2


blank.gif
MensajePublicado: Jue Dic 18, 2014 7:45 am  Asunto:  eje de coordenadar con una rectangulo y una pelota Responder citandoFin de la PáginaVolver arriba

muy buenas! he leído que ayudáis con temas matemáticos y yo tengo algo que me esta deteniendo para desarrollar un juego y me gustaría saber si podrías ayudarme , veréis, el juego tiene rebotes en un eje de coordenadas, necesito conseguir una formula que me diga cuando una pelota está tocando un cuadrado en diagonal por cualquiera de sus lados, la idea es que rebote en diagonal en cuanto lo toque (http://s2.subirimagenes.com/otros/previo/thump_9208278rebote-rectangulo.jpg),pero eso ya puedo programarlo yo,lo que necesito es una formula para saber cuando la pelota esta tocando y cuando no, os paso la formula que utilizo por ejemplo para que la pelota rebote contra un rectángulo para que os hagais una idea de lo que necesito



circleDistanceX = Math.abs(circle.centrox - posicionxrectangulo - anchorectangulo/2);
circleDistanceY = Math.abs(circle.centroy - posicionydelrectangulo - alto del rectangulo/2);

if (circleDistanceX > (anchodelrectangulo/2+ circle.radio)) { return false; } (si esto pasa el circulo no esta tocando el rectangulo)

if (circleDistanceY > (altodelrectangulo/2 + circle.radio)) { return false; } (si esto pasa el circulo no esta tocando el rectangulo)

if (circleDistanceX <= (ancho del rectangulo/2)) { return true; } (es menor o igual,el circulo esta tocando el rectangulo)

if (circleDistanceY <= (altodelrectangulo/2)) { return true; } (es menor o igual,el circulo esta tocando el rectangulo)


   OfflineGalería Personal de dr4Ver perfil de usuarioEnviar mensaje privado
Huey 7
Nivel 6



Registrado: 03 Mar 2010
Mensajes: 267

Carrera: Electrónica
CARRERA.electronica.5.gif
MensajePublicado: Vie Dic 19, 2014 11:24 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Si entendí bien lo que querés, y suponiendo que hice bien las cuentas, definí:

Código:
circleDistanceX = circle.centrox - posicionxrectangulo - anchorectangulo/2
circleDistanceY = circle.centroy - posicionydelrectangulo - altodelrectangulo/2


Es decir, sin el Math.abs(). BTW, supongo que la "posición del rectángulo" (posicionxrectangulo y posicionydelrectangulo) es la de uno de sus cuatro vértices, ¿no?

Para que la pelota esté en condiciones de tocar uno de los cuatro bordes se tienen que cumplir simultáneamente estas 2 condiciones:

Código:
Math.abs(circleDistanceX * Math.cos(inclinacion) + circleDistanceY * Math.sin(inclinacion)) >= anchodelrectangulo/2 + circle.radio
Math.abs(circleDistanceY * Math.cos(inclinacion) - circleDistanceX * Math.sin(inclinacion)) <= altodelrectangulo/2


O simultáneamente estas 2 condiciones:

Código:
Math.abs(circleDistanceY * Math.cos(inclinacion) - circleDistanceX * Math.sin(inclinacion)) >= altodelrectangulo/2 + circle.radio
Math.abs(circleDistanceX * Math.cos(inclinacion) + circleDistanceY * Math.sin(inclinacion)) <= anchodelrectangulo/2


Donde inclinacion sería el ángulo de rotación del rectángulo, en las unidades que acepten las implementaciones del seno y coseno en el lenguaje / biblioteca que estés usando (radianes salvo que sea alguna implementación exótica). Si la desigualdad que tiene circle.radio es una igualdad para los valores de circle.centrox y circle.centroy, la pelota está tocando, si es una desigualdad estricta, no. Si no se cumple ninguno de los dos conjuntos de desigualdades, la pelota está lejos del rectángulo y no se lo puede cruzar en su camino en el corto plazo.

Cuando inclinacion vale 0 estás en el caso "horizontal", en el que las expresiones se reducen a lo que escribiste. Sólo que vos consideraste una sola de las desigualdades, y te estás olvidando de otra, que contempla que el rectángulo tiene dimensiones finitas. Si no la considerás, probablemente tu pelota termine rebotando contra una pared invisible a varios pixels de distancia del rectángulo xD

_________________
Comisión de Estudiantes de Ingeniería Electrónica (ComElec)
Lista de correo - Página Web - Facebook

 Género:Masculino  OfflineGalería Personal de Huey 7Ver perfil de usuarioEnviar mensaje privado
Mostrar mensajes de anteriores:      
Responder al tema Ver tema anteriorEnviar por mail a un amigo.Mostrar una Lista de los Usuarios que vieron este TemaGuardar este Tema como un archivoPrintable versionEntrá para ver tus mensajes privadosVer tema siguiente

Ver tema siguiente
Ver tema anterior
Podés publicar nuevos temas en este foro
No podés responder a temas en este foro
No podés editar tus mensajes en este foro
No podés borrar tus mensajes en este foro
No podés votar en encuestas en este foro
No Podéspostear archivos en este foro
No Podés bajar archivos de este foro


Todas las horas son ART, ARST (GMT - 3, GMT - 2 Horas)
Protected by CBACK CrackerTracker
365 Attacks blocked.

Powered by phpBB2 Plus, phpBB Styles and Kostenloses Forum based on phpBB © 2001/6 phpBB Group :: FI Theme :: Mods y Créditos

Foros-FIUBA está hosteado en Neolo.com Cloud Hosting

[ Tiempo: 0.5210s ][ Pedidos: 20 (0.4391s) ]