Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Gravitación Universal (https://www.clubdelphi.com/foros/showthread.php?t=82051)

champy 20-01-2013 12:15:40

Gravitación Universal
 
1 Archivos Adjunto(s)
Esto no es una duda, es simplemente algo que he hecho y me gustaría compartir con la comunidad por si a alguien le pudiese ser de utilidad o simplemente por su curiosidad.

Hace un par de días estaba repasando algo de teoría de gravitación universal y en un momento de lucidez me pregunté a mi mismo. ¿Es tan simple?

Es decir, si dibujase unos puntos en pantalla, les asumiese una masa y les aplicase las formulas de la gravedad F=G*(m1m2)/r^2 ¿Realmente los objetos se comportarían como vemos en el mundo real? Complejos patrones de lunas orbitando planetas... planetas orbitando soles...

Así que aquí está la prueba de que, sí, es cierto. Esta sencilla unidad permite crear multitud de pequeños objetos en pantalla que se comportarán conforme a las leyes del genial Newton, la mayoría de los objetos serán atraidos unos hacia otros y se fusionarán formando objetos más masivos pero siempre aparecerá algún "perdido" que por su velocidad no podrá ser absorvido por el otro y comenzará a describir órbitas elípticas.

Solo me apena la limitaión de número del objetos por la gran cantidad de cálculos que requiere, (todos los objetos hacia todos los objetos), en mi I5 puedo crear hasta unos 50-60 objetos antes de que empieze a relentizarse el programa, en un centrino por el contrario se relentiza con unos 8 objetos.

Si quereis, claro está sois muy libres de intentar mejorar el programa o su rendimiento, sería un honor para mi ^_^

nlsgarcia 20-01-2013 16:40:35

champy,

Muy interesante ^\||/

Revisa estos links:
Cita:

Gravedad pixelada
http://delphimagic.blogspot.com.es/2...-pixelada.html

Simulación del movimiento de burbujas
http://delphimagic.blogspot.com.es/2.../burbujas.html

Simulación del movimiento de los electrones en un campo electrico
http://delphimagic.blogspot.com.es/2...to-de-los.html

Simulación del enfriamiento de una partícula
http://delphimagic.blogspot.com.es/2...to-de-una.html
Espero sea útil :)

Nelson.

dec 20-01-2013 16:46:15

Hola,

Muy curioso. :) Gracias por compartirlo. Y al compañero por los enlaces. ;)

Casimiro Notevi 20-01-2013 19:01:50

^\||/ .

ecfisa 21-01-2013 03:37:08

Hola champy.

Muy interesante, gracias por compartirlo ^\||/

Saludos. :)

matabyte 21-01-2013 09:34:02

Muy interesante, me lo apunto!

champy 21-01-2013 10:18:03

1 Archivos Adjunto(s)
Gracias, sé que no tiene ninguna utilidad tal como está pero es simple curiosidad.

He hecho algunas modificaciones para que se generen objetos aleatorios y para que se destruyan aquellos que se escapan de pantalla y nunca volveremos a ver.

Muy interesantes los links nlsgarcia, me llamó especialmente el de la gravedad pixelada por si podía mejorar algo mis funciones y la verdad que es muy llamativo, pero al revisar el código me he dado un pequeño chasco, no respeta ninguna regla de la realidad, casi todo su movimiento son "Randoms", eso si, es precioso :)

Ñuño Martínez 21-01-2013 12:59:24

Todo un clásico. ^\||/

Yo también hice mi versión hace años. Una cosa curiosa, si pones muchos objetos en el centro, apelotonados, hay un "small-bang", o al menos en mi programa era así. :)

Julián 21-01-2013 17:00:35

He tenido que desempolvar una maquina virtual con win para poder verlo. Y me he tirao una hora poniendo poniendo puntitos :).

Lo que dice ñuño de cuando pones muchos mas que un smallbang es todo un agugero negro que se traga cualquier cosa.

Ahora una sugerencia: deberías programarlo de modo que tuviera la opción de no tener que ir escribiendo los valores en el grid, así podría ir bastante mas fluido. Aunque en mi xp virtualizao he podido poner, al mismo tiempo, unos 200 puntos sin problema.

Un saludo!

champy 21-01-2013 17:51:25

Uy! si Julian, mira, en mi segundo post he puesto una version en la que el grid incluso desaparece.

Los objetos se crean de dos maneras, puedes hacer click en el TImage para crearlos o incluso activar la opcion de "generacion automatica" y el va generando objetos random cuando hay menos el minimo establecido.

Tambien Autodestruye aquellos que se alejan demasiado para no perder tiempo en calcular objetos que se han perdido para siempre.

Si quieres cambiar los valores de un objeto en lugar de ir al grid, puedes clickarlo. Aparecerá un menu donde puedes variar sus coordenadas, velocidades y masa.
Incluso puedes "frenarlo" para que seá un objeto estatico y no se escape por el empuje gravitatorio de los demas objetos.

champy 21-01-2013 18:19:47

El asunto de la cercanía extrema de los objetos es algo con lo que ya he peleado cuando hacía esta versión. Como dice ñuño pasan cosas extrañas y esto creo que se debe a la denominada "Singularidad" http://es.wikipedia.org/wiki/Singula...spaciotemporal

Es simple, si la fuerza es el producto de las masas entre el cuadrado de la distancia. (M1*M2) / d^2, ¿Que ocurre cuando la distancia es 0? no se puede dividir por 0, no es que el programa esté mal o que realmente pase eso, es que los humanos somos limitados y nuestras matemáticas no permiten hacer esa operación.

Así que si no controlas esa distancia destruyendo y fusionando los objetos pueden ocurrir cosas extrañas distintas de la realidad, velocidades imposibles a los objetos o incluso error del programa (Div 0)

nlsgarcia 21-01-2013 19:15:05

champy,

Revisa este link:
Cita:

Simulador de gravedad (flash): http://www.nowykurier.com/toys/gravity/gravity.html
Espero sea útil :)

Nelson.

champy 21-01-2013 20:21:27

Me encanta ^^ veo que es básicamente el mismo software pero en el suyo los objetos comienzan con una velocidad angular que les hace entrar en órbita ya desde el principio. Muy bueno. Intentaré ver el código fuente a ver si puedo aprender algo. :p

Ñuño Martínez 04-02-2013 13:21:51

Cita:

Empezado por Julián (Mensaje 453781)
Lo que dice ñuño de cuando pones muchos mas que un smallbang es todo un agugero negro que se traga cualquier cosa.

Leñes, pues en mi versión no pasa eso. Tendré que desempolvarla y revisarla, a ver si me estoy equivocando. :confused:

champy 04-02-2013 20:07:49

Compartela si quieres y le damos un vistazo entre todos. Yo estaba pensando si utilizar OpenGL y pasar el mio a 3D, podría ser curioso.

Delphius 05-02-2013 00:26:46

Dos cosas:
1) Se obtiene mejores resultados si se hace uso de DoubleBuffered :rolleyes:
2) Cuando se está trabajando con números muy chicos o muy grandes es deseable emplear la función Hypot; que por cierto dicho sea de paso Delphi ya la tiene implementada (al menos desde D6). Parece ser que a muchos se les escapa este detallito.

Lo demás sería pulir un poco el código, que hay partes que se podría mejorar, e incluso algunos cálculos redundantes. ;)
Por lo demás, interesante.

Saludos,

champy 06-02-2013 09:47:41

Si quieres mejorar algo Delphius, eres libre de hacerlo, es más, hasta te lo agradecería. Seguro que algo se puede aprender despues revisando las modificaciones.

Un lugar donde sé que se están haciendo cálculos redundantes es a la hora de calcular la fuerza entre dos objetos si esta fuerza ya se había calcula en dirección opuesta y el resultado es exactamente el mismo, me explico.

3 objetos 1, 2, 3, calculo las fuerzas entre ellos
1 -> 2 = 1N
1 -> 3 = 1N
En el segundo ya tengo algún cálculo repetido
2 -> 1 = 1N <- Este calculo sería prescindible puesto que ya se había obtenido esta fuerza en 1-> 2
2 -> 3 = 1N
En el tercer objeto
3 -> 1 = 1N <- Prescindible, ya la sabiamos de antes
3 -> 2 = 1N <- Prescindible, ya la sabiamos de antes

Esto eliminaría como la mitad de los cálculos, aunque no sé muy bien como implementarlo


La franja horaria es GMT +2. Ahora son las 03:33:32.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi