Нарисуйте цель кругов, используя Python - PullRequest
0 голосов
/ 08 мая 2018

Circles

Эта моя программа использует turtle, чтобы нарисовать цель круга:

import turtle

def origin_circle(turtle, radius):
    turtle.penup()
    turtle.goto(0, -radius)
    turtle.pendown()
    turtle.circle(radius)

for radius in range(100, 200, 10):
    origin_circle(turtle, radius)

Код создает движущуюся кривую, но я хочу, чтобы круг нарисовался сразу.

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019
import turtle
ab=turtle.Turtle()
ab.speed(0)
import turtle

def zielscheibe(ringe=10):
    if ringe<1 or ringe>1000:
        ab.write('Bitte eine Zahl zwischen 1 und 1000 eingeben')
        return
    ab.pu()
    ab.goto(300,0)
    ab.seth(90)
    x=300/ringe
    for n in range(ringe):
        ab.pd()
        if n ==ringe-1:
            ab.color('black')
        elif n %2==0:
            ab.color('red')
        else:
            ab.color('white')
        ab.begin_fill()
        ab.circle(300-x*n)
        ab.end_fill()
        ab.pu()
        ab.left(90)
        ab.fd(x)
        ab.right(90)

zielscheibe(10)
turtle.mainloop()
0 голосов
/ 08 мая 2018

Метод circle() рисует круг, но метод dot() выделяет один. Однако метод dot() не имеет отдельной строки и концепции заполнения и имеет тенденцию перезаписывать себя, поэтому мы должны обращаться с ним осторожно:

import turtle

def origin_circle(turtle, radius):
    turtle.dot(radius + 2, 'black')
    turtle.dot(radius, 'white')

for radius in range(200, 0, -40):
    origin_circle(turtle, radius)

turtle.hideturtle()

turtle.mainloop()

enter image description here

В качестве альтернативы, мы могли бы сами штамповать круговые курсоры:

import turtle

def origin_circle(turtle, radius):
    turtle.shapesize(radius)
    turtle.stamp()

turtle.shape('circle')
turtle.color('black', 'white')

for radius in range(10, 0, -2):
    origin_circle(turtle, radius)

turtle.hideturtle()

turtle.mainloop()

Но это не дает приятного результата:

enter image description here

Конечно, мы всегда можем обмануть и использовать turtle.speed('fastest'), или, что еще лучше, вообще отключить трассировку:

import turtle

def origin_circle(turtle, radius):
    turtle.penup()
    turtle.sety(-radius)
    turtle.pendown()
    turtle.circle(radius, steps=90)

turtle.tracer(False)

for radius in range(20, 120, 20):
    origin_circle(turtle, radius)

turtle.hideturtle()

turtle.tracer(True)

turtle.mainloop()

Но результат все равно не будет выглядеть так же хорошо, как подход turtle.dot(), даже если вы увеличите параметр steps в turtle.circle():

enter image description here

для первого кода, как добавить стрелку в верхней части каждой кривой, один вниз каждой кривой?

Это проще сделать, изменив мой третий пример, так как мы можем легче рисовать полукруги и ставить курсор. Я использую пользовательский курсор для выравнивания стрелок по кругу:

import turtle

def origin_circle(turtle, radius):
    turtle.penup()
    turtle.sety(-radius)
    turtle.pendown()

    turtle.stamp()
    turtle.circle(radius, extent=180, steps=45)
    turtle.stamp()
    turtle.circle(radius, extent=180, steps=45)

turtle.addshape("pointer", ((0, 0), (5, -4), (0, 4), (-5, -4)))
turtle.shape("pointer")

turtle.tracer(False)

for idx, radius in enumerate(range(20, 120, 20), start=0):
    origin_circle(turtle, radius)

turtle.hideturtle()

turtle.tracer(True)

turtle.mainloop()

enter image description here

...