(*Defineparametersforamodel*)num=50;steps=500;boxSize=15;rad=1;stepSize=0.1;(*Startwithrandominitialconditions:*)initialPos=RandomReal[.2{-#,#}&@(boxSize-rad),{num,2}];initialVel=RandomPoint[Ball[ConstantArray[0,2]],num];(*Runsimulation:*)traj=ResourceFunction["HardSphereSimulation"][initialPos,initialVel,15,.1,1,500]〚1,All,1〛;(*Visualizetheresults:*)Manipulate[Graphics[{{FaceForm[],EdgeForm[Black],Rectangle[{-boxSize,-boxSize},{boxSize,boxSize}]},Disk[#,rad]&/@traj〚All,t〛}],{t,1,Length[traj〚1〛],1}]
Out[]=
[[[ Seems like nonsense; should not overlap ]]]
In[]:=
Graphics[Circle[#,.3]&/@RandomPointConfiguration[HardcorePointProcess[2,0.3,2],Rectangle[{0,0},{10,10}]]["Points"]]
Out[]=
In[]:=
With[{num=50,steps=200,boxSize=15,rad=1,stepSize=0.1},With[{initialPos=RandomReal[.2{-#,#}&@(boxSize-rad),{num,2}],initialVel=RandomPoint[Ball[ConstantArray[0,2]],num]},ResourceFunction["HardSphereSimulation"][initialPos,initialVel,boxSize,stepSize,rad,steps]]]
Out[]=
In[]:=
Length[%]
Out[]=
2
Want to make 3D image of velocities etc.
In[]:=
Graph[TwoWayRule@@@(Most/@Last[With[{num=50,steps=200,boxSize=15,rad=1,stepSize=0.1},With[{initialPos=RandomReal[.2{-#,#}&@(boxSize-rad),{num,2}],initialVel=RandomPoint[Ball[ConstantArray[0,2]],num]},ResourceFunction["HardSphereSimulation"][initialPos,initialVel,boxSize,stepSize,rad,steps]]]])]
Out[]=
In[]:=
SimpleGraph[%]
Out[]=
In[]:=
(*Functiontogenerateacausalgraphfromthecollisionslist.*)collisionsToCausalGraph[collisions_]:=Module[{particles,instants,edges},(*Extractparticlesfromlistofcollisions*)particles=Union@@collisions[[All,;;2]];(*Generatecausalgraphfromcollisions.Constructadirectededgewheneveranuninterruptedsequenceoftwocollisionsinvolvesthesameparticle.*)edges=Catenate[Function[particle,instants=SplitBy[Select[collisions,#[[1]]===particle||#[[2]]===particle&],Last];Catenate[BlockMap[DirectedEdge@@@Tuples[#]&,instants,2,1]]]/@particles];(*Finally,constructthegraph*)Graph[DeleteDuplicates@edges,Sequence[GraphLayout->"LayeredDigraphEmbedding",AspectRatio->1/GoldenRatio,ImageSize->Large]]]
In[]:=
(*Runasimulationandextractthecausalgraph*)With[{num=15,steps=50,boxSize=5,dimension=2,rad=1,stepSize=0.1},Module[{collisions,initialPos,initialVel},(*Randominitialconditions*)initialPos=RandomReal[{-#,#}&@(boxSize-rad),{num,dimension}];initialVel=RandomPoint[Ball[ConstantArray[0,dimension]],num];(*Runasimulation.Ignorefirst20%toeliminatetransientroleofinitialconditions.*)collisions=Select[ResourceFunction["HardSphereSimulation"][initialPos,initialVel,Sequence[N[boxSize],N[stepSize],N[rad],steps]][[2]],#[[3]]>Round[steps/5]&];(*Generatecausalgraph*)collisionsToCausalGraph[collisions]]]
Out[]=
In[]:=
Graphics[{Style[Disk[#[[1]],1],Orange],Arrow[{#[[1]],#[[1]]+4#[[2]]}]}&/@Transpose[With[{num=50,steps=200,boxSize=15,rad=1,stepSize=0.1},With[{initialPos=RandomReal[.2{-#,#}&@(boxSize-rad),{num,2}],initialVel=RandomPoint[Ball[ConstantArray[0,2]],num]},ResourceFunction["HardSphereSimulation"][initialPos,initialVel,boxSize,stepSize,rad,steps]]][[1,100]]]]
Out[]=
Consider the case of hard squares....
Consider the case of hard squares....