Я считаю, что ваша проблема связана с управлением углами, и вы предполагаете, что rx
и lx
могут иметь общее y
.Вот моя переделка в Python turtle:
from turtle import Screen, Turtle
from math import pi as PI, sin as sine, cos as cosine
THETA = PI / 10 # spread between branches
def branch(size, cx, cy, noi, alpha):
rx = cx + cosine(alpha - THETA) * size
ry = cy - sine(alpha - THETA) * size
line(cx, cy, rx, ry)
lx = cx + cosine(alpha + THETA) * size
ly = cy - sine(alpha + THETA) * size
line(cx, cy, lx, ly)
if noi != 0: # Number of increments - noi
branch(size * 0.9, rx, ry, noi - 1, alpha - THETA)
branch(size * 0.9, lx, ly, noi - 1, alpha + THETA)
def line(x0, y0, x1, y1):
turtle.penup()
turtle.goto(x0, y0)
turtle.pendown()
turtle.goto(x1, y1)
screen = Screen()
screen.setup(1000, 1000)
screen.setworldcoordinates(-500, 500, 500, -500) # invert Y axis
turtle = Turtle(visible=False)
line(0, 400, 0, 200) # trunk
branch(100, 0, 200, 8, PI/2)
screen.exitonclick()
В этом примере разброс ветвей является постоянной величиной, но нам все еще нужно управлять углом, под которым изгибается каждая ветвь: