diff --git a/.DS_Store b/.DS_Store index 025b1a5..b0a0654 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/typeface.py b/typeface.py index c86083d..9e24bd0 100644 --- a/typeface.py +++ b/typeface.py @@ -9,7 +9,8 @@ # move the turtle along the diagonal of a square with side length x, # the turtle should move a distance of sqrt(x) -from turtle import (pos, teleport, goto) +from turtle import (pos, teleport, goto, heading, setheading) +from math import sin, cos, radians class Point(tuple): "Class for doing element-wise arithmetic on tuples" @@ -25,6 +26,11 @@ class Point(tuple): def __truediv__(self, other): return Point((x / other for x in self)) +def rotate_2d_degrees(point, angle): + x, y = point + angle = radians(angle) + return Point((x * cos(angle) - y * sin(angle), x * sin(angle) + y * cos(angle))) + def bezier(t, *points: tuple[float, ...]) -> Point: "Recursive definition of a Bezier curve" assert(len(points) > 0) @@ -36,7 +42,8 @@ def draw_bezier(unit, segments, *points: tuple[float, ...]): "Draws bezier and returns turtle to initial position" segments = int(unit * (segments / 40)) origin = pos() - points = tuple(origin + unit * Point(x) for x in points) + angle = heading() + points = tuple(origin + rotate_2d_degrees(unit * Point(x), angle) for x in points) teleport(*points[0]) for i in range(0, segments + 1):