Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mensajes - DaniM

Páginas: [1] 2 3 4 ... 11
1
Hombre, pues por contar puedes contar lo que quieras...

2
A mí también me vendrán bien para refrescar conceptos, y es todo un lujo poder escuchar al propio Luis Fuentes explicándotelos. Muchas gracias! 😊

PD: Ni cuatro segundos de vídeo han hecho falta para saber que eres gallego. 🤭

3
Si lo haces con programación orientada a objetos se te simplifica bastante la cosa porque puedes controlar el estado de cada objeto de forma independiente. Por ejemplo, aquí cada escalera sería un objeto que instanciarías de la clase Escalera y tendría al menos tres atributos: posicion, altura y veces_contactada, que a su vez contendría las cuatro direcciones que necesitas.

A su vez, el personaje tendría al menos dos atributos que definirían su posición y su velocidad. Entonces básicamente compararías la posición \( (x, y) \) del personaje con la posición \( (x, y) \) de la escalera y también con el punto \( (x, y + \textrm{altura}) \) asociado a la escalera para determinar si el contacto se produce por abajo o por arriba, respectivamente. En cuanto a la dirección horizontal, bastaría con que miraras qué signo tiene la velocidad en el eje \( x \) del personaje para determinar si el contacto con la escalera es por la derecha o por la izquierda.

En un caso básico en el que solo tienes una escalera en la posición \( (3, 0) \) y tu personaje en la posición \( (3, 0) \), hay un contacto con la base de la escalera (es decir, por abajo), y si el personaje se mueve con velocidad \( (-5, 0) \), entonces es que se mueve de derecha a izquierda, por lo que el contacto se produce por el lado derecho de la escalera. Para probarlo, podrías empezar con algo así:

Código: [Seleccionar]
class Escalera
{
constructor (posicion, altura)
{
this.posicion = posicion;
this.altura = altura;
this.veces_contactada = {
por_arriba: 0,
por_abajo: 0,
por_izquierda: 0,
por_derecha: 0
}
}

sumarNuevoContacto (direccion)
{
this.veces_contactada[direccion] += 1;
}

actualizarNumeroDeContactosConPersonaje (personaje)
{
if (personaje.posicion.x == this.posicion.x &&
    personaje.posicion.y == this.posicion.y)
{
this.sumarNuevoContacto ('por_abajo');

if (personaje.velocidad.x > 0) this.sumarNuevoContacto ('por_izquierda');
else this.sumarNuevoContacto ('por_derecha')
}

if (personaje.posicion.x == this.posicion.x &&
    personaje.posicion.y == this.posicion.y + this.altura)
{
this.sumarNuevoContacto ('por_arriba');

if (personaje.velocidad.x > 0) this.sumarNuevoContacto ('por_izquierda');
else this.sumarNuevoContacto ('por_derecha')
}
}
}

class Personaje
{
constructor (posicion, velocidad)
{
this.posicion = posicion;
this.velocidad = velocidad;
}
}

let tu_personaje = new Personaje ({x: 3, y: 0}, {x: -5, y: 0});
let escalera1 = new Escalera ({x: 3, y: 0}, 5);

escalera1.actualizarNumeroDeContactosConPersonaje (tu_personaje);

// Ahora el atributo veces_contadas de escalera1 pasa a ser
// { por_arriba: 0, por_abajo: 1, por_izquierda: 0, por_derecha: 1 }

Te he puesto el código aquí para que lo puedas probar tú mismo:



Está en Javascript, que es de la misma familia que el ActionScript que usas, y veo que la manera de trabajar con clases también se parece bastante.

En caso de que tuvieras muchas escaleras, podrías agruparlas dentro de un array y recorrerlo llamando al método actualizarNumeroDeContactosConPersonaje de cada escalera. Algo así:

Código: [Seleccionar]
let escalera1 = new Escalera ({x: 3, y: 0}, 5);
let escalera2 = new Escalera ({x: 20, y: 3}, 8);
let escalera3 = new Escalera ({x: 10, y: 5}, 6);

let escaleras = [escalera1, escalera2, escalera3];

for (let i = 0; i < escaleras.length; i++)
{
escaleras[i].actualizarNumeroDeContactosConPersonaje (tu_personaje);
}

Esta es la idea básica, pero evidentemente tendrías que hacer algunas optimizaciones, ya que no tiene sentido que compruebes todas las escaleras del juego todo el tiempo. Dos posibles optimizaciones que se me ocurren es terminar el bucle en cuanto actualizas el estado de una sola escalera, ya que tu personaje solo puede contactar con una escalera al mismo tiempo, no más. En este caso deberías modificar el método actualizarNumeroDeContactosConPersonaje para que retorne un booleano true/false según si el atributo veces_contactada ha sido modificado o no.

