Gravedad

Started by zelda99, November 19, 2012, 11:21:43 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

gecko

Yo insisto en que la solucion de laghengar es la mas simple y facil de aplicar! :P
Torres Baldi Studio
http://torresbaldi.com

SplinterGU

Quote from: KeoH on November 22, 2012, 08:57:30 PM
Quote from: SplinterGU on November 22, 2012, 08:49:13 PM
y quisiera agregar, en el caso del objeto que flota o vuela, el angulo de gravedad no deberia variar, sino que lo que pasa es que se le aplica una fuerza externa y contraria que hace que este levite o flote, o por ejemplo, un viento que hace volar a todos los objetos.

Exactamente eso es lo que te iba a comentar ahora jejeje. Si tienes razón, el ángulo sería constante, a eso me he referido cuando decía dirección (la dirección del vector). Pero el tema de poder cambiar ese vector podría dar juego en algunos casos, en los juegos. Si por supuestamente pretendes simular la realidad, eso no tiene sentido.

Y por supuesto si quiero que un objeto levite, tendría q aplicarle una fuerza de intensidad igual (modulo del vector) y dirección igual al peso del objeto dentro de ese campo gravitatorio, con lo que el objeto tendría dos fuerzas actuando sobre el (vectores) que se anularían la una a la otra y el objeto flotaría.

Finalmente esa gravedad no es mas que una aceleración constante en modulo y dirección, que origina una fuerza sobre un objeto en función de su masa, lo que sería el peso. Si

vale, pero cuando dijiste que estaba equivocado, parecia como que decias que el metodo que decia no era valido para cualquier situacion... o sea, quedamos en claro que valido es, lo que no es, es conveniente.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

Quote from: gecko on November 22, 2012, 09:09:02 PM
Yo insisto en que la solucion de laghengar es la mas simple y facil de aplicar! :P

entre tanta charla ya no recuerdo el metodo de laghengar.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

laghengar

Nada, no puse nada. Borré él mensaje. Fallo mío por molestarme en responder, no es la primera vez que me pasa. Gracias Gecko. Alee me piro.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

Erkosone

Quote from: alex on November 22, 2012, 08:37:53 PM
Quote from: SplinterGU on November 22, 2012, 08:04:48 PM
Quote from: Rein (K´)ah Al-Ghul on November 22, 2012, 07:45:25 PM
Quote from: SplinterGU on November 20, 2012, 09:55:45 PM
una pregunta, o quizas tambien una sugerencia...

tu dices que la fisica se basa en gravedad y angulo de gravedad... pero no seria mejor poder definir objetos con (centro de) gravedad y que los demas objetos interactuen con este de acuerdo a la fuerza de gravedad que este objeto tiene y a la distancia que estan (obviamente el angulo se calcularia solo)?

por ejemplo, defino un objeto tipo planeta tierra (su centro) y la fuerza de su gravedad, ahora empiezo a poner objetos mas chicos, que seran atraidos por este centro, hasta encontrar un suelo, segun la distancia de este suelo se modifica automaticamente el angulo y la fuerza con que interactuan... lo mismo podria tener un objeto tierra y un objeto luna, ambos con su gravedad y los objetos que se aproximan a uno u a otro, seran afectados por la fuerza de gravedad de estos objetos.

no seria mejor que la cosa sea asi? digamos que solo cambiaria lo del angulo que seria calculado automaticamente...
curioso, se me ocurrio algo similar...
aun me falta codificarlo y probarlo
solo que ademas de la posicion (x,y) y la fuerza gravitatoria, coloque un limite o alcanze maximo (fuera de eso la gravedad provocada por la fuente es 0) y un factor de atenuacion (o cuanto se atenua por pixel)
con la posicion de la fuente y la propia del objeto se calcula la distancia y el angulo a la fuente
luego se obtiene un vector, al cual se le aplica la gravedad, se proyecta dicho vector en los eje X e Y, y se resta a la posicion del objeto



