Barnsley fern

For finished programs
Post Reply
User avatar
kibernetik
Site Admin
Posts: 131
Joined: Tue Aug 06, 2019 3:03 pm

Barnsley fern

Post by kibernetik » Mon Sep 09, 2019 9:07 am

This is my version of this fractal:

Code: Select all

w h = scrsize|2
draw clear 1, 1, 1
draw color 0, 0.5, 0
do
  r = rndi 100
  if r<85 : x y = 0.85*x+0.04*y, -0.04*x+0.85*y+1.6
  elseif r<92 : x y = 0.2*x-0.26*y, 0.23*x+0.22*y+1.6
  elseif r<99 : x y = -0.15*x+0.28*y, 0.26*x+0.24*y+0.44
  else : x y = 0, 0.16*y
  endif
  draw point x/10*w+w/2, h-y/10*h
redo
Снимок экрана 2019-09-09 в 14.05.30.jpg
Снимок экрана 2019-09-09 в 14.05.30.jpg (208.07 KiB) Viewed 186 times

udo
Posts: 6
Joined: Mon Sep 30, 2019 8:55 am

Re: Barnsley fern

Post by udo » Fri Jan 31, 2020 1:24 pm

This is a version after that published by Martin Reiser and Niklaus Wirth in their book "Programmieren in Oberon: Das neue Pascal", published 1994. The English original "Programming in Oberon: Steps beyond Pascal and Module" was published in 1992.
See: https://en.wikipedia.org/wiki/Oberon_(p ... _language)
The program will print the famous fern and a maple leaf!

Code: Select all

' IFS
' version 1.0
' U. Rabe, 2020
' Done with BestBasic
' It's public domain
' Based on a sample in:
' Martin Reise & Niklaus Wirth
' Programmieren in Oberon: Das neue Pascal
' Addison-Wesly 1994
' ISBN 3-89319-675-9

Farn
data 300, 750, 64
data 0, 0.85, 0.2, -0.15, 0, 0.04, -0.26, 0.28
data 0, -0.04, 0.23, 0.26, 0.16, 0.85, 0.22, 0.24
data 0, 0, 0, 0, 0, 1.6, 1.6, 0.44
data 0.01, 0.85, 0.07, 0.07

Ahorn
data 100, 600, 450
data 0.65, 0.65, 0.32, -0.32, -0.013, -0.026, -0.32, 0.32
data 0.013, 0.026, 0.32, 0.32, 0.65, 0.65, 0.32, 0.32
data 0.175, 0.175, 0.2, 0.8, 0, 0.35, 0, 0
data 0.3, 0.3, 0.2, 0.2

inbutt set 1 "Fern", 10, 10, 100, 25
inbutt set 2 "Maple leaf", 10, 45, 100, 25
inbutt set 3 "Bye", 10, 80, 100, 25

Menue
do 
	if inbutt hit 1 then
		o=1
		break
	else if inbutt hit 2 then
		o=2
		break
	else if inbutt hit 3 then
		o=3
		break
	end if
redo

draw clear 1, 1, 1

if o=3 then
	end
else if o=1 then
	restore to Farn
else if o=2 then
	restore to Ahorn
end if

read x0, y0, e
read a1, a2, a3, a4
read b1, b2, b3, b4
read c1, c2, c3, c4
read d1, d2, d3, d4
read e1, e2, e3, e4
read f1, f2, f3, f4
read p1, p2, p3, p4

x=0
y=0
scr size 600, 900
randomize

for i=1 to 100000
	rn=rnd
	if rn<p1 then
		xp=a1*x+b1*y+e1
		yp=c1*x+d1*y+f1
	else if rn<(p1+p2) then
		xp=a2*x+b2*y+e2
		yp=c2*x+d2*y+f2
	else if rn<(p1+p2+p3) then
		xp=a3*x+b3*y+e3
		yp=c3*x+d3*y+f3
	else
		xp=a4*x+b4*y+e4
		yp=c4*x+d4*y+f4
	end if
	x=xp
	xi=x0+(x*e)
	y=yp
	eta=y0-(y*e)
	draw point xi, eta
next i

goto Menue

Attachments
maple.png
maple.png (200.71 KiB) Viewed 65 times
fern.png
fern.png (171.36 KiB) Viewed 65 times

User avatar
kibernetik
Site Admin
Posts: 131
Joined: Tue Aug 06, 2019 3:03 pm

Re: Barnsley fern

Post by kibernetik » Fri Jan 31, 2020 2:03 pm

Maple leaf is fantastic!

Post Reply