Otra optimización podría ser agrupar las escaleras por niveles (en este caso, según su posición \( y \)) y recorrer solo el array correspondiente a ese nivel, que vendría determinado por la posición \( y \) de tu personaje (ya que veo que se mueve por plataformas de diferentes alturas), así tendrías bucles más cortos.

4
Foro general / Re: Encontré un número perfecto impar
« en: 06 Mayo, 2024, 05:50 am »
Vamos a la definición aceptada de número primo...

Definimos "número primo" como aquel número natural que sólo es divisible por 1 y por él mismo.

Pff, no, esa no es la definición aceptada. La definición aceptada de número primo incluye el requisito de que dicho número sea mayor que uno.

(1) La definición de número primo, reconoce como factor de un número primo a un número que no es primo

(2) y si todo número es un producto de números primos, no puede tener un factor que sea un número no primo.

(1) no implica (2), además de que (2) es falso. El hecho de que \( 6 = 2 · 3 · 1 \) no contradice el teorema fundamental de la aritmética. Dicho teorema lo único que dice es que si quieres expresar un número \( n \) como producto de números primos, no puedes elegir qué combinación de números primos usas, sino que dicha combinación es única. Y esto no implica que no puedas usar números no primos como factores de \( n \), ya que puedes usar el \( 1 \) y eso no contradice el teorema. El teorema solo dice que los números primos que intervienen en las multiplicaciones es único.

Y no, que el \( 1 \) no sea primo no implica que sea un número compuesto. Hay tres tipos de números: los primos, los compuestos y los que no son ni primos ni compuestos (el \( 0 \) y el \( 1 \)). El TFA admite la participación del \( 1 \) como factor de \( n \) sin que esto lo contradiga.

Espera, no te lances a responder como un loco todavía. Vuélvete a leer esto con calma y trata de comprender la situación, porque tu error es más obvio de lo que parece, y pienso que si este post ha llegado a las 12 páginas sin que tu duda haya quedado resuelta no es por un tema de complejidad matemática, sino más bien por una combinación de falta de comprensión lectora y de falta de voluntad por tu parte por intentar comprender las explicaciones que se te han dado.

5
Youtube está repleto de vídeos de indios explicando paso a paso cómo instalar Wordpress. ¿Has probado a mirar alguno de ellos?

6
Lo del núcleo de alta densidad no lo entiendo....
Si la gravedad depende de las masas, el núcleo "tiraría" de la corteza hasta hacer una esfera maciza....

No sé, igual en una de estas nos descubre que el núcleo es un agujero negro y que estamos orbitando a su alrededor xD

7
Eso le pregunté con el experimento Cavendish....

Ah, sí, lo acabo de encontrar ahora junto a la respuesta que te dio. Al final repartió las culpas de la densidad a un espesor de la corteza indeterminado y a un pequeño núcleo indeterminado que también anda por ahí pero "de muy alta densidad", por si acaso. 😅

Desvelado el misterio, ahora falta resolver las otras cuestiones (DCM, no te escapes!).

8
Estaba preguntándome cómo encaja DCM su modelo de Tierra hueca con temas como las erupciones volcánicas (¿irá el magma viajando a través del vacío de un punto a otro de la Tierra?), cómo explica la existencia del campo magnético terrestre, o si los sismógrafos que miden las diferentes velocidades a las que viajan las ondas sísmicas a través de las diferentes capas de la Tierra son un timo (porque la Tierra es hueca, no hay capas).

De repente, la mitad de toda la ciencia que conocemos está mal. 🤯

Otra cuestión: si DCM da por válidos la masa y el radio de la Tierra que conocemos (unos \( 6\cdot{}10^{24}\textrm{kg} \) y \( 6370\textrm{km} \), respectivamente), no debería ser la densidad superficial de la Tierra hueca extremadamente grande? Vamos, que conseguir levantar una piedra del suelo tendría mérito...

9
Recuerda que todo lo referido a insertar imágenes deben ser subidas al foro. Dado que da la casualidad que la url no está disponible, no puedo ayudarte a subir la imagen. Si se trata de un video, se puede subir a YouTube y pegar el enlace.

Disculpa, no me había dado cuenta de que se había roto el enlace, ya lo he arreglado y he subido la imagen al foro.

10
lo que vemos en tu simulación son los primeros momentos del inicio del planeta, y además vemos lo que pasa en el exterior, pero no lo que pasa en el interior.

Pero DCM, se supone que la simulación está recreando el interior de una esfera de radio \( R \) con partículas dentro! Mira lo que pasa con una esfera hueca de radio \( 200 \) unidades:



video de la simulación.