es que a medida que te alejas, la fuerza de atraccion de la gravedad va perdiendo fuerza, segun la fuerza (que tambien depende de la masa) es el radio de accion... aunque quizas no haya radio, sino fuerza segun distancia... y ese modelo es valido para cualquier cosa, macro y micro... ya que lo importante es donde se encuentre el centro de gravedad, puedes tener un escenario de 500mts o 1km y tener un centro de gravedad a 100km o 200km, no importa la distancia, pero la fisica deberia funcionar igual... como funciona en la vida real... para mi, es una unica simulacion... segun pienso, es un error pensar en una simulacion para macro y otra para micro... eso pienso yo, desde mi total ignorancia.

Splinter, creo que tienes mucha razon, yo lo veo que el modelo seria el mismo para cualquier distancia.
Pero para ser mas exactos, (la verdad es que seria muy costoso de trabajo), que yo creo que debe haber el minimo de leyes posibles, y a partir de ahi sacar las funciones para el calculo. Pues  que yo creo que las leyes fisicas estan regidas por leyes moleculares, y estas por los atomos, estas por neutron proton y electron, y estas por subparticulas, (la fisica cuantica). Y mucho nos queda por descubrir...

Segun esto, pienso que la mejor libreria de fisica (no hablando de fisica solo, sino de fisica-cuantica, quimica, etc.) seria una que organizara todas estas leyes, en una sola (la mas simple) y a partir de esta las derivadas, pudiendo crear asi funciones y funciones.

No solo eso, sino que asi se podria recrear facilmente el comportamiento humano (que no es mas que un monton de particulas chocando). y el futuro, analizando toda la materia y energia particula por particula. Claro, pero ya no estarias solo tratando de analizar las particulas de el tiempo en el que estas, sino de muchos mas universos temporales que al verlos en la el programa recreados, puedan afectar al espectador y cambiar sus pensamientos.
Y esto supondria crear unos nuevos ficheros, que lleven codificada la informacion de cada particula.

Aunque pueda parecer que se mucho, lo respondo como un chaval con mucha imaginacion XD, y que no tengo mucha idea.

En resumen... que para crear una lib de que incluya toda la ciencia todavia nos queda, pero que para una lib de fisica como decis prefiero la idea de Splinter, porque lo que se trata mas o menos es emular la realidad. Ya sea distorsionandola como el Mario Galaxy, o hacerla parecida como cualquier juego.

Quote from: KeoH on November 22, 2012, 08:29:11 PM
Pues ahí te equivocas Splinter !! xDDD Te lo dice uno que desperdició 5 años de vida en la Facultad de Física de la Universidad de Sevilla (España) hasta rendirse y cambiarse a Económicas jajajajajaja.

En un sistema micro ( una ciudad por ejemplo) el valor de la gravedad se toma constante y la dirección también. Para simplificar los cálculos .. no merece la pena utilizar la ley de gravitación universal para esos casos, porq la precisión no te hace falta y vas a tener un sobrecoste de calculo.

En un sistema macro (como un sistema planetario) si se usa la ley completa porq la dirección y la intensidad varían en el campo. También se hace una simplificación muy grande porque se estima que la masa del planeta es puntual. Si quieres considerar el volumen del planeta los cálculos se complican y para nosotros en este caso no nos aporta nada.

En la ley de gravitación universal el concepto de radio q aparece en la ecuación hace referencia a la distancia entre los dos puntos de masa, no al radio del planeta, la fuerza disminuye en intensidad con el cuadrado de la distancia, no linealmente.

Como bien dices Splinter para simular la gravedad se utiliza esta ley unicamente, pero si vas a simular un entorno micro como yo le digo, no merece la pena unos calculos tan costosos para los resultados q obtienes. Si vas a simular un objeto que orbita al rededor de otro si merece la pena, y aun asi se puede simplificar la cosa.


