from math import * from turtle import * def dist(a, b): return sqrt((a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2) def angle(a, b): return degrees(atan2(b[1] - a[1], b[0] - a[0])) def segment(a, b, coul): pensize(1) r = dist(a, b) penup() goto(a) color(coul) setheading(angle(a, b)) for i in range(r): penup() if i % 5 else pendown() fd(1) def arc(a, b, c, w, coul): color(coul) pensize(w) bc = dist(b, c) ac = dist(a, c) ab = dist(a, b) u = angle(a, b) t = degrees(acos((ac * ac + ab * ab - bc * bc) / (2 * ac * ab))) penup() goto(b) setheading(u + 90) pendown() circle(int(ab), t) def avance(a, b, d): penup() goto(a) setheading(angle(a, b)) fd(d) pendown() pensize(4) goto(position()) pensize(1) pt = [(0, -100)] speed(1) penup() goto(pt[0]) pendown() for _ in range(6): pensize(1) circle(100, 60) pensize(4) goto(position()) pt.append(position()) r = dist(pt[0], pt[2]) pa = [] for i in range(3): segment(pt[2 * i + 2], pt[(2 * i + 5) % 6], "grey") for i in range(3): segment(pt[2 * i], pt[(2 * i + 2) % 6], "red") arc(pt[2 * i], pt[2 * i + 2], pt[(2 * i + 4) % 6], 2, "red") for i in range(3): avance(pt[2 * i + 1], pt[(2 * i + 4) % 6], 200 - r) p = position() segment(p, pt[2 * i + 2], "blue") arc(p, pt[2 * i + 2], pt[2 * i], 1, "blue") for i in range(3): avance(pt[2 * i + 2], (0, 0), 30) pa.append(position()) for i in range(3): avance(pt[2 * i + 1], pt[(2 * i + 4) % 6], 50) p = position() segment(p, pa[i], "purple") arc(p, pa[i], pa[(i + 2) % 3], 1, "purple") hideturtle()