Como podéis ver en el interior la materia de las capas más interiores (color verde) se desplazan hacia la superficie y la materia de las capas superiores (color azul) se desplazan hacia el centro. Llegando a crearse una esfera hueca de un radio menor al inicial. La materia está siendo comprimida.

Por curiosidad, ¿cómo has conseguido que las partículas formen una esfera hueca? ¿Has metido las fórmulas físicas (¿cuáles y dónde?) y ha ocurrido eso de forma espontánea, es decir, sin ninguna otra acción por tu parte, o cómo?

11
Hola, muchas gracias a todos por vuestras buenas palabras y el feedback.  :)

me gustaría que se pueda cambiar el valor con la rueda del mouse. Quizás de manera /10 para cada valor porque tienen mínimos y máximos diferentes (así, para pasar de 0% a 100% haya que hacer como máximo 10 scroll up con la rueda); o bien hacerlo más básico e ir modificando de a 1 unidad, ya que no hay decimales. O quizás haya algo más elegante.

Tienes razón, cambiar los valores con la rueda del ratón sería mucho más cómodo que ir arrastrando todo el tiempo. Me lo apunto para implementar.

Observa lo siguiente si pones 2 partículas en el universo con velocidades iniciales aleatorias, mientras no escapen, es decir que su velocidad relativa sea menor que $$v<\sqrt{\dfrac{2G(M+m)}{R}}$$ lo mas probable es que se orbiten indefinidamente, no que choquen, pero veo muy propenso al sistema a que provoque colisiones

Voy a responderte a todo con más calma en otro momento, pero por hacerte una consulta rápida, ¿es posible que esto ocurra porque la constante de fuerza que usamos es demasiado grande en valor absoluto? Al final, en la naturaleza \( G \approx 6.67 \cdot{} 10^{-11} \) y aquí estamos usando el valor mínimo de \( G = -1 \).

He hecho cuatro pruebas y en dos de ellas las partículas se orbitan durante un rato antes de chocar, ¿quizá la fuerza de atracción sea demasiado alta?

https://streamable.com/b8nvor?src=player-page-share

He probado a usar \( G = -0.01 \), pero no he tenido paciencia para esperar a ver si chocan o no porque entonces todo va desesperadamente lento. 😅

En caso de que la velocidad inicial sea cero, las dos partículas van a chocarse del tirón, pero entiendo que esto es normal, ¿no? Teniendo en cuenta que se pueden unir por una línea recta y que la fuerza de gravedad es radial...

no logro ver que se produzcan orbitas estables, que es lo mas común que debe ocurrir, así que se me ocurre que puede estar el error en el truncamiento de los números  calculados, con que precisión los trabajas?

Los cálculos sobre las variables de las partículas se hacen con 15 dígitos decimales. Te pongo un pantallazo sobre el estado de una partícula en un determinado momento del programa:



Muchas gracias otra vez por tus observaciones y te responderé a lo demás en cuanto pueda.  :)

PD:
Cita de: Richard R Richard
como aporte a la mejora simplemente en el choque podrías elegir que la masa final es la suma de las masas individuales, y el volumen aditivo
El radio final entre las partículas i y j creando una nueva k sería $$m_k=m_i+m_j$$ y  $$r_k=\sqrt[3]{r_i^3+r_j^3}$$

Genial, implementaré el radio final como has indicado, pero solo quería confirmar que la suma de masas ya se está haciendo (ver línea 154 de Universe.js, subrayada en azul):


12
Hola a todos. ¡Ya tenemos simulador! Con su panel de control y todo.  :D Lo he subido aquí para que podáis jugar con él:

https://force-field-particles-simulator.vercel.app/



Aquí está el código fuente:

https://github.com/danielthetechie/force-field-particles-simulator/tree/main/src

Los ficheros más relevantes (donde está contenida la física del programa) son Universe.js y Particle.js.

También es apta para tierrahuequistas como nuestro amigo DCM, ya que se puede configurar para que la distancia inicial de todas las partículas con respecto del origen sea igual al radio del universo (como en el gif de arriba), esto es, que no haya partículas en el interior de la esfera. El único inconveniente es que no tiene un final feliz para DCM, sino que el final es el que predijo Richard unos cuantos mensajes más atrás:

Con la suficiente cantidad de tiempo quedará una sola partícula, pero que sin importar el número inicial de estas nunca se forma una estructura hueca, así funciona la naturaleza

Explico algunas opciones que quizá no sean demasiado claras al principio:

- Constante de fuerza: por defecto es \( -1 \), con signo negativo para crear una fuerza de atracción, pero se puede poner positivo para que la fuerza sea de repulsión. A más magnitud, más intensa será la fuerza, ya sea en un sentido u otro. Si la constante es \( 0 \) y la velocidad inicial de las partículas también la dejáis a \( 0 \), pues... nada, pasamos a un universo aburrido y estático.