Si, en esa parte me parece bien tambien, porque consigues simplificar los calculos y economizar mucho.






Lo que comentas de la simulación molecular es exactamente lo que hacen box2D y chipmunk como tantas otras, no es otra cosa mas que eso mismo, aunque pueda parecer complicado no lo es para nada, lo que pasa es que el tema asusta un poco si no se conoce bien.


En realidad en un motor de física los objetos mas primitivos son "atomos" o "vectores" enlazados molecularmente por "constraints" que son simples limitadores que simulan los enlaces moleculares, a todo esto que parece tan retorcidamente complejo "que en realidad no lo es para nada" se le aplica un tercer limitador llamado "joint" que une moleculas para así crear un cuerpo complejo o objeto.


Sobre este tema se puede hablar largo y tendido, cada uno daría su opinión y seguramente nunca se llegaría a un consenso general por que cada cual lo ve desde su perspectiva, yo estoy de acuerdo con la teoría de Splinter, es razonable y lo que es mejor, es sumamente sencillo de implementar.


Hablando del método simple que proponía Laghengar, personalmente he usado este tipo de soluciones durante mucho tiempo, pero cuando he aprendido a razonar el comportamiento real de la gravedad lo he desestimado simplemente por que no es nisiquiera una aproximación lejana a la realidad, aunque sigue siendo completamente válido para un juego claro está.


Esto supongo que ya depende de lo que se busca para el juego en sí, pero está claro que si se hace con una función como la que propuse, el siguiente paso es implementar otra sencilla función que compruebe colisión entre circulos y segmentos, y ya se tiene un motor completo de física "sencillo" que simula paredes,techos, suelos y todo lo que sea necesario, sinembargo usando el método que apuntaba laghengar se está completamente limitado a lo que es, un sistema sencillo para hacer caer un objeto pero nada mas.


No critico el método pues está mas que demostrado que soluciones como esta están detrás de miles de juegos de NES, SNES incluso actuales, pero quizá sea un sistema demasiado simple y "cerrado" de hacer algo que en realidad si se hace como se tiene que hacer queda completamente integrado con todo lo que pueda venir después.


Pero vaya.. que lo que dije solo es "una opción mas" de todas las que puedan existir, ni es la buena ni es la mala, es solo una mas ;)

SplinterGU

Quote from: laghengar on November 22, 2012, 11:38:15 PM
Nada, no puse nada. Borré él mensaje. Fallo mío por molestarme en responder, no es la primera vez que me pasa. Gracias Gecko. Alee me piro.

sono mal lo que has dicho, o yo lo interprete mal, sono a que no valia la pena hablar con nosotros sobre tus ideas... me senti menospreciado... amigo, te pido disculpas si no fue tu intencion, pero no sono muy bien...

Quote from: Erkosone on November 23, 2012, 04:50:59 AM
Quote from: alex on November 22, 2012, 08:37:53 PM
Quote from: SplinterGU on November 22, 2012, 08:04:48 PM
Quote from: Rein (K´)ah Al-Ghul on November 22, 2012, 07:45:25 PM
Quote from: SplinterGU on November 20, 2012, 09:55:45 PM
una pregunta, o quizas tambien una sugerencia...

tu dices que la fisica se basa en gravedad y angulo de gravedad... pero no seria mejor poder definir objetos con (centro de) gravedad y que los demas objetos interactuen con este de acuerdo a la fuerza de gravedad que este objeto tiene y a la distancia que estan (obviamente el angulo se calcularia solo)?

por ejemplo, defino un objeto tipo planeta tierra (su centro) y la fuerza de su gravedad, ahora empiezo a poner objetos mas chicos, que seran atraidos por este centro, hasta encontrar un suelo, segun la distancia de este suelo se modifica automaticamente el angulo y la fuerza con que interactuan... lo mismo podria tener un objeto tierra y un objeto luna, ambos con su gravedad y los objetos que se aproximan a uno u a otro, seran afectados por la fuerza de gravedad de estos objetos.

