web-dev-qa-db-ja.com

タートルグラフィックス、星を描く?

次のような塗りつぶされた星を描きたいです。

http://www.seaviewstickers.co.uk/shop/media/catalog/product/cache/1/thumbnail/600x600/9df78eab33525d08d6e5fb8d27136e95/b/l/black_11.jpg

私はこれまでにこのコードを持っています:

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

関数が渡される色で星を塗りつぶしたい。これどうやってするの?

3
ASm

5先の尖った星を取得するには、各辺に2本の線を引く必要があります。角度は72(360/5)に追加する必要があります

import turtle
def draw_star(size, color):
    angle = 120
    turtle.fillcolor(color)
    turtle.begin_fill()

    for side in range(5):
        turtle.forward(size)
        turtle.right(angle)
        turtle.forward(size)
        turtle.right(72 - angle)
    turtle.end_fill()
    return

draw_star(100, "purple")

angleのさまざまな値を試して、必要な形状を取得してください

3
John La Rooy

タートルドキュメント で「fill」を検索します。

def draw_star(size,color):
    count = 0
    angle = 144
    turtle.fillcolor(color)
    turtle.begin_fill()
    for _ in range(5):
        turtle.forward(size)
        turtle.right(angle)
    turtle.end_fill()

draw_star(100,"purple")

N.B. returnは不要であり、このようにループをコーディングすることで、アウトラインを2回描画することはありません。

1
Eric
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)
1
Alex
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()
0
Bat Andrea

turtle.fill 。ただし、それ以上変更せずにコードでそれを使用すると、「交互の」塗りつぶしが表示されます。

alternating fill

線を交差させずに星の輪郭を描くようにルーチンを調整するか(2つの角度を交互に切り替えることで実行できます)、星の内側を個別に塗りつぶす(内接ポリゴンをトレースする)必要があります。

0
Konrad Rudolph

多分これを試してみてください:

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

これはカメに書いているだけなので、これは役に立たないかもしれませんが、試すことができます。

0
rahsut

Windowsを使用している場合は、おそらく次の方法で解決できます。

turtle.color("purple")
turtle.begin_fill()
turtle.circle(100, extent=720, steps=5)
turtle.end_fill()

ただし、このコードには2つの問題があります。イラストと同じスタイルの星ではありません。すべてのPython turtle/tkinter実装で同じように機能するわけではありません(一部は部分的な塗りつぶしのみを表示します):

enter image description here

これは、両方の問題を修正する必要があるdrawingの代わりにstampingを使用する代替実装です。 :

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)

enter image description here

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

これはうまくいくはずです、どんな質問でも遠慮なく尋ねてください!

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")
0
Kirshan Murali

私はこれを素早くしました、これは簡単にもっと修正することができます。より良い解決策をコメントしてください:)

import turtle 

x = turtle.Turtle()
x.speed(0)

 def draw_star(length, angle):

 for i in range(5): #the star is made out of 5 sides
  x.forward(length)
  x.right(angle)


for i in range(1):
 x.color("purple") #if  you want outline of the star choose .color("purple" + "outline color")
 x.begin_fill()
 draw_star(100, 144) #144 is the perfect angle for a star
 x.end_fill()
0
jj.ons