- Las opciones con un % se calculan con respecto al valor máximo de la opción de arriba. Por ejemplo, si el radio del universo es \( 600 \) unidades y se escoge como distancia mínima al centro el valor \( 50 \), no es que sean 50 unidades, sino que es el \( 50\% \) de \( 600 \), es decir, \( 300 \) unidades. (Esto lo hice así para evitar que se pueda elegir valores mínimos superiores a los máximos y evitar errores.)

- La opción "Aumentar tamaño de las partículas compuestas" se refiere a que cuando dos partículas chocan (el choque siempre es inelástico, no hay rebotes), si ésta está activada el radio de la partícula resultante aumenta (lo hace de forma un poco artificial, eso sí, y lo hace sumando un 10% del radio de la partícula más pequeña al radio de la partícula más grande). Si desactiváis la opción, el radio de la partícula resultante será igual al de la partícula más grande antes del choque, y como efecto secundario veréis órbitas que duran más tiempo antes de que las partículas se absorban entre ellas.

- En la info de abajo, la "velocidad media del sistema" se refiere al cálculo de hacer el promedio de las velocidades instantáneas de todas las partículas en todos sus ejes. Es una manera de medir la evolución del sistema: al final del todo, la velocidad de la partícula que queda acaba siendo constante. Y si elegís que la constante de fuerza sea positiva (o sea, que la fuerza sea repulsiva), veréis que al cabo de un rato la velocidad media del sistema se va estabilizando a medida que las partículas se van alejando y disminuye la fuerza entre ellas.

- Para mover la cámara, mantened el botón derecho del ratón apretado y ésta rotará. Para desplazaros, lo mismo pero con click izquierdo. Para aumentar o disminuir el zoom, usad la rueda del ratón.

- Al inicio todas las partículas son rojas, pero cuando chocan, las partículas resultantes son de color verde para distinguirlas mejor de las originales.

Ahora respondo a Richard en particular:

Cita de: Richard R Richard
Primero que nada  gracias , estoy muy contento con que la idea haya colado y te haya motivado a programarlo.

Gracias a ti por el algoritmo.  :) De hecho, si te parece bien, me gustaría hacerte una mención de agradecimiento en el futuro Readme del proyecto. Le quiero añadir una opción para cambiar de idioma, algunas opciones más, pulir cosas y compartirlo con más gente.

Cita de: Richard R Richard
Además ...Wow, quien pudiera jugar con cosas así, he hecho cosas más pobres visualmente, pero cuando lo pusiste  a rotar en el espacio e hiciste zoom, quedé alucinado.

He usado una librería de Javascript llamada Three, que es para hacer gráficos en 3D, no es difícil de aprender y seguro que tú como ingeniero podrías sacarle mucho más provecho que yo.  :D

Cita de: Richard R Richard
hay como una concentración de partículas al centro que puede ser a causa de la perspectiva o a la propia distribución aleatoria que por tener mas espesor la esfera en el centro habrá mas partículas sobre esa línea de visión, por las dudas revisa si esta bien la aleatoriedad.

Al final lo he intentado solucionar de dos maneras:

1) Reemplazando la función por defecto para generar números aleatorios por una criptográfica que se supone que añade más aleatoriedad (en el fichero math.js puedes ver la función getRandomNumber original, que la he dejado comentada, por su reemplazo, inmediatamente más abajo).

2) Añadiendo la opción "distancia mínima al centro del universo" explicada más arriba.

Cita de: Richard R Richard
no se si será la escala pero veo grandes en tamaño a las partículas respecto del diámetro de la esfera contenedora,  agrandar \( R \) o bajar \( r_i \)  sería un consejo, pero quizá se pierda definición cuando todo se aglomere en el centro a lo largo del tiempo

Sí, creo que en el primer GIF que mostré usé un radio bastante pequeño (quizá 100 o 200 unidades, ahora no recuerdo), pero ahora se puede ajustar hasta las 3000 unidades. Si quieres más, dímelo.

Cita de: Richard R Richard
La idea de fondo de la simulación funciona bien cuando el número de partículas $$n$$ es muy elevado para un $$R$$ grande, pero se ralentiza el cálculo entre posición y posición, además se tarda mas en aglutinar  todo, si aumentas n quizá te convenga primero calcular todas la posiciones para cada tiempo, guardarlas en una base de datos y luego solo ejecuta la parte visual, donde se ven las trayectorias usando los datos y no calculándolos en el mismo  tiempo de ejecución...

Es una manera ingeniosa, pero no sé hasta qué punto viable desde el punto de vista de la memoria, ya que habría que guardar una matriz de números bastante tocha en la base de datos para cada frame que durara la animación, y a cada ejecución del programa con diferentes parámetros quizá habría que esperar un rato hasta tener la base de datos repoblada. Aunque es cierto que una vez hecho esto, podrías correr la animación con un \( n \) mucho más alto de manera fluida.

