#python #python-3.x #math #turtle-graphics #cartesian-coordinates
#python #python-3.x #математика #turtle-графика #декартовы координаты
Вопрос:
Я хочу нарисовать 1 цепочку ДНК с ее азотистыми основаниями: маленький кусочек цепочки, одно основание, маленький кусочек цепочки, другое основание и так далее. В таком порядке. Но когда вы прерываете circle()
, (в данном случае полукруг, прядь), чтобы нарисовать что-то другое, например прямую линию (которая будет основанием), circle()
угол изменяется. И я не могу придумать способ изменить это обратно.
Итак, самый простой способ, сделайте полукруг, проведите линию и продолжите полукруг, кажется, это просто goto()
граница и нарисуйте там то, что вы хотите.
Но вычислять все точные координаты окружности для каждого отдельного круга, на случай, если мне понадобится больше, было бы долго.
Есть какой-либо способ заставить turtle или любой другой материал / программное обеспечение возвращать в качестве выходных данных все координаты окружности, которую я нарисовал / закодировал?
Например, если бы я нарисовал это circle()
:
from turtle import *
t = Turtle()
t.seth(45)
t.circle(100,90)
t.circle(-100,90)
возможно ли, чтобы turtle вернул координаты, использованные для его создания?
И вот пример того, что я подразумеваю под созданием круга, используя только его координаты:
from turtle import *
t = Turtle()
def got(x,y,d) : # to use goto more easily
t.penup()
t.goto(x,y)
t.pendown()
t.seth(d)
x=0
y=0
d=0
megalist = [5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,1,1,1,1,1,1,-1,0,0,0,0,0-1,-1,-1,-1,-1,-1,-1,-1,-1,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,]
for i in megalist :
x = x i
y= y 4
got(x,y,d)
t.forward(-1)
Ответ №1:
возможно ли, чтобы turtle вернул координаты, использованные для его создания?
ДА. Существует несколько *_poly()
методов, обычно используемых для создания пользовательских курсоров, которые можно использовать для выполнения того, что вы описываете:
from turtle import Screen, Turtle
screen = Screen()
turtle = Turtle(visible=False)
turtle.penup()
turtle.seth(45)
turtle.begin_poly()
turtle.circle(100, 90)
turtle.circle(-100, 90)
turtle.end_poly()
polygon = turtle.get_poly()
print(polygon)
for point in polygon:
turtle.goto(point)
turtle.pendown()
screen.exitonclick()
ВЫВОД На КОНСОЛЬ
> python3 test.py
((0.00,0.00), (13.96,17.51), (23.68,37.68), (28.66,59.51), (28.66,81.91),
(23.68,103.74), (13.96,123.91), (0.00,141.42), (-13.96,158.93),
(-23.68,179.10), (-28.66,200.94), (-28.66,223.33), (-23.68,245.16),
(-13.96,265.34), (0.00,282.84))
>
ВЫВОД НА ЭКРАН
когда вы прерываете круг (), (…) чтобы нарисовать что-то другое, например прямую линию (…), угол круга () изменяется. И я не могу придумать способ изменить это обратно.
Я полагаю, что вы можете прерваться circle()
, прокручивая небольшие экстенты, сохранить положение и заголовок, выполнить свой чертеж и восстановить положение и заголовок перед следующей итерацией экстента круга. Вот простой пример, который просто сохраняет и восстанавливает заголовок, поскольку сам рисунок возвращает позицию:
from turtle import Screen, Turtle
screen = Screen()
turtle = Turtle(visible=False)
turtle.speed('fastest') # because I have no patience
turtle.setheading(45)
for extent in range(9):
turtle.circle(100, 10)
heading = turtle.heading()
turtle.setheading(0)
turtle.forward(10)
turtle.backward(10)
turtle.setheading(heading)
for extent in range(9):
turtle.circle(-100, 10)
heading = turtle.heading()
turtle.setheading(180)
turtle.forward(10)
turtle.backward(10)
turtle.setheading(heading)
screen.exitonclick()
ВЫВОД НА ЭКРАН
Комментарии:
1. Аманзинг, ты ответил на оба вопроса, спасибо!! Оба варианта работают