Skip to content

Instantly share code, notes, and snippets.

@slaiyer
Created May 6, 2021 17:21
Show Gist options
  • Save slaiyer/3cc53a52bcc70a55fa5700de25524abb to your computer and use it in GitHub Desktop.
Save slaiyer/3cc53a52bcc70a55fa5700de25524abb to your computer and use it in GitHub Desktop.
Hilbert curve
#!/usr/bin/env python3
import argparse
from turtle import *
def hilbert_curve(step, parity, n):
if n < 1:
return
angle = parity * 90
parity_neg = -parity
n_1 = n - 1
left(angle)
hilbert_curve(step, parity_neg, n_1)
forward(step)
update()
right(angle)
hilbert_curve(step, parity, n_1)
forward(step)
update()
hilbert_curve(step, parity, n_1)
right(angle)
forward(step)
update()
hilbert_curve(step, parity_neg, n_1)
left(angle)
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument(
'--step',
'-s',
type=int,
default=8,
help='Step size',
)
parser.add_argument(
'--parity',
'-p',
type=float,
default=1,
help='Parity',
)
parser.add_argument(
'-n',
type=int,
default=4,
help='N',
)
args = parser.parse_args()
step = args.step
parity = args.parity
n = args.n
tracer(0, 0)
bgcolor('black')
hideturtle()
title('Hilbert curve')
speed('fastest')
pencolor('green')
width(2)
penup()
goto(
step * 2 - window_width() / 2,
step * 3 - window_height() / 2,
)
pendown()
hilbert_curve(step, parity, n)
exitonclick()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment