次のような塗りつぶされた星を描きたいです。
私はこれまでにこのコードを持っています:
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")
関数が渡される色で星を塗りつぶしたい。これどうやってするの?
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
のさまざまな値を試して、必要な形状を取得してください
タートルドキュメント で「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回描画することはありません。
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)
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()
turtle.fill
。ただし、それ以上変更せずにコードでそれを使用すると、「交互の」塗りつぶしが表示されます。
線を交差させずに星の輪郭を描くようにルーチンを調整するか(2つの角度を交互に切り替えることで実行できます)、星の内側を個別に塗りつぶす(内接ポリゴンをトレースする)必要があります。
多分これを試してみてください:
turtle.write("★", font=("Arial", 40, "normal"))
これはカメに書いているだけなので、これは役に立たないかもしれませんが、試すことができます。
Windowsを使用している場合は、おそらく次の方法で解決できます。
turtle.color("purple")
turtle.begin_fill()
turtle.circle(100, extent=720, steps=5)
turtle.end_fill()
ただし、このコードには2つの問題があります。イラストと同じスタイルの星ではありません。すべてのPython turtle/tkinter実装で同じように機能するわけではありません(一部は部分的な塗りつぶしのみを表示します):
これは、両方の問題を修正する必要がある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)
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()
これはうまくいくはずです、どんな質問でも遠慮なく尋ねてください!
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")
私はこれを素早くしました、これは簡単にもっと修正することができます。より良い解決策をコメントしてください:)
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()