2016-03-25 23 views
0

Python kaplumbağa grafiklerini kullanarak rasgele bir şekilde eşmerkezli altıgenler (her sette 4 ila 10) çizmem gerekiyor (resme bakın). Ben rastgele altıgenler çizebilir ancak konsantrik olanları yapamaz:Eşmerkezli altıgenler nasıl çizilir?

import turtle 
from random import randint 

window = turtle.Screen() 
window.bgcolor("yellow") 
brad= turtle.Turtle() 
brad.color("blue") 
window.colormode(255) 

def drawPoly(sideLen, noOfsides): 
    for i in range(noOfsides): 
     brad.forward(sideLen) 
     brad.left(360/noOfsides) 

for i in range(20): 
    sideLen = randint(20,150) 
    xpos = randint(-200,200) 
    ypos = randint(-200,200) 
    brad.pensize(randint(1,3)) 
    brad.pencolor(randint(1,255),randint(1,255),randint(1,255)) 
    brad.penup() 
    brad.setpos(xpos,ypos) 
    brad.pendown() 
    drawPoly(sideLen,6) 


window.exitonclick() 

İşte image

nasıl 4 ila 10 kez bir altıgen içinde altıgenler yapabilir ve ardından sonraki altıgen geçmek için bir bağlantı? Bir mcve kavramı, geliştirme için olduğu kadar burada gönderme yapmak için de geçerlidir.

cevap

1

Renklerin, kalınlıkların veya çizgilerin stilini endişelendirmeden eşmerkezli altıgenleri oluşturan basit bir işlev veya kod bloğu ile başlayın.

Altıgenler hakkında en önemli şey, 'yarıçap' (köşelere merkez) kenar uzunluğu ile aynıdır (köşeden köşeye). (Konsantrik pentagonlar, örneğin, daha zor, biraz trig gerektiren). X ekseninde iki köşe istediğinizi varsayalım. Merkez x, y ise, x + e'den başlayarak, 120 dönüşünde (0 sağa bakar). x, y, yarıçapı uzunluklarının bir edges listesi ve bir tapa durumunda kaplumbağ t, aşağıdakiler çalışmalıdır.

for edge in edges: 
    t.setpos(x+e, y) 
    t.setheading(120) 
    t.pendown() 
    for i in range(6): 
     t.forward(e) 
     t.left(60) 
    t.penup() 

DÜZENLEME: cdlane ile yapılan yorum sayesinde, sile dikme ile değiştirin.

+0

İstediğiniz işlev 'setheading() ' – cdlane

+0

@cdlane, teşekkürler, kod olarak düzenlenmiş –