Introduction to Programming using Python 1st Edition

Published by Pearson
ISBN 10: 0132747189
ISBN 13: 978-0-13274-718-9

Chapter 15 - Recursion - Programming Exercises - Page 528: 15.33

Answer

Here's a program that displays a Hilbert curve of a given order using Tkinter in Python: from tkinter import * class HilbertCurve: def __init__(self, order): self.order = order self.side = 2 ** order self.size = 600 // self.side self.color = "#000000" self.root = Tk() self.root.title("Hilbert Curve") self.canvas = Canvas(self.root, width=600, height=600) self.canvas.pack() self.draw() def draw(self): x, y = self.side - 1, 0 self.draw_hilbert(x, y, self.order, 0, 1) self.root.mainloop() def draw_hilbert(self, x, y, order, direction, sign): if order == 0: x0 = x * self.size y0 = y * self.size x1 = (x + 1) * self.size y1 = (y + 1) * self.size self.canvas.create_line(x0, y0, x1, y1, fill=self.color, width=2) else: n = 2 ** (order - 1) if direction == 0: self.draw_hilbert(x, y, order - 1, 0, -sign) self.draw_hilbert(x, y + n, order - 1, 1, sign) self.draw_hilbert(x + n, y + n, order - 1, 0, sign) self.draw_hilbert(x + n, y, order - 1, 3, -sign) elif direction == 1: self.draw_hilbert(x, y, order - 1, 1, sign) self.draw_hilbert(x + n, y, order - 1, 0, -sign) self.draw_hilbert(x + n, y + n, order - 1, 1, sign) self.draw_hilbert(x, y + n, order - 1, 2, -sign) elif direction == 2: self.draw_hilbert(x, y + n, order - 1, 2, sign) self.draw_hilbert(x + n, y + n, order - 1, 1, -sign) self.draw_hilbert(x + n, y, order - 1, 2, sign) self.draw_hilbert(x, y, order - 1, 3, -sign) else: self.draw_hilbert(x + n, y, order - 1, 3, sign) self.draw_hilbert(x + n, y + n, order - 1, 2, -sign) self.draw_hilbert(x, y + n, order - 1, 3, sign) self.draw_hilbert(x, y, order - 1, 0, -sign) hilbert = HilbertCurve(3) # create a Hilbert curve of order 3 This program creates a HilbertCurve class that takes an order parameter and generates a Tkinter window with a canvas. The draw() method calls the draw_hilbert() method to recursively draw the Hilbert curve by dividing the current square into four smaller squares and recursively drawing each of them. The direction parameter indicates the direction of the curve, and the sign parameter determines whether to draw the curve forward or backward.

Work Step by Step

----
Update this answer!

You can help us out by revising, improving and updating this answer.

Update this answer

After you claim an answer you’ll have 24 hours to send in a draft. An editor will review the submission and either publish your submission or provide feedback.