def render(self): # Semicircles computation visited = {0} for multiple in range(2, self.circles): origin_x = 0 target_x = multiple color = 'black' while target_x <= self.iterations: if origin_x == 0 and target_x not in visited : direction = '-' color = 'red' else: direction = '+' semicircle = Semicircle((origin_x, 0), (target_x, 0), angle_dir=direction) semicircle.stroke(color, width=.6, opacity=.25) semicircle.fill('none') self.add(semicircle) visited.add(target_x) origin_x += multiple target_x += multiple # Number line for i in range(self.iterations + 1): circle = Circle((i, 0), .25) circle.stroke('black', width=.1) circle.fill('white') self.add(circle) self.stretch() self.save()