|
Примеры фракталов, сгенерированных СИФ
Архив проекта: 12_fractals.py
На этом занятии
мы рассмотрим несколько вариантов систем итерированных функций для построения
различных фракталов. Для этого я воспользуюсь рандомизированным вариантом СИФ и
буду итерационно, точка за точкой строить фрактальные изображения.
Но вначале внесем
небольшие изменения в программу прошлого занятия. Создадим
поверхность, на которой будем рисовать фрактал:
surf_draw = pygame.Surface((W, H))
surf_draw.fill(WHITE)
Затем, определим
коэффициенты, цвет точек, создадим экземпляр класса SIF и зададим координату
начальной точки и размер изображения фрактала:
C = [(0.7, 0, 0, 0.7, 0.1496, 0.2962),
(0.1, -0.433, 0.1732, 0.25, 0.4478, 0.0014),
(0.1, 0.433, -0.1732, 0.25, 0.4445, 0.1559),
(0.0, 0.0, 0.0, 0.3, 0.4987, 0.007),
]
color = (40, 97, 21)
sif = SIF(C)
pt = (0, 0)
scale = (400, 400)
pos = (0, 0)
Далее, в главном
цикле реализуем формирование и отрисовку точек на каждой итерации:
n_iter = 1
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
if n_iter < 100000:
pygame.draw.circle(surf_draw, color, (round(pt[0]), round(pt[1])), 0)
pt = sif.get_next_point( pos, pt, scale )
n_iter += 1
sc.blit( pygame.transform.flip(surf_draw, False, True), (200, -100) )
pygame.display.update()
clock.tick(FPS)
Мы здесь все
рисуем на поверхности surf_draw и чтобы
изображение фрактала воспринималось привычным образом, зеркально отображаем эту
поверхность по вертикали и рисуем с координатами (200; -100).
Добавим еще
отрисовку номера итерации. Определим шрифт и начальный текст:
f_sys = pygame.font.SysFont('arial', 36)
sc_text = f_sys.render(f'Итерация: 0', 1, BLACK)
А в главном
цикле реализуем отображение текста:
if n_iter % 100 == 0:
sc_text = f_sys.render(f'Итерация: {n_iter}', 1, BLACK)
sc.blit( pygame.transform.flip(surf_draw, False, True), (200, -100) )
pygame.draw.rect(sc, WHITE, sc_text.get_rect(topleft=(50, 20)))
sc.blit( sc_text, (50, 20))
То есть, мы
будем показывать итерации, кратные 100, чтобы не перегружать процессор
компьютера.
Все, программа
готова. Теперь достаточно менять список коэффициентов C для получения
различных фрактальных форм. Поехали! (См. видео).
|