Visualización de la deformación del espacio bajo fuerzas gravitatorias utilizando la ley de Newton: Enfoque de rejilla de partículas
Visualización de la deformación del espacio bajo fuerzas gravitatorias utilizando la ley de Newton: Enfoque de rejilla de partículas
por Vitaliy Kaurov
Este cuaderno es una traducción al español del artículo de la Comunidad Wolfram “Visualizing space deformation under gravitational forces using Newton's law: particle grid approach” producido con ayuda de un LLM y verificado por un traductor profesional
El código original (ligeramente modificado aquí) se puede encontrar en la publicación de Mathematica Stack Exchange “Visualizing gravity warping the fabric of spacetime” en la respuesta proporcionada por N0va. Tenga en cuenta que esto no es la relatividad de Einstein, y solo se utiliza la ley de la gravedad de Newton a continuación. Una información de fondo útil es el artículo “The river model of black holes”.
Introducción original: “Este es mi enfoque como físico al problema: Considero una nube/cuadrícula de partículas de prueba que son atraídas hacia un punto de referencia por una fuerza. A continuación, asumo que atracción por gravedad, es decir, la fuerza sobre la partícula de prueba está alineada con su vector de distancia al punto de referencia y la intensidad de esta fuerza es inversamente proporcional al cuadrado de la distancia. Para cada partícula, resuelvo las ecuaciones de movimiento para obtener la deformación/desviación después de un tiempo dado. A continuación presento una primera versión aproximada”
La función calcula la nueva posición de una partícula de prueba bajo la atracción gravitatoria hacia un punto de referencia. Utiliza para integrar las ecuaciones de movimiento hasta un tiempo especificado o hasta que la distancia al punto de referencia esté por debajo de un umbral. Devuelve la posición desviada después de tener en cuenta la atracción gravitatoria, simulando el efecto de la gravedad en el espacio.
getDeflection
In[]:=
getDeflection[x0_, a0_, tend_] := Module[{eqs, x, t, r, t1, d}, r = Norm[x0 - a0]; If[r < 0.01, Return[x0]]; t1 = tend; d = NDSolveValue[{x''[t] == -5/x[t]^2, x'[0] == 0, x[0] == r, WhenEvent[x[t] < 0.01, t1 = t; "StopIntegration"]}, x, {t, 0, tend}][t1]; x0 - (r - d)/r (x0 - a0)]
La función crea una cuadrícula tridimensional de líneas que forman una estructura cúbica. Toma un conjunto de datos y un parámetro de subdivisión opcional, luego utiliza objetos para construir los bordes del cubo. Cada borde se refina en segmentos más pequeños según el nivel de subdivisión, lo que da como resultado una representación detallada del cubo.
generateCube
In[]:=
generateCube[dat_, subdivision_ : 2] := Module[{lines}, lines = Table[{Line[#] & /@ dat[[All, All, i]], Line[#] & /@ dat[[All, i, All]], Line[#] & /@ dat[[All, All, i]], Line[#] & /@ Transpose[dat][[All, All, i]], Line[#] & /@ Transpose[dat][[All, i, All]], Line[#] & /@ Transpose[dat][[All, All, i]]}, {i, 1, Length[dat]}]; lines = lines /. Line[x_List] :> MapThread[Line[{#1, #2}] &, {x[[;; -2]], x[[2 ;;]]}]; lines /. Line[{a_, b_}] :> With[{ab = Subdivide[a, b, subdivision]}, MapThread[Line[{#1, #2}] &, {ab[[;; -2]], ab[[2 ;;]]}]]]
La función modifica las líneas existentes de un cubo para simular la deformación gravitacional. Calcula nuevas posiciones para los puntos aplicando la función y actualiza las líneas con estas nuevas posiciones. Visualiza la deformación utilizando , con ajustes de color según el grado de deformación.
deformCube
getDeflection
In[]:=
deformCube[lines_, a0_, tend_, f_, opts___] := Module[{pts, linesNew}, pts = DeleteDuplicates[ Flatten[Flatten[lines] /. Line[{a_, b_}] :> {a, b}, 1]]; pts = ParallelTable[x -> getDeflection[x, a0, tend], {x, pts}, DistributedContexts -> All, Method -> "FinestGrained"]; linesNew = lines /. Line[{a_, b_}] :> With[{an = a /. pts, bn = b /. pts}, {Thick, ColorData["DarkRainbow"][f*(Norm[a - an] + Norm[b - bn])], Line[{an, bn}]}]; Graphics3D[{{White, Sphere[a0, 0.1]}, linesNew}, opts]]
Se genera una cuadrícula cúbica utilizando una tabla de puntos, subdividiendo cada arista en segmentos más pequeños para crear una estructura detallada.
In[]:=
cube = generateCube[Table[{i, j, k}, {i, Subdivide[-1, 1, 3]}, {j, Subdivide[-1, 1, 3]}, {k, Subdivide[-1, 1, 3]}], 10];
Se genera una secuencia de imágenes que muestra la deformación de un cubo bajo fuerzas gravitacionales. Cada imagen corresponde a una posición diferente de la fuente gravitacional, y la deformación se visualiza con colores y luces ajustados.
In[]:=
imgs = Table[ deformCube[cube, 2/3*{Sin[x], Cos[x], 0}, 0.3, 1.8, Boxed -> False, Background -> Black, Lighting -> "Neutral", ViewPoint -> {2, 2, 1},ImageSize->550, PlotLabel-> Framed[Style["Gravity Space Deformation",33,GrayLevel[.7],FontFamily->"Copperplate"], FrameStyle->Black,FrameMargins11]], {x, 0, 2 π, 2π/5}];
Se crea una visualización interactiva que muestra una secuencia de imágenes. Permite a los usuarios explorar la deformación de un cubo bajo fuerzas gravitacionales ajustando un parámetro que controla la posición dentro de la secuencia.
In[]:=
Manipulate[imgs[[k]],{k,1,Length[imgs],1},SaveDefinitions->True]
Out[]=
Exporte a .GiF animado:
In[]:=
Export["grav.gif",imgs,ImageSize->550,"DisplayDurations"->.03]
Out[]=
grav.gif
CITE ESTE CUADERNO
CITE ESTE CUADERNO
Visualización de la deformación del espacio bajo fuerzas gravitatorias utilizando la ley de Newton: Enfoque de rejilla de partículas
por Vitaliy Kaurov
Comunidad Wolfram, STAFF PICKS, 2 de diciembre de 2025
https://community.wolfram.com/groups/-/m/t/3584490
por Vitaliy Kaurov
Comunidad Wolfram, STAFF PICKS, 2 de diciembre de 2025
https://community.wolfram.com/groups/-/m/t/3584490

