95 lines
1.9 KiB
Text
95 lines
1.9 KiB
Text
// -------------------------
|
|
// Sierpinski Square Curve
|
|
//
|
|
// Using FutureBasic 7.0.34
|
|
// August 2025, R.W.
|
|
//
|
|
// -------------------------
|
|
|
|
dim as long ord = 5 // recursion depth
|
|
dim as double segLen = 7 // length of each step
|
|
dim as double xpos, ypos
|
|
dim as int dirn
|
|
CGFloat red, green, blue
|
|
colorref Colr
|
|
|
|
// Create main window
|
|
|
|
void local fn BuildMainWindow(wTag as NSInteger)
|
|
colorref wco
|
|
CGRect r
|
|
SInt32 wndStyleMask
|
|
wco = fn ColorBlack
|
|
wndStyleMask = NSWindowStyleMaskTitled
|
|
wndStyleMask += NSWindowStyleMaskClosable
|
|
r = fn CGRectMake( 0, 0, 560, 540 )
|
|
window wTag, @" Sierpinsky Square Curve ", r, wndStyleMask
|
|
WindowSetBackgroundColor(wTag, wco)
|
|
ViewSetFlipped( _WindowContentViewTag, YES )
|
|
windowcenter (wTag)
|
|
AppSetAppearance(fn AppearanceNamed(NSAppearanceNameDarkAqua))
|
|
end fn
|
|
|
|
//
|
|
// Draw forward in current direction
|
|
//
|
|
local fn Forward(d as int)
|
|
select case (dirn AND 3)
|
|
case 0 : xpos = xpos + segLen
|
|
case 1 : ypos = ypos + segLen
|
|
case 2 : xpos = xpos - segLen
|
|
case 3 : ypos = ypos - segLen
|
|
end select
|
|
|
|
line xpos, ypos
|
|
red = 0.90
|
|
green = 0.90
|
|
blue = 0.00
|
|
Colr = fn ColorWithRGB(red,green,blue,1.0)
|
|
pen 2, Colr
|
|
Oval fill (xpos, ypos, 1, 1),Colr
|
|
|
|
dirn = dirn + d
|
|
end fn
|
|
|
|
//
|
|
// Recursive square curve
|
|
//
|
|
local fn S(level as int)
|
|
if level > 0
|
|
fn S(level - 1)
|
|
fn Forward(-1)
|
|
fn Forward(+1)
|
|
fn Forward(-1)
|
|
fn S(level - 1)
|
|
fn Forward(+1)
|
|
fn Forward(+1)
|
|
fn S(level - 1)
|
|
fn Forward(-1)
|
|
fn Forward(+1)
|
|
fn Forward(-1)
|
|
fn S(level - 1)
|
|
end if
|
|
end fn
|
|
|
|
// -------------------------
|
|
// Main
|
|
|
|
fn BuildMainWindow(1)
|
|
|
|
// starting position
|
|
xpos = 560 /2
|
|
ypos = 50
|
|
dirn = 0
|
|
line xpos, ypos
|
|
|
|
// axiom: F(+1) S(ord-1) F(+1) F(+1) S(ord-1) F
|
|
//
|
|
fn Forward(+1) // F(+1)
|
|
fn S(ord - 1) // S(ord-1)
|
|
fn Forward(+1) // F(+1)
|
|
fn Forward(+1) // F(+1)
|
|
fn S(ord - 1) // S(ord-1)
|
|
fn Forward(0) // final F with no turn
|
|
|
|
handleEvents
|