Ahora mismo los cálculos se realizan a cada frame, se asignan los resultados a las variables de las partículas, se desplazan de forma acorde con dichos valores y vuelta a empezar en el siguiente frame. Según he leído en la documentación de la librería, no se procede a la animación del siguiente frame hasta que no estén todos los cálculos terminados.

En mi ordenador (que no es gran cosa, un laptop con un procesador Intel i3 6006U), la animación va fluida hasta los \( 600 \) - \( 700 \) partículas, a partir de ahí ya empieza a sufrir. Pero eso solo pasa al principio, ya que a medida que se van produciendo los choques y las partículas se van uniendo, voy borrando todas las referencias de las partículas iniciales para liberar memoria, así que aunque se empiece con un número relativamente alto de partículas, la animación acabará siendo más fluida con el tiempo.

El número máximo de partículas lo he limitado a \( 1000 \), pero otra vez, si quieres más dímelo y lo subo.  :)

Cita de: Richard R Richard
Se podría comenzar la simulación dándole una velocidad, dirección y sentido inicial a cada partícula

Esto ya se puede ajustar también en las opciones.  :D Por defecto las partículas empiezan sin velocidad, pero se puede ajustar.

Cita de: Richard R Richard
por cierto habría que poder visualizar un corte de la esfera en un determinado momento, para ver si es hueca o no... quizá sea mucho pedir

Si te refieres a parar la animación en un determinado momento, es fácil de hacer. Pronto le pondré un botón para poder pausar la animación y que se pueda mover la cámara para poder ver con detalle el estado del universo en un determinado momento.

Cita de: Richard R Richard
por más evidencia que presentes el fanatismo será superior

Sí, hay que admitir que contra un fanático que quiere serlo no hay nada que hacer desde la razón, pero programar esto y leer el hilo ha sido divertido: una cosa no quita la otra.  ;D

Siento la tardanza, por temas de trabajo no he podido dedicarle tanto tiempo estos días.

13
Hola Richard,

Propuse que todas las partículas  tengan la misma densidad, pero no es necesario, la idea era que todas eran esferas de la misma densidad por lo tanto su radio quedaba definido solo con la masa, pero la simulación funciona si asignas un radio y una masa independientes , hay pocas  rocas mucho menos densas que el agua densidad 1 (ej leca) ni nada más denso que 22 el osmio  con esos en mente puedes saber que tratas con particulas más o menos reales.

De ese modo tienes cierto límite para el radio en función de la masa.
 Es más fácil calcular la distancia de un impacto  si son esferas.

Gracias por la aclaración.  :) Al final he optado por calcular el radio de las partículas en función de su densidad, que es asignada aleatoriamente a cada partícula con un valor mínimo de \( 1 \) y un máximo de \( 22.5 \), por mantenerlo más realista. De momento esto es lo que tengo:



En cada ejecución las partículas se colocan de forma aleatoria dentro una esfera de radio \( R \) y ahora me falta implementar las físicas como has explicado. Tengo tus instrucciones a mano.  ;D

En cuanto lo tenga listo lo subo online y le añado un panel para que cada usuario pueda experimentar modificando los parámetros del programa a su gusto (el número de partículas, la distancia máxima de éstas con respecto al centro, etc).  :)

14
Hola Richard,

Una simulación clarificadora

Podría presentarlo programado pero no trabajo gratis para nadie que no lo apreciará jaja

  para programar
Definimos
el espacio de trabajo variable $$R$$ digamos 1000 unidades
el número de partículas $$n$$ unas 100 para que no sean pocas ni muchas
el tiempo entre evaluación y evaluación el sistema, muy corto evoluciona lento, muy largo es impreciso supongamos $$t=1$$
definimos el valor $$G$$ que puede ser el de la constante de gravitación, pero como todo es proporcional a este número  los resultados no difieren si se lo escoge unitario $$G=1$$ valores mas chicos hacen mas lenta la evolución
la densidad volumétrica de las masas $$\rho$$ , es anecdótica sirve para definir un radio de cada partícula
definimos una matriz o arreglo con $$n$$ filas y 11 columnas(masa $$mi$$ ,$$ri$$ radio propio,$$x,y,z,vx,vy,vz,fx,fy,fz$$   )
con un bucle hasta $$n$$, asignamos aleatoriamente

asignamos aleatoriamente $$mi$$, masa de la partícula
con esto definimos su radio $$ri =\sqrt[3]{\dfrac{mi}{rho \frac43 \pi}}$$
asignamos aleatoriamente $$0<r<R$$ distancia respecto del centro
asignamos aleatoriamente $$0<\theta<2\pi$$ ángulo respecto del centro
asignamos aleatoriamente $$0<\varphi<\pi$$ ángulo azimutal respecto del centro