no seria mejor que la cosa sea asi? digamos que solo cambiaria lo del angulo que seria calculado automaticamente...
curioso, se me ocurrio algo similar...
aun me falta codificarlo y probarlo
solo que ademas de la posicion (x,y) y la fuerza gravitatoria, coloque un limite o alcanze maximo (fuera de eso la gravedad provocada por la fuente es 0) y un factor de atenuacion (o cuanto se atenua por pixel)
con la posicion de la fuente y la propia del objeto se calcula la distancia y el angulo a la fuente
luego se obtiene un vector, al cual se le aplica la gravedad, se proyecta dicho vector en los eje X e Y, y se resta a la posicion del objeto



es que a medida que te alejas, la fuerza de atraccion de la gravedad va perdiendo fuerza, segun la fuerza (que tambien depende de la masa) es el radio de accion... aunque quizas no haya radio, sino fuerza segun distancia... y ese modelo es valido para cualquier cosa, macro y micro... ya que lo importante es donde se encuentre el centro de gravedad, puedes tener un escenario de 500mts o 1km y tener un centro de gravedad a 100km o 200km, no importa la distancia, pero la fisica deberia funcionar igual... como funciona en la vida real... para mi, es una unica simulacion... segun pienso, es un error pensar en una simulacion para macro y otra para micro... eso pienso yo, desde mi total ignorancia.

Splinter, creo que tienes mucha razon, yo lo veo que el modelo seria el mismo para cualquier distancia.
Pero para ser mas exactos, (la verdad es que seria muy costoso de trabajo), que yo creo que debe haber el minimo de leyes posibles, y a partir de ahi sacar las funciones para el calculo. Pues  que yo creo que las leyes fisicas estan regidas por leyes moleculares, y estas por los atomos, estas por neutron proton y electron, y estas por subparticulas, (la fisica cuantica). Y mucho nos queda por descubrir...

Segun esto, pienso que la mejor libreria de fisica (no hablando de fisica solo, sino de fisica-cuantica, quimica, etc.) seria una que organizara todas estas leyes, en una sola (la mas simple) y a partir de esta las derivadas, pudiendo crear asi funciones y funciones.

No solo eso, sino que asi se podria recrear facilmente el comportamiento humano (que no es mas que un monton de particulas chocando). y el futuro, analizando toda la materia y energia particula por particula. Claro, pero ya no estarias solo tratando de analizar las particulas de el tiempo en el que estas, sino de muchos mas universos temporales que al verlos en la el programa recreados, puedan afectar al espectador y cambiar sus pensamientos.
Y esto supondria crear unos nuevos ficheros, que lleven codificada la informacion de cada particula.

Aunque pueda parecer que se mucho, lo respondo como un chaval con mucha imaginacion XD, y que no tengo mucha idea.

En resumen... que para crear una lib de que incluya toda la ciencia todavia nos queda, pero que para una lib de fisica como decis prefiero la idea de Splinter, porque lo que se trata mas o menos es emular la realidad. Ya sea distorsionandola como el Mario Galaxy, o hacerla parecida como cualquier juego.

Quote from: KeoH on November 22, 2012, 08:29:11 PM
Pues ahí te equivocas Splinter !! xDDD Te lo dice uno que desperdició 5 años de vida en la Facultad de Física de la Universidad de Sevilla (España) hasta rendirse y cambiarse a Económicas jajajajajaja.

En un sistema micro ( una ciudad por ejemplo) el valor de la gravedad se toma constante y la dirección también. Para simplificar los cálculos .. no merece la pena utilizar la ley de gravitación universal para esos casos, porq la precisión no te hace falta y vas a tener un sobrecoste de calculo.

