Różnice między wybraną wersją a wersją aktualną.
Poprzednia rewizja po obu stronachPoprzednia wersjaNowa wersja | Poprzednia wersja | ||
narzedzia:fraktale_python [2025/05/10 23:54] – administrator | narzedzia:fraktale_python [2025/05/16 18:39] (aktualna) – administrator | ||
---|---|---|---|
Linia 1: | Linia 1: | ||
- | ====== Fraktale w pythonie ====== | + | ====== |
[[https:// | [[https:// | ||
+ | {{:: | ||
+ | |||
+ | <code python fractal_ardugeek.py> | ||
+ | import turtle | ||
+ | import time | ||
+ | |||
+ | # Configuration | ||
+ | FONT = (" | ||
+ | LETTER_SPACING = 65 | ||
+ | ANIMATION_DELAY = 0.5 # seconds between drawing each letter | ||
+ | FRACTAL_ITER = 2 # reduced iterations for faster drawing | ||
+ | FRACTAL_SCALE = 10 # scaling factor for fractal drawing | ||
+ | |||
+ | # L-system definitions for each letter (axiom, rules, angle) | ||
+ | # 8 distinct fractals for 8 letters in " | ||
+ | L_SYSTEMS = [ | ||
+ | (" | ||
+ | (" | ||
+ | (" | ||
+ | (" | ||
+ | (" | ||
+ | (" | ||
+ | (" | ||
+ | (" | ||
+ | ] | ||
+ | |||
+ | # Setup screen and turtles | ||
+ | def setup(): | ||
+ | screen = turtle.Screen() | ||
+ | screen.title(" | ||
+ | screen.bgcolor(" | ||
+ | |||
+ | pen = turtle.Turtle() | ||
+ | pen.hideturtle() | ||
+ | pen.penup() | ||
+ | pen.speed(1) | ||
+ | pen.color(" | ||
+ | |||
+ | fractal_t = turtle.Turtle() | ||
+ | fractal_t.hideturtle() | ||
+ | fractal_t.penup() | ||
+ | fractal_t.speed(0) | ||
+ | fractal_t.color(" | ||
+ | |||
+ | return screen, pen, fractal_t | ||
+ | |||
+ | # Generate L-system string | ||
+ | def generate_lsystem(axiom, | ||
+ | s = axiom | ||
+ | for _ in range(iterations): | ||
+ | s = '' | ||
+ | return s | ||
+ | |||
+ | # Draw L-system with given turtle | ||
+ | def draw_lsystem(t, | ||
+ | for cmd in instructions: | ||
+ | if cmd in (' | ||
+ | t.forward(scale) | ||
+ | elif cmd == ' | ||
+ | t.right(angle) | ||
+ | elif cmd == ' | ||
+ | t.left(angle) | ||
+ | elif cmd == ' | ||
+ | stack.append((t.position(), | ||
+ | elif cmd == ' | ||
+ | pos, head = stack.pop() | ||
+ | t.penup() | ||
+ | t.goto(pos) | ||
+ | t.setheading(head) | ||
+ | t.pendown() | ||
+ | |||
+ | # Main animation: draw each fractal once, then write letters on top | ||
+ | def animate_text_with_fractals(screen, | ||
+ | # center the text on screen | ||
+ | total_width = len(text) * FONT[1] * 0.6 + (len(text)-1) * LETTER_SPACING | ||
+ | start_x = -total_width / 2 | ||
+ | baseline_y = 0 | ||
+ | pen.goto(start_x, | ||
+ | |||
+ | # draw persistent fractals behind each letter | ||
+ | for i, letter in enumerate(text): | ||
+ | axiom, rules, angle = L_SYSTEMS[i] | ||
+ | inst = generate_lsystem(axiom, | ||
+ | fractal_t.penup() | ||
+ | # align each fractal under its letter | ||
+ | fractal_t.goto(start_x + i*(FONT[1]*0.6 + LETTER_SPACING), | ||
+ | fractal_t.setheading(90) | ||
+ | fractal_t.pendown() | ||
+ | global stack | ||
+ | stack = [] | ||
+ | draw_lsystem(fractal_t, | ||
+ | fractal_t.penup() | ||
+ | |||
+ | # write all letters on top, one by one | ||
+ | pen.goto(start_x, | ||
+ | for letter in text: | ||
+ | pen.write(letter, | ||
+ | pen.forward(FONT[1]*0.6 + LETTER_SPACING) | ||
+ | time.sleep(ANIMATION_DELAY) | ||
+ | |||
+ | if __name__ == ' | ||
+ | | ||
+ | screen, pen, fractal_t = setup() | ||
+ | input() | ||
+ | animate_text_with_fractals(screen, | ||
+ | pen.penup() | ||
+ | screen.mainloop() | ||
+ | |||
+ | </ | ||
{{: | {{: |