Hard Spheres Simulation for Stephen Wolfram –– Trajectories and Collisions
Hard Spheres Simulation for Stephen Wolfram –– Trajectories and Collisions
Matt Kafker
September,2020
September
th
26
Hard Spheres Simulation: Returns Trajectories and Collisions
Generate Causal Graph from Collisions
Visualization
Visualize 2D simulation with randomly distributed initial conditions. (Mostly included as a sanity check.)
Now draws tail of specified particle.
Now draws tail of specified particle.
In[]:=
visualize2D[num_,steps_,boxSize_,trackedParticle_]:=Module[{initialConditions,traj,stepSize=.1,rad=1},(*Changeseedfordifferentbehavior!*)SeedRandom[1234];(*Randomlydistributedpositionswithrandomlydistributedvelcities*)initialConditions=N[{RandomReal[{-#,#}&@(boxSize-rad),{num,2}],RandomPoint[Ball[ConstantArray[0,2]],num]}];(*Simulateabox,animatetheresults*)traj=simulateCollisionsBox[initialConditions,N[boxSize],N[stepSize],N[rad],steps]〚1,All,1〛;Animate[Graphics[{{FaceForm[],EdgeForm[Black],Rectangle[{-boxSize,-boxSize},{boxSize,boxSize}]},Style[Disk[#,rad]&/@traj〚All,t〛,Gray,EdgeForm[GrayLevel[.2]]],(*drawtailofparticle*)Style[Line[traj[[trackedParticle,;;t]]],Red,Thickness[0.03],Opacity[0.8]]}],{t,1,Length[traj〚1〛],1},DefaultDuration8,SaveDefinitionsTrue]];
Sample visualization.
In[]:=
visualize2D[20,2000,10,2]
Out[]=
In[]:=
?SeedRandom
Out[]=
More (SW) ...
More (SW) ...
In[]:=
SeedRandom[1234];hscg=Graph[ResourceFunction["WolframPhysicsProjectStyleData"]["CausalGraph"]["Function"][genCausalGraph[20,500,10,2]],AspectRatio.9]
Out[]=
In[]:=
trajectories2D[num_,steps_,boxSize_]:=Module[{initialConditions,traj,stepSize=.1,rad=1},(*Changeseedfordifferentbehavior!*)SeedRandom[1234];(*Randomlydistributedpositionswithrandomlydistributedvelcities*)initialConditions=N[{RandomReal[{-#,#}&@(boxSize-rad),{num,2}],RandomPoint[Ball[ConstantArray[0,2]],num]}];(*Simulateabox,animatetheresults*)traj=simulateCollisionsBox[initialConditions,N[boxSize],N[stepSize],N[rad],steps]〚1,All,1〛]
In[]:=
trajectories2D[20,500,10]
Out[]=
In[]:=
Dimensions[%]
Out[]=
{20,501,2}
In[]:=
SortBy[VertexOutComponent[hscg,{SortBy[VertexList[hscg],Last][[25]]}],Last]
Out[]=
{{7,5,215},{5,2,227},{7,2,255},{13,2,258},{13,9,272},{13,7,273},{5,3,276},{4,2,285},{14,3,296},{14,4,300},{5,2,313},{13,4,313},{20,13,324},{20,19,334},{14,2,342},{13,4,345},{6,4,354},{14,13,361},{20,12,363},{7,2,375},{13,10,375},{10,1,378},{18,9,380},{7,2,383},{18,2,391},{19,8,395},{17,4,397},{20,13,400},{10,8,413},{13,10,413},{10,8,414},{10,8,415},{20,7,418},{12,7,428},{9,7,431},{17,6,442},{5,3,443},{20,13,443},{18,9,444},{5,2,449},{5,3,450},{19,12,460},{14,3,463},{19,16,464},{19,12,468},{11,6,476},{12,7,482},{11,1,484},{20,18,484},{11,6,486},{8,1,489},{18,2,493},{17,14,494},{13,12,500}}