Проблема с
tt.forward(x)
Помните, что ваш x
всегда отрицателен, а длина стороны не x
, а скорее -2 * x
, если вы хотите быть симметричным около нуля. Поскольку ваши треугольники являются вложенными, вы также можете вычислить начальный y
из x
, учитывая, что он составляет 1/3 пути вверх по главному биссектрисе. -sqrt(3) / 3 * x
поэтому помещает центр окружностей, описанных и вписанных в ваш треугольник, в 0, 0.
На самом деле, возможно, проще просто зафиксировать длину стороны и вычислить x
и y
от этого:
import turtle as tt
from math import sqrt
def recursiveTri(side, shrink):
if side < 10: return
tt.penup()
tt.goto(-side / 2, sqrt(3) / 6 * side)
tt.pendown()
for _ in range(3):
tt.forward(side)
tt.right(120)
recursiveTri(side - shrink, shrink)
tt.penup()
tt.home()
tt.dot()
recursiveTri(300, 30)
В этом случае shrink
- это общая сумма, удаленная с каждой стороны. Если вы хотите, чтобы сумма была на шаг вперед, измените рекурсивный вызов на recursiveTri(side - 2 * shrink, shrink)
.
Результат (без умножения shrink
на 2) будет