RosettaCodeData/Task/Brownian-tree/Mathematica/brownian-tree.math

27 lines
1.0 KiB
Plaintext

canvasdim = 1000;
n = 0.35*canvasdim^2;
canvas = ConstantArray[0, {canvasdim, canvasdim}];
init = Floor@(0.5*{canvasdim, canvasdim}); (*RandomInteger[canvasdim,2]*)
canvas[[init[[1]], init[[2]]]] = 1; (*1st particle initialized to midpoint*)
Monitor[ (*Provides real-time intermediate result monitoring*)
Do[
particle = RandomInteger[canvasdim, 2];
While[True,
ds = RandomInteger[{-1, 1}, 2];
While[ (*New Particle Domain Limit Section*)
!And @@ (0 < (particle + ds)[[#]] <= canvasdim & /@ {1, 2}),
particle = RandomInteger[canvasdim, 2];
];
(* Particle Aggregation Section *)
If[canvas[[(particle + ds)[[1]], (particle + ds)[[2]]]] > 0,
canvas[[particle[[1]], particle[[2]]]] = i;
Break[],
particle += ds
];
],
{i, n}],
{i, (particle + ds), MatrixPlot@canvas}
]
MatrixPlot[canvas,FrameTicks->None,ColorFunction->"DarkRainbow",ColorRules->{0 -> None}]