使用 python 绘制圆圈目标

draw a circles target using python

我的程序使用 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)

代码制作了一条移动的曲线,但我希望立即绘制圆。

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()

或者,我们可以自己消除圆形游标:

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()

但这并没有产生令人满意的结果:

当然,我们总是可以作弊并使用 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() 方法好,即使你提高 turtle.circle()steps 参数:

for the first code how to add an arrow on the top of each curve, one at down of each curve?

修改我的第三个示例更容易完成,因为我们可以更轻松地绘制半圆并标记光标。我正在使用自定义光标来跨圆圈对齐箭头:

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()

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()