con $$r , \theta$$ y $$\varphi$$  traducimos coordenadas esféricas a cartesianas asegurando  que todas las partículas estén dentro de una esfera de radio $$R$$

$$xi = r\sen\,\theta\,\cos\varphi$$
$$yi = r\sen\,\theta\sen\,\varphi$$
$$zi = r \,\cos\theta$$

suponemos que la velocidad inicial de las partículas es nula
$$vxi=0$$
$$vyi=0$$
$$vzi=0$$

hacemos el inicio de un contador de tiempo $$T$$ iniciando en cero

Iniciamos un bucle hasta que el tiempo $$T$$ sea el deseado $$T>1000000$$ por ejemplo

luego para cada partícula de 1 a $$n$$ llamada con subíndice $$i$$ hacemos un bucle
se ponen a cero cada componente del vector fuerza que siente cada partícula $$i$$

$$fxi=0$$
$$fyi=0$$
$$fzi=0$$

y otro bucle de 1 a  $$n$$ con subíndice $$j$$

si $$i=j$$ no hacemos nada
calculamos la distancia entre partículas

$$dij=\sqrt{(xi-xj)^2+(yi-yj)^2+(zi-zj)^2}$$

si $$dij<ri+rj$$  las partículas están en contacto, su ponemos un choque inelástico donde

$$xi=xj=\dfrac{mi\cdot xi+mj\cdot xj}{mi+mj}$$
$$yi=yj=\dfrac{mi\cdot yi+mj\cdot yj}{mi+mj}$$
$$zi=zj=\dfrac{mi\cdot zi+mj\cdot zj}{mi+mj}$$

$$vxi=vxj=\dfrac{mi\cdot vxi+mj\cdot vxj}{mi+mj}$$
$$vyi=vyj=\dfrac{mi\cdot vyi+mj\cdot vyj}{mi+mj}$$
$$vzi=vzj=\dfrac{mi\cdot vzi+mj\cdot vzj}{mi+mj}$$

esto tratará las dos partículas como si fueran una sola y ya no calculara mas su interacción sin alterar el número de partículas del programa

y evitará divisiones por cero

si la $$dij$$ es mayor entonces

calculamos cada contribución de fuerza de cada partícula  de 1 a $$n$$ como

$$fxi=fxi+G\cdot mi\cdot mj (xj-xi)/dij^3$$
$$fyi=fyi+G\cdot mi\cdot mj (yj-yi)/dij^3$$
$$fzi=fzi+G\cdot mi\cdot mj (zj-zi)/dij^3$$

al final del ciclo j  tendremos la fuerza que siente la partícula i
asignamos esos valores a la matriz de datos

reiteramos para todas la partículas i terminando el ciclo i

luego trabajamos sobre la cinematica

en un nuevo ciclo i

calculamos la aceleracion como

$$axi=fxi/mi$$
$$ayi=fyi/mi$$
$$azi=fzi/mi$$

la nueva velocidad en ese instante
$$vxi=vxi+axi\cdot t$$
$$vyi=vyi+ayi\cdot t$$
$$vzi=vzi+azi\cdot t$$

y la nueva posición en ese instante

$$xi=xi+vxi\cdot t+\dfrac12 axi \cdot t^2$$
$$yi=yi+vyi\cdot t+\dfrac12 ayi \cdot t^2$$
$$zi=zi+zxi\cdot t+\dfrac12 azi \cdot t^2$$

cerrar el ciclo

luego un proceso para representar en pantalla , cada partícula con su radio, y transformar la posición 3d calculada en 2d de pantalla

hacemos que sume tiempo el contador
$$T=T+t$$
y cerramos el ciclo del contador $$T$$ así todo se vuelve a recalcular cada un tiempo $$t$$


Que surge de esto ....
  • En pantalla debe observarse la disminución de la cantidad de partículas cada vez que chocan.
  • Que cada vez que se acercan mas al centro mas velocidad adquieren,
  • Que siempre habrá una dirección en el espacio donde se formar un plano o disco de acreción,
  • Con la suficiente cantidad de tiempo quedará una sola partícula, pero que sin importar el número inicial de estas nunca se forma una estructura hueca, así funciona la naturaleza, así DCM modela su formación de tierra hueca , y si en modelos no funciona en la naturalez tampoco.
  • En realidad no hace falta modelizar los choques inelásticos, pero si no se hace, se verá que de alguna manera el sistema tiene que liberarse de energía cinetica  debido a la conservación de la energía y se lo podrá observar  expulsando algunas masas fuera del sistema, si tienen mas velocidad que la de escape , nunca regresan, sino pueden permanecer en órbitas largas como los asteroides, o la nube de oort ... pero bueno hay que meter muchas partículas de variada masa para ver efectos notables, y un pc muy rápido...

