Data update
This commit is contained in:
parent
8e4e15fa56
commit
72eb4943cb
1853 changed files with 35514 additions and 9441 deletions
153
Task/Brownian-tree/FutureBasic/brownian-tree.basic
Normal file
153
Task/Brownian-tree/FutureBasic/brownian-tree.basic
Normal file
|
|
@ -0,0 +1,153 @@
|
|||
// Brownian tree
|
||||
//https://rosettacode.org/wiki/Brownian_tree
|
||||
|
||||
/*
|
||||
A Brownian tree is built with these steps:
|
||||
first, a "seed" is placed somewhere on the screen.
|
||||
Then, a particle is placed in a random position of the screen,
|
||||
and moved randomly until it bumps against the seed.
|
||||
The particle is left there, and another particle is placed in a random position
|
||||
and moved until it bumps against the seed or any previous particle, and so on.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
begin globals
|
||||
|
||||
_w = 400 // window size
|
||||
short w = _w
|
||||
bool pixelUsed(_w ,_w )
|
||||
short x, y , Oldx, Oldy
|
||||
cgRect TheRect
|
||||
short Edge
|
||||
long SpeckleCount
|
||||
short MainColor,SpeckleColor
|
||||
bool GreenGreen,WhiteWhite,WhiteIndigo,WhiteMagenta,GreenIndigo,CyanBlue
|
||||
bool SeedPlanted
|
||||
long count
|
||||
|
||||
|
||||
// Color Options
|
||||
GreenGreen = 0
|
||||
GreenIndigo = 0
|
||||
WhiteIndigo = 1
|
||||
WhiteWhite = 0
|
||||
WhiteMagenta = 0
|
||||
CyanBlue = 0
|
||||
|
||||
if GreenGreen then MainColor = _ZGreen : SpeckleColor = _ZGreen
|
||||
if WhiteWhite then MainColor = _ZWhite : SpeckleColor = _ZWhite
|
||||
if WhiteIndigo then MainColor = _ZWhite : SpeckleColor = _zSystemIndigo
|
||||
if WhiteMagenta then MainColor = _ZWhite : SpeckleColor = _zMagenta
|
||||
if GreenIndigo then MainColor = _ZGreen : SpeckleColor = _zSystemIndigo
|
||||
if CyanBlue then MainColor = _zCyan : SpeckleColor = _zBlue
|
||||
|
||||
end globals
|
||||
|
||||
_Window = 1
|
||||
window _Window, @"", ( 0, 0, _w, _w ), NSWindowStyleMaskTitled + NSWindowStyleMaskMiniaturizable
|
||||
|
||||
windowcenter(_Window)
|
||||
WindowSetBackgroundColor(_Window,fn ColorBlack)
|
||||
|
||||
local fn ClearPixelArray
|
||||
cls
|
||||
|
||||
short row,col
|
||||
for row = 1 to 400
|
||||
for col = 1 to 400
|
||||
pixelUsed(row,col) = NO
|
||||
next
|
||||
next
|
||||
|
||||
|
||||
SpeckleCount = 0
|
||||
|
||||
Edge = _w
|
||||
/// place seed in the middle
|
||||
pen -1
|
||||
oval fill (w/2,w/2,5,5), MainColor
|
||||
x = w/2
|
||||
y = w/2
|
||||
pixelUsed(x,y) = YES
|
||||
|
||||
Oldx = x
|
||||
Oldy = y
|
||||
count = 0
|
||||
SeedPlanted = _true
|
||||
|
||||
end fn
|
||||
|
||||
|
||||
local fn DrawPixels
|
||||
|
||||
// Set New Random particle location
|
||||
if SeedPlanted = _false
|
||||
do
|
||||
x = rnd(Edge)
|
||||
y = rnd(Edge)
|
||||
until pixelUsed(x,y) = NO
|
||||
end if
|
||||
|
||||
SeedPlanted = _false
|
||||
short xBack, yBack
|
||||
xBack = x
|
||||
yBack = x
|
||||
|
||||
|
||||
// Find a location for the new particle
|
||||
do
|
||||
|
||||
Oldx = x
|
||||
Oldy = y
|
||||
|
||||
// set x and y within plus or minus 15 pixels of x or y
|
||||
x += RND(3) - 2
|
||||
y += RND(3) - 2
|
||||
|
||||
// prevent results that are not within 15 pixels of Oldx and Oldy
|
||||
if x <= 0 then x = xBack : y = yBack
|
||||
if y <= 0 then y = xBack : y = yBack
|
||||
if x > Edge then x = xBack : y = yBack
|
||||
if y > Edge then y = xBack : y = yBack
|
||||
|
||||
until pixelUsed(x,y) = YES
|
||||
|
||||
|
||||
// Draw the new particle but protect the margin on the edge
|
||||
|
||||
if Oldx > 15 && Oldx < Edge - 15 && Oldy > 15 && Oldy < Edge - 15
|
||||
SpeckleCount ++
|
||||
|
||||
pen -1
|
||||
if SpeckleCount < 200
|
||||
oval fill (Oldx,Oldy,1,1), MainColor
|
||||
else
|
||||
oval fill (Oldx,Oldy,2,2), SpeckleColor
|
||||
SpeckleCount = 0
|
||||
end if
|
||||
|
||||
pixelUsed(Oldx,Oldy) = YES
|
||||
xBack = x
|
||||
yBack = y
|
||||
count ++
|
||||
end if
|
||||
|
||||
|
||||
if count > 10000
|
||||
CFStringRef ReturnedKey
|
||||
ReturnedKey = Inkey %(90,1),@"Any key for another one. Q to quit"
|
||||
if fn StringContainsString(ReturnedKey, @"q") then end
|
||||
if fn StringContainsString(ReturnedKey, @"Q") then end
|
||||
fn ClearPixelArray
|
||||
end if
|
||||
|
||||
|
||||
end fn
|
||||
|
||||
|
||||
fn ClearPixelArray
|
||||
|
||||
fn AppSetTimer( .000001, @Fn DrawPixels, _true )
|
||||
|
||||
handleevents
|
||||
Loading…
Add table
Add a link
Reference in a new issue