En un sistema macro (como un sistema planetario) si se usa la ley completa porq la dirección y la intensidad varían en el campo. También se hace una simplificación muy grande porque se estima que la masa del planeta es puntual. Si quieres considerar el volumen del planeta los cálculos se complican y para nosotros en este caso no nos aporta nada.

En la ley de gravitación universal el concepto de radio q aparece en la ecuación hace referencia a la distancia entre los dos puntos de masa, no al radio del planeta, la fuerza disminuye en intensidad con el cuadrado de la distancia, no linealmente.

Como bien dices Splinter para simular la gravedad se utiliza esta ley unicamente, pero si vas a simular un entorno micro como yo le digo, no merece la pena unos calculos tan costosos para los resultados q obtienes. Si vas a simular un objeto que orbita al rededor de otro si merece la pena, y aun asi se puede simplificar la cosa.


Si, en esa parte me parece bien tambien, porque consigues simplificar los calculos y economizar mucho.






Lo que comentas de la simulación molecular es exactamente lo que hacen box2D y chipmunk como tantas otras, no es otra cosa mas que eso mismo, aunque pueda parecer complicado no lo es para nada, lo que pasa es que el tema asusta un poco si no se conoce bien.


En realidad en un motor de física los objetos mas primitivos son "atomos" o "vectores" enlazados molecularmente por "constraints" que son simples limitadores que simulan los enlaces moleculares, a todo esto que parece tan retorcidamente complejo "que en realidad no lo es para nada" se le aplica un tercer limitador llamado "joint" que une moleculas para así crear un cuerpo complejo o objeto.


Sobre este tema se puede hablar largo y tendido, cada uno daría su opinión y seguramente nunca se llegaría a un consenso general por que cada cual lo ve desde su perspectiva, yo estoy de acuerdo con la teoría de Splinter, es razonable y lo que es mejor, es sumamente sencillo de implementar.


Hablando del método simple que proponía Laghengar, personalmente he usado este tipo de soluciones durante mucho tiempo, pero cuando he aprendido a razonar el comportamiento real de la gravedad lo he desestimado simplemente por que no es nisiquiera una aproximación lejana a la realidad, aunque sigue siendo completamente válido para un juego claro está.


Esto supongo que ya depende de lo que se busca para el juego en sí, pero está claro que si se hace con una función como la que propuse, el siguiente paso es implementar otra sencilla función que compruebe colisión entre circulos y segmentos, y ya se tiene un motor completo de física "sencillo" que simula paredes,techos, suelos y todo lo que sea necesario, sinembargo usando el método que apuntaba laghengar se está completamente limitado a lo que es, un sistema sencillo para hacer caer un objeto pero nada mas.


No critico el método pues está mas que demostrado que soluciones como esta están detrás de miles de juegos de NES, SNES incluso actuales, pero quizá sea un sistema demasiado simple y "cerrado" de hacer algo que en realidad si se hace como se tiene que hacer queda completamente integrado con todo lo que pueda venir después.


Pero vaya.. que lo que dije solo es "una opción mas" de todas las que puedan existir, ni es la buena ni es la mala, es solo una mas ;)

demas esta decir que interesa sobremanera tu implementacion de fisica, y creo que puede ser una base para ampliarla al modelo que estamos debatiendo... y que pueda funcionar de ambas maneras...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Erkosone

Estoy corrigiendo una función que comprueba intersección entre circulo/segmento, tiene un pequeño error en un extremo del segmento, en cuanto la corrija os la comparto sin ningún problema, seguro que viene alguien detrás y la mejora, de eso se trata en realidad todo esto jeje..


Os dejo un código de ejemplo en Bennu donde se puede ver perfectamente lo que comentaba sobre la gravedad y la fricción, son 2 funciones muy muy básicas y sencillas que permiten lo siguiente:


Control pleno sobre la gravedad, orientación y cantidad, se pueden manipular de forma completamente dinámica si así se desea.
Control de un simple proceso con los cursores, con las teclas de cursor se añade una pequeña cantidad de velocidad al objeto y se puede manejar por la pantalla.
Control de fricción de la escena, ajustando el valor de la variable 'friction' se consigue manipular el entorno para que simule a una valor de 1.0 un entorno normal, y a valores como 0.95 o inferiores un entorno acuatico etc etc.. "cambia la viscosidad del entorno por así decirlo".


Espero que os guste, esto es una pequeña muestra de lo que he comentado, tremendamente simple y que salta a la vista el potencial que tiene para juegos ;)
No es nada serio.. es un simple ejemplo conceptual:



import "mod_video"
import "mod_say"
import "mod_mouse"
import "mod_text"
import "mod_map"
import "mod_draw"
import "mod_math"
import "mod_key"


Local
   float x_;
   float y_;
   float oldx_;
   float oldy_;


Global
   float aGravity = 90000;
   float vGravity = 0.098;
   float friction = 1.0;


Process main()
Begin
    set_mode(640, 480, 16);
   set_fps(30, 0);
   graph = makeMyGraph(20, 20);
   
   // coloco el objeto en la posición inicial..
   x = x_ = oldx_ = 320;
   y = y_ = oldy_ = 50;
   
   
   loop
      if(key(_c_up))
         addVelocity(1.0, 90000.0);
      end
      if(key(_c_left))
         addVelocity(1.0, 180000.0);
      end
      if(key(_c_right))
         addVelocity(1.0, 0.0);
      end
      
      
         
      updatePoint();
      checkScreenDownLimit();
      frame;
   end
end
//.....................................................................................
// Ejemplo de función que auna el computo del efecto gravedad y fricción con el medio..
function updatePoint();
private
    float dx;
    float dy;
begin
    dx = father.x_ - father.oldx_;
    dy = father.y_ - father.oldy_;
    father.oldx_ += dx;
    father.oldy_ += dy;
    father.x_ += friction * (dx + vGravity * cos(aGravity));
    father.x = father.x_;
    father.y_ += friction * (dy + vGravity * sin(aGravity));
    father.y = father.y_;
    return(0);
end
//.....................................................................................
function makeMyGraph(int ancho, int alto);
private
   int buffer_;
begin
   buffer_ = new_map(ancho, alto, 16);


   for(y=0; y<alto; y++)
      for(x=0; x<ancho; x++)
         map_put_pixel(0, buffer_, x, y, rgb(100,100,100));
      end
   end
   return(buffer_);
end
//.....................................................................................
function addVelocity(float vel_, float angle_);
begin
   father.x_ += (vel_ * cos( angle_ )) * friction;
   father.y_ -= (vel_ * sin( angle_ )) * friction;
   return(0);
end
//.....................................................................................
function checkScreenDownLimit();
begin
   if(father.y_ > 470)
      father.y_ = father.oldy_ = 470;
   end
   return(0);
end
//.....................................................................................




SplinterGU

por lo que se ve en los videos que has puesto, mejorar no creo que haga falta, simplemente expandirla (si realmente hace falta, o como experimiento, porque mola mucho como funciona)

me gustaria ver el rendimiento con bennugd.

saludos y gracias por todo, excelente trabajo!
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

laghengar

No fue así, Splinter, un saludo y disculpas. Sigue con tu trabajo que es muy grande.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

SplinterGU

para que me mandes a seguir con lo mio... evidentemente algo de lo que dije/hice te ofendio... te pido disculpas... y me gustaria saber que fue para intentar remediar la situacion...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

laghengar

Quote from: SplinterGU on November 23, 2012, 02:43:07 PM
para que me mandes a seguir con lo mio... evidentemente algo de lo que dije/hice te ofendio... te pido disculpas... y me gustaria saber que fue para intentar remediar la situacion...

Na no era una frase para mandar, disculpa, era de ánimo. Un saludo.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

zelda99

muchas gracias a todos los que colaboraron, tengo mucho codigo que leer =)