[cerrar]

Resulta que me he puesto a programarlo.  ;D Pero me ha surgido una duda. Aquí:

Citar
con esto definimos su radio $$ri =\sqrt[3]{\dfrac{mi}{\rho \frac43 \pi}}$$

¿Habría algún inconveniente en asignar el radio de la partícula directamente, sin definir previamente \( \rho_i \) para luego hacer ese cálculo? ¿Y alrededor de qué valores mínimos y máximos de \( \rho_i \) y \( m_i \) nos moveríamos para poder hacer la simulación más interesante? Lo pregunto porque si aparecen partículas 1000 veces más masivas que otras, igual la historia termina pronto...

15
Estoy de acuerdo con manoooh: más concretamente, pienso que lo que mejor se adaptaría a lo que buscas es un programa basado en deep learning. A grandes rasgos, primero defines cómo medir qué tan bueno es ese "buen plan". En el ejemplo de Super Mario, el objetivo de pasarte el juego consiguiendo la mayor cantidad posible de puntos parece reñido con el objetivo de pasártelo en el menor tiempo posible.

Una vez que defines cuál es el objetivo y cómo medirlo, el modelo de deep learning que implementes irá aprendiendo de sus propios errores en cada iteración y lo irás premiando a medida que vaya mejorando las marcas que sean relevantes para lograr tu objetivo.

Por otra parte, si quieres programarlo de una forma más clásica y terrenal, puedes investigar sobre algoritmos genéticos. Aquí tienes una web para jugar con ellos y en la que puedes ver de una forma muy intuitiva de lo que se trata:

https://rednuht.org/genetic_cars_2/

La idea básica es llevar las ideas de la evolución darwiniana al código del programa. En esta web en concreto, empiezas con un escenario poblado por objetos a dos ruedas con formas aleatorias: el "ganador" es el que recorre la mayor distancia. Los objetos empiezan a avanzar y muchos se quedan por el camino debido a que su geometría es demasiado ineficiente para seguir avanzando. Los que consiguen llegar más lejos, se "reproducen" con una determinada tasa de mutabilidad, los hijos heredan la forma del padre con alguna pequeña variación y siguen avanzando hasta que el último descendiente fracasa. A partir de ahí, se resetea el mundo y la nueva generación de objetos contiene a los "ganadores" del mundo anterior, y así, a través de las generaciones, se va seleccionando la geometría más apta para recorrer más distancia.

Por cierto, puedes darle al botón "Surprise!" para que la simulación vaya más rápido y volver a pincharle para que vuelva la velocidad normal. A partir de la generación 13 la competición se pone interesante y ya se puede ver un patrón en la forma más óptima (desde el punto de vista del mundo generado) que consigue llevar el coche más lejos.

Aquí tienes un ejemplo de cómo implementar un algoritmo genético en un juego muy parecido al Super Mario en el que el objetivo es el mismo, recoger monedas y evitar colisiones con monstruos: https://blog.paperspace.com/building-agent-for-cointex-using-genetic-algorithm/

16
DaniM, menos ningunear a las personas y más argumentos matemáticos o físicos o lógicos.

Para qué, si ya te han dado todos los argumentos habidos y por haber y aun así no te has molestado en comprenderlos. Yo pensaba que, como dijo Richard, te has radicalizado en una idea absurda y de ahí ya no sales, pero desde que has empezado con lo de la Tierra hueca, los astros huecos, supongo que también las estrellas estarán huecas y todo hueco... pienso que hay una probabilidad no nula de que seas un troll, de que en el fondo no te creas nada de lo que tú mismo dices y que estés en tu casa descojonándote de las reacciones en el foro cuando posteas tus disparates y esperas una semana entera para volver con la caja de palomitas. Confiésalo ya, tú en la intimidad tampoco divides por cero, ¿verdad?

17
Cita de: DCM
Por lo que vemos es un cambio  total  del paradigma actual sobre  los astros del universo.

¿No te has planteado contactar a los productores de Ancient Aliens? La última temporada la dejaron en un capítulo llamado "Secretos del interior de la Tierra"; ahora me parece que han vuelto al tema de los extraterrestres durante el Tercer Reich, pero creo que si les cuentas la movida de los astros huecos pueden reenganchártelo con el penúltimo capítulo: en él defendían la existencia de un antiguo reino en el interior de la Tierra poblado por humanos y aliens, y ahora gracias a tu teoría ya no tendrán a los pobres intraterrestres tragando tierra y gusanos, sino que por fin podrán viajar libremente por el interior del planeta con naves espaciales.  :D

