disegno del fiore con python tartaruga

Sto imparando la programmazione con python (con riferimento pensare python 2) e sono colpito a un programma. Definizione del problema: Python program to draw a symmetric flower after seeking the size of and number of petals from user.

Il codice che ho scelto è sotto, se io sono in grado di ottenere l’angolo tra ogni petalo matematicamente destra (la parte in cui il codice breve termine stati bob.lt(360/petal)). Qualcuno può aiutare qui?

import math
radius=int(input("What is the radius of the flower? "))
petals=int(input("How many petals do you want? "))
#radius=100
#petals=4


def draw_arc(b,r):  #bob the turtle,corner-to-corner length (radius) of petal (assume 60 degree central angle of sector for simplicity)
    c=2*math.pi*r #Circumference of circle
    ca=c/(360/60)  #Circumference of arc (assume 60 degree central angle of sector as above)
    n=int(ca/3)+1  #number of segments
    l=ca/n  #length of segment
    for i in range(n):
        b.fd(l)
        b.lt(360/(n*6))

def draw_petal(b,r):
    draw_arc(b,r)
    b.lt(180-60)
    draw_arc(b,r)

import turtle
bob=turtle.Turtle()

#draw_petal(bob,radius)

for i in range(petals):
    draw_petal(bob,radius)
    bob.lt(360/petals)

turtle.mainloop()

disegno del fiore con python tartaruga
Corretto (Simmetrica)
disegno del fiore con python tartaruga
Non Corretto (Asimmetrica)

1) mi Puoi dare un link per la documentazione della Tartaruga pacchetto importato? 2) Che differenza c’è fra il risultato che si è verificato, e il risultato che ti aspettavi? I. e. come fai a sapere che non sono l’angolo tra i petali matematicamente giusto? Può aiutare a mostrare un grafico.
Ho aggiornato la domanda originale con gli scatti dei expectated uscita alla fine… il fiore dovrebbe essere simmetrico. La documentazione ufficiale è qui -> docs.python.org/3.1/library/turtle.html

OriginaleL’autore njathan | 2017-02-16

2 Replies
  1. 2

    Basta modificare il codice come questo(in draw_petals aggiungere b.rt(360/petals-30 e corretta bob.lt(360/petals) per 360/4 ):

    import math
    radius=int(input("What is the radius of the flower? "))
    petals=int(input("How many petals do you want? "))
    #radius=100
    #petals=4
    
    
    def draw_arc(b,r):  #bob the turtle,corner-to-corner length (radius) of petal (assume 60 degree central angle of sector for simplicity)
        c=2*math.pi*r #Circumference of circle
        ca=c/(360/60)  #Circumference of arc (assume 60 degree central angle of sector as above)
        n=int(ca/3)+1  #number of segments
        l=ca/n  #length of segment
        for i in range(n):
            b.fd(l)
            b.lt(360/(n*6))
    
    
    def draw_petal(b,r):
        draw_arc(b,r)
        b.lt(180-60)
        draw_arc(b,r)
        b.rt(360/petals-30)  # this will take care of the correct angle b/w petals
    
    
    import turtle
    bob=turtle.Turtle()
    #draw_petal(bob,radius)
    
    for i in range(petals):
        draw_petal(bob,radius)
        bob.lt(360/4)
    Non vedo la motivazione per mantenere la linea di bob.lt(360/4) piuttosto che a risolvere il problema a essere bob.lt(360 / petals) — sembra quasi che tu abbia più corretto il codice in draw_petal() per contrastare e preservare errori altrove piuttosto che in realtà corretta.
    Grazie per aver ricordato @cdlane. Stavo testando con 4 petali, e avevi ragione mi correzione.. la mia intenzione era di utilizzare bob.lt(360/petals)
    Grazie @Tarptaeya. Visto che il mio errore nel post originale (per quanto riguarda bob.it(360/petals) la tua soluzione funziona perfettamente per 4 petali.. non di più, non di meno. Correggere la domanda ora…

    OriginaleL’autore Anmol Gautam

  2. 1

    Penso che il problema è più semplice di quanto si sta facendo.

    Il primo problema è che il disegno di un petalo cambia la tartaruga voce e si sta cercando di fare matematica, per ritornare al punto di partenza. Qui possiamo solo registrare la voce prima di disegnare il petalo e il ripristino in seguito, no matematica.

    Il secondo problema è che si sta implementando il proprio arco di codice quando tartaruga possibile eseguire questa operazione utilizzando una misura argomento turtle.circle() che produce lo stesso risultato, ma molto più veloce:

    from turtle import Turtle, Screen
    
    def draw_petal(turtle, radius):
        heading = turtle.heading()
        turtle.circle(radius, 60)
        turtle.left(120)
        turtle.circle(radius, 60)
        turtle.setheading(heading)
    
    my_radius = int(input("What is the radius of the flower? "))
    my_petals = int(input("How many petals do you want? "))
    
    bob = Turtle()
    
    for _ in range(my_petals):
        draw_petal(bob, my_radius)
        bob.left(360 / my_petals)
    
    bob.hideturtle()
    
    screen = Screen()
    screen.exitonclick()

    UTILIZZO

    > python3 test.py
    What is the radius of the flower? 100
    How many petals do you want? 10

    USCITA

    disegno del fiore con python tartaruga

    Caro @cdlane ,OP non vuole che la soluzione alternativa che egli desidera solo di correggere il suo codice originale
    la correzione al codice originale è il heading = turtle.heading() e turtle.setheading(heading) in draw_petal(). Questo è esattamente a destra, e dovrebbe essere accettato risposta. Altri miglioramenti sono preziosi.

    OriginaleL’autore cdlane

Lascia un commento