65 lines
2.2 KiB
Python
Executable File
65 lines
2.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import argparse
|
|
from turtle import RawPen, Screen
|
|
import random
|
|
|
|
def parse_args():
|
|
parser = argparse.ArgumentParser(
|
|
description="Draw Barnsley's fern using Python's Turtle graphics.")
|
|
parser.add_argument('-d', '--dots', metavar='number',
|
|
help='Number of dots to draw.',
|
|
type=int, default=20000)
|
|
parser.add_argument('-bg', '--background', metavar='color',
|
|
type=str, default='white',
|
|
help='Background color.')
|
|
parser.add_argument('-fg', '--foreground', metavar='color',
|
|
type=str, default='green',
|
|
help='Drawing color.')
|
|
parser.add_argument('-s', '--scale', metavar='pixels',
|
|
type=int, default=50,
|
|
help='Choose scale. Default is 50 pixels.')
|
|
parser.add_argument('-ww', '--width', metavar='pixels',
|
|
type=int, default=600,
|
|
help='Window width.')
|
|
parser.add_argument('-wh', '--height', metavar='pixels',
|
|
type=int, default=800,
|
|
help='Window width.')
|
|
args = parser.parse_args()
|
|
return args
|
|
|
|
def draw(root):
|
|
pen = RawPen(root)
|
|
pen.speed(0)
|
|
pen.ht()
|
|
pen.pu()
|
|
pen.screen.bgcolor(args.background)
|
|
x = 0.0
|
|
y = 0.0
|
|
for i in range(args.dots):
|
|
r = random.randint(0, 100)
|
|
if r <= 1:
|
|
tempx = 0.0
|
|
tempy = 0.16 * y
|
|
elif r <= 7:
|
|
tempx = 0.2 * x - 0.26 * y
|
|
tempy = 0.23 * x + 0.22 * y + 1.6
|
|
elif r <= 15:
|
|
tempx = -0.15 * x + 0.28 * y
|
|
tempy = 0.26 * x + 0.24 * y + 0.44
|
|
else:
|
|
tempx = 0.85 * x + 0.04 * y
|
|
tempy = -0.04 * x + 0.850 * y + 1.6
|
|
x, y = tempx, tempy
|
|
pen.setpos(x * args.scale - args.scale // 2, y * args.scale - args.scale * 3)
|
|
pen.dot(1, args.foreground)
|
|
print('All done!')
|
|
input('Press any key to quit')
|
|
|
|
if __name__ == '__main__':
|
|
args = parse_args()
|
|
root = Screen()
|
|
root.setup (width=600, height=800)
|
|
root.title('Barnsley fern')
|
|
root.tracer(n=15000)
|
|
draw(root)
|