查看乌龟circle()图中使用的所有坐标

时间:2019-04-03 04:17:00

标签: python python-3.x math turtle-graphics cartesian-coordinates

我想绘制一条带有氮碱基的DNA链:一小片链,一个碱基,一小片链,另一个碱基,依此类推。按此顺序。 但是,当您中断circle()(在这种情况下为半圆,即股线)以绘制其他内容(例如直线(将作为底数))时,circle()角度将发生变化。而且我想不出办法将其改回。

因此,更简单的方法是制作一个半圆,画一条线,然后继续该半圆,似乎只是goto()的座标,然后在此处绘制所需的内容。

但是要计算一个圆的所有精确坐标,对于每个不同的圆,如果我需要更多,则将很长。

有什么方法可以使乌龟或任何其他东西/软件返回我画过/编码过的圆的所有坐标作为输出?

就像,如果我画了这个circle()

from turtle import *

t = Turtle()

t.seth(45)
t.circle(100,90)
t.circle(-100,90)

乌龟是否有可能返回制作它的坐标?

这是我仅通过其坐标创建圆的意思的示例:

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 个答案:

答案 0 :(得分:1)

  

乌龟能否返回用于制作它的坐标?

是的。有一些*_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))
>

屏幕输出

enter image description here

  

当您中断circle(),(...)以绘制其他内容时,例如   直线(...),更改circle()角度。我想不到   一种改回它的方法。

我的信念是,您可以通过在较小的范围内循环来中断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()

屏幕输出

enter image description here