Contáctales, que te hacen hueco fijo, y si además les dices que eres físico, que has abierto los ojos, que la ciencia oficial es un engaño, que \( g=\frac{GM}{2R^2} \) y cosas así, te hacen la ola y toda la publicidad que quieras! Piensa que allí solo se atreven a ponerse delante de la cámara periodistas de sucesos paranormales, buscadores de OVNIs, escritores de novelas de ciencia ficción, terraplanistas y demás, pero si por fin tuvieran la oportunidad de sacar en pantalla a un físico que apoyara sus fantasmadas usando incluso tecnicismos tales como 'esferas de esperor infinitesimal' y otros sinsentidos que sonaran a música celestial a los oídos de los millones de infelices que ven ese programa con la convicción de que se les está siendo revelada una serie de secretos que el gobierno les oculta, te harían co-presentador del programa y ganarías una pasta!

Desde luego como personaje televisivo tendrías más recorrido que tu teoría en un proceso de revisión por pares... pero al menos tendrías fans que te darían la razón en todo, ya no tendrías que pasarte el día dibujando líneas de campo en el Paint para intentar convencer a alguien de que Newton era un inútil y te sentirías más realizado contigo mismo, que de eso va la vida al final.

18
Quizá con una animación se entendería mejor, porque no entiendo bien ¿por qué si un trozo de materia atrae otros quedaría hueco con trozos dentro? Pero en 3d está difícil.

El problema es que para hacer una animación tienes que introducir las fórmulas matemáticas de antemano, no es que tú crees un mundo virtual desde cero y "que la naturaleza siga su curso", sino que para hacer dicha animación con partículas habría que definir primero qué trayectorias seguirían éstas en base a la ecuación de la gravedad, y el aquí el tema es que la ecuación de DCM está mal, como ya ha quedado explicado en las páginas anteriores, por lo que cualquier parecido que tuviera la animación con la realidad sería pura coincidencia.

19
Foro general / Re: Ecuación para modelar una botella de agua
« en: 27 Enero, 2024, 11:01 am »
Bueno, veo que en el post de Reddit hay nuevos comentarios y uno parece responder afirmativamente a mi pregunta:

Citar
The idea is this:

You can take an object, any object, and fit a line to it. For example, imagine you have some object with a curve. You can fit part of a sine, cosine, or polynomial function to that curve and, for at least part of that fitted function, that curve will be traced.

Now cut off the part of the fitted function that doesn't fit the rest of that curve (since trig functions are periodic and polynomials change direction).

The next step is to repeat this fitting processes where you left off on the last line. After repeating this process you will end up with a ton of different spliced together lines that "perfectly" fit any possible shape you want.

Es básicamente dividir la figura que queremos representar en varios trozos, identificar un número suficiente de puntos de cada trozo, interpolarlos según la curva que mejor se ajuste a dichos puntos, repetir el proceso con el siguiente trozo, y así sucesivamente. Y al final juntar todas las ecuaciones que han ido saliendo, ¿no?

20
Foro general / Re: Ecuación para modelar una botella de agua
« en: 27 Enero, 2024, 10:42 am »
No sé cómo lo ha hecho él, pero Wolfram Mathematica te permite hacerlo con cualquier tipo de contorno si no recuerdo mal, utilizando series de Fourier con un determinado número de sumandos. A más sumandos, más precisión. En el siguiente enlace lo explican en más detalle:

https://mathematica.stackexchange.com/questions/171755/how-can-i-draw-a-homer-with-epicycloids

Entonces, lo que haría yo, diseñaría una curva en algún programa como inkscape o similar, y luego le aplicaría lo comentado en el enlace anterior. Además hoy en día con lenguajes de programación como Julia seguro se puede implementar lo mismo que con Wolfram Mathematica de manera mucho más eficiente, en principio utilizando wavelets en vez de senos y cosenos, ya que son más indicados en general para trabajo digital.

¡Muy bueno! Hasta ahora había visto los típicos cardioides y otras formas simples, pero no me imaginaba que se pudiera parametrizar una curva hasta el punto de crear algo tan sofisticado como un Bart Simpson.  :D

Por curiosidad, ¿es imprescendible usar números complejos para ello o es simplemente más cómodo o rápido? Veo que en el enlace que has puesto dice:

Citar
the idea is to transform each point as a complex number (z) and take the Discrete Fourier Transform (cn) up to a prescribed order m

Y en la ecuación de la botella de agua veo que también aparecen números imaginarios. ¿Sería posible conseguir un resultado similar trabajando únicamente con números reales, dado un conjunto de puntos? Estoy pensando en juntar varias ecuaciones del estilo \( r = f(\theta) \) definidas en sistemas de coordenadas polares; no sé qué tan viable sería eso.

Páginas: [1] 2 3 4 ... 11