| #! /usr/bin/env python | 
| import sys | 
| from typing import Final | 
| from math import pi, cos | 
| import turtle | 
|   | 
| amplitude: Final[tuple[float, float]] = (1, 1) | 
| # frequent | 
| omega: Final[tuple[float, float]] = (3, 11) | 
| # phase | 
| phi: Final[tuple[float, float]] = (pi/2, 3*pi/4) | 
|   | 
| # Diskretisieren | 
| N: Final[int] = 360 | 
| step: Final = (2*pi) / N | 
| T: Final = [k * step for k in range(N)] | 
| points = [( | 
|         amplitude[0] * cos(omega[0]*t + phi[0]), | 
|         amplitude[1] * cos(omega[1]*t + phi[1]) | 
|     ) for t in T | 
| ] | 
|   | 
| # Plot with turtle | 
| (canvaswidth, canvasheight) = turtle.screensize() | 
| point_size = 1.5 | 
| turtle.setup(width=canvaswidth + 5*point_size, height=canvaswidth + 5*point_size) | 
|   | 
| # scale up | 
| x_factor = (canvaswidth / 2) / amplitude[0] | 
| y_factor = (canvasheight / 2) / amplitude[1] | 
| print(x_factor, y_factor) | 
| # as fast as possible | 
| turtle.speed(0) | 
| turtle.penup() | 
| turtle.pensize(point_size) | 
| for p in points: | 
|     x = x_factor * p[0] | 
|     y = y_factor * p[1] | 
|     #turtle.teleport(x, y) | 
|     #turtle.dot(point_size) | 
|     turtle.goto(x, y) | 
|     turtle.pendown() | 
| p0 = points[0] | 
| turtle.goto(x_factor * p0[0], y_factor * p0[1]) | 
|   | 
| write_to_file = False | 
| if write_to_file: | 
|     output_dir = "../../2024/python-output" | 
|     image_filename = f"{output_dir}/{sys.argv[0].replace('.py','.eps')}" | 
|     print(f"save file to {image_filename}") | 
|     canvas_screen = turtle.getscreen().getcanvas() | 
|     canvas_screen.postscript(file=image_filename) | 
|   | 
| turtle.done() |