Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 乌龟图形,画星星?_Python_Turtle Graphics - Fatal编程技术网

Python 乌龟图形,画星星?

Python 乌龟图形,画星星?,python,turtle-graphics,Python,Turtle Graphics,我想画一个填充的星星,例如: 到目前为止,我有以下代码: def draw_star(size,color): count = 0 angle = 144 while count <= 5: turtle.forward(size) turtle.right(angle) count += 1 return draw_star(100,"purple") def draw_星形(尺寸、颜色): 计数=0

我想画一个填充的星星,例如:

到目前为止,我有以下代码:

def draw_star(size,color):
    count = 0
    angle = 144
    while count <= 5:
        turtle.forward(size)
        turtle.right(angle)
        count += 1
    return

draw_star(100,"purple")
def draw_星形(尺寸、颜色):
计数=0
角度=144
而计数实验用。但是,如果您只在代码中使用它而不做进一步的更改,您将得到一个“交替”填充:

您需要调整您的例程,以绘制无相交线的星形轮廓(可通过在两个角度之间交替完成),或单独填充星形内部(通过跟踪内接多边形)。

在以下列表中搜索“填充”:


注意:
返回是多余的,通过这样编码循环,它不会画两次轮廓。

要得到一个五角星,你应该为每边画两条线。角度需要增加到72(360/5)


尝试使用不同的
角度值
来获得所需的形状

如果您使用的是Windows,您可能可以:

def create_star (pointer, color_mix, central_point_x_value,\
                    central_point_y_value, length, height):
    travel_distance = length * .223
    pointer.home() # resets the orientation of the pointer
    #   without reseting everything
    pointer.penup()

    pointer.goto (central_point_x_value,central_point_y_value)
    pointer.left(90)
    pointer.forward(height) #move to the top of the star
    pointer.left(18) # must straighten the direction to match the iteration needs
    #draw Star , going counterclockwise
    # starting at the top and ending at the top of each outside triangle
    pointer.pendown()
    pointer.fillcolor (color_mix)
    pointer.begin_fill()
    count = 5
    while count != 0:
        #draw the star
        pointer.left(144)
        pointer.forward(travel_distance)
        pointer.right(72)
        pointer.forward(travel_distance)

        count -=1
    pointer.end_fill()
turtle.color("purple")
turtle.begin_fill()
turtle.circle(100, extent=720, steps=5)
turtle.end_fill()
然而,这段代码有两个问题:它不是与您的插图相同的样式星;它在所有Python turtle/tkinter实现上的工作方式不同(有些只显示部分填充):

下面是一个使用冲压而不是绘图的替代实现,可以解决这两个问题:

STAR_SIZE = 100

EXPANSION = 1.2
TRANSLATION = STAR_SIZE * EXPANSION / 4

turtle.hideturtle()
turtle.color("purple")
turtle.shape("triangle")
turtle.turtlesize(STAR_SIZE * EXPANSION / 20)

for _ in range(5):
    turtle.right(72)
    turtle.forward(TRANSLATION)
    turtle.stamp()
    turtle.backward(TRANSLATION)

我做得很快,这很容易纠正。请随意评论更好的解决方案:)

画星星(在这里放一个尺码)

也许可以试试这个:

turtle.write("★", font=("Arial", 40, "normal"))

这只是写给海龟的信,所以可能没有帮助,但你可以试试。

这应该行得通,请随时提问

from turtle import *
hideturtle()

def draw_star(sidesize, points, alfacorner, color):
    betacorner = 360/points+alfacorner
    fillcolor(color)
    begin_fill()
    for x in range(points*2):
        forward(sidesize)
        if x % 2 == 0:
            left(180-alfacorner)
        else:
            right(180-betacorner)
    end_fill()


draw_star(70, 8, 90, 'grey')
draw_star(90, 5, 72, 'yellow')
draw_star(120, 5, 36, 'red')
draw_star(65, 6, 60, 'darkblue')
draw_star(80, 4, 45, 'darkviolet')
draw_star(80, 3, 30, 'greenyellow')

exitonclick()
def draw_star(size,color):
    count = 0
    angle = 144
    turtle.color(color)
    turtle.begin_fill()
    while count <= 5:
        turtle.forward(size)
        turtle.right(angle)
        count += 1
    turtle.end_fill()
    return

draw_star(100,"purple")
def draw_星形(尺寸、颜色):
计数=0
角度=144
海龟。颜色(颜色)
乌龟,开始填充

当计数时,你有一个错误。一边将被画两次,但不能给我交替填充。@绝对应该,看我的屏幕截图。Eric答案中的代码也一样。我在开始时使用了OP的代码和添加的
turtle.fill(True)
,以及Eric的代码,两者都没有给出这个结果。它们都显示了穿过星星的线条,但填充是完整的。这很有趣:这可能取决于系统如何实现海龟图形。我正在使用OSX及其libtk。我假设TK在不同的系统上实现这个操作的方式一定有所不同。我在Windows上,尝试了Python 2.7和3.4。我喜欢这个解决方案的外观,但我对
size
参数有一个问题——它与什么有关?我认为
size
是一个圆的半径,例如,恒星应该在其中。然而,在这个实现中,图像的大小会随着角度和大小的变化而变化,因此要正确地调整大小是很困难的。我在turtle end_fill文档中添加了一条注释,根据操作系统图形的不同,重叠区域可能会被填充,也可能不会被填充,重叠的数量。你能解释一下你的参数吗。如果我在屏幕中间创建一个半径为50的圆,然后做:<代码> CuraTyStAR(海龟,Turtle),“紫色”,0, 0, 100,100)< /代码>我期待屏幕上的一颗星星“填充”我的圆,而我得到一个位于我的圆上的半圆大小的星。在一些系统中,它显示了“交替”。填写@KonradRudolph在其回答中描述的问题。这是什么意思?
…:
应该是什么意思?这看起来一点都不像OP的示例明星。
fillcolor()
调用与前面的
.color()
调用是冗余的。请在您的回答中解释此解决方案为现有讨论添加了哪些内容。
        ...:def draw_star(size):
        ...:     turtle.reset()
        ...:     turtle.color("silver")
        ...:     turtle.fillcolor("yellow")
        ...:     turtle.begin_fill()
        ...:     turtle.lt(260)
        ...:     for _ in range(5):
        ...:         turtle.fd(size)
        ...:         turtle.lt(170)
        ...:         turtle.fd(size)
        ...:         turtle.rt(100)
        ...:     turtle.end_fill()
        ...:
def draw_star(size, color):
...:     turtle.reset()
...:     turtle.color(color)
...:     turtle.fillcolor(color)
...:     turtle.begin_fill()
...:     turtle.lt(260)
...:     for _ in range(5):
...:         turtle.fd(size)
...:         turtle.lt(170)
...:         turtle.fd(size)
...:         turtle.rt(100)
...:     turtle.end_fill()
...:     
...:draw_star(size, color)
turtle.write("★", font=("Arial", 40, "normal"))
from turtle import *
hideturtle()

def draw_star(sidesize, points, alfacorner, color):
    betacorner = 360/points+alfacorner
    fillcolor(color)
    begin_fill()
    for x in range(points*2):
        forward(sidesize)
        if x % 2 == 0:
            left(180-alfacorner)
        else:
            right(180-betacorner)
    end_fill()


draw_star(70, 8, 90, 'grey')
draw_star(90, 5, 72, 'yellow')
draw_star(120, 5, 36, 'red')
draw_star(65, 6, 60, 'darkblue')
draw_star(80, 4, 45, 'darkviolet')
draw_star(80, 3, 30, 'greenyellow')

exitonclick()
def draw_star(size,color):
    count = 0
    angle = 144
    turtle.color(color)
    turtle.begin_fill()
    while count <= 5:
        turtle.forward(size)
        turtle.right(angle)
        count += 1
    turtle.end_fill()
    return

draw_star(100,"purple")