2016-06-30 5 views
1

Ich versuche eine Blume zu machen, wo gelbe Linien aus ihrer ungefähren Mitte gezogen werden, für den gesamten Umfang.Turtle Mini-Projekt - Udacity - Python - Zeichnen/Bewegen einer Form um eine andere Form

Das Problem, das ich habe, ist eine Linie zu ziehen, in die Mitte zu gehen und wieder die gleiche Länge zu ziehen, aber 10 Grad größer als die vorherige.

Ich kann mir nicht vorstellen, wie das geht, die Linie springt entweder immer wieder hin und her, ODER sie schwenkt um die Seite (wie wenn ich eine spitze Form anlege).

Also wie bekomme ich diese gelbe Linie, um zurückzurufen, und inkrementell Feder aus/bekommen diese spitze Form, um sich kontinuierlich die volle 360 ​​Grad zu zeichnen?

Dies ist mein erstes "echtes" Programm, denke ich. Ich habe keine Programmiererfahrung und habe erst seit ein paar Tagen damit begonnen. Der Code, den ich in der Funktion "draw_feather()" verwendet habe, stammt von einer anderen Seite, weil ich nicht wusste, wie man ein Dreieck in einem Kreis dreht.

import turtle 

def draw_fractal(ink): 
    for i in range(1,37): 
     ink.circle(50) 
     ink.right(10) 


def draw_feather(ink): 
    while True: 
     ink.forward(200) 
     ink.left(170) 
     if abs(ink.pos()) < 1: 
      break 

def draw_stem(ink): 
    ink.goto(1,-400) 
    ink.home() 
    ink.goto(5,-400) 
    ink.home() 
    ink.goto(3,-400) 

def Draw(): 
    window = turtle.Screen() 
    window.bgcolor =("White") 

    R = turtle.Turtle() 
    R.shape("circle") 
    R.color("Red") 
    R.setpos(4,3) 
    R.speed(100) 

    G = turtle.Turtle() 
    G.shape("circle") 
    G.color("Green") 
    G.setpos(3,3) 
    G.speed(100) 

    B = turtle.Turtle() 
    B.shape("circle") 
    B.color("Blue") 
    B.setpos(2,3) 
    B.speed(100) 

    Stem = turtle.Turtle() 
    Stem.shape("circle") 
    Stem.speed(100) 

    Feather = turtle.Turtle() 
    Feather.shape("circle") 
    Feather.speed(100) 
    Feather.color("Yellow") 

    draw_fractal(R) 
    draw_fractal(G) 
    draw_fractal(B) 
    draw_feather(Feather) 
    draw_stem(Stem) 

    window.exitonclick() 

Draw() 

Antwort

1

Unten finden Sie eine Nacharbeit des Codes buchstäblich zu tun, was Sie beschrieben:

import turtle 

def draw_flower(ink): 
    ink.up() 
    ink.home() 
    for degrees in range(10, 370, 10): 
     ink.down() 
     ink.forward(200) 
     ink.up() 
     ink.home() # resets angle to 0 degrees 
     ink.left(degrees) # so absolute angle, not relative 

def draw_stem(ink): 
    ink.goto(1, -400) 
    ink.home() 
    ink.goto(5, -400) 
    ink.home() 
    ink.goto(3, -400) 

def Draw(): 
    window = turtle.Screen() 
    window.bgcolor("white") 

    stem = turtle.Turtle() 
    stem.color("green") 
    stem.speed("fast") 

    draw_stem(stem) 

    flower = turtle.Turtle() 
    flower.color("yellow") 
    flower.speed("fastest") 

    draw_flower(flower) 

Draw() 

turtle.done() 

einfach in die Mitte des Bildschirms gehen, eine gelbe Linie auf die Mitte des Bildschirms ziehen, Reset, leicht drehen und wiederholen. Beachten Sie, dass die turtle.home() Verfahren den Winkel der Schildkröte beeinflusst, so dass wir für das anpassen müssen:

enter image description here

Auch 100 bedeutet nichts zu turtle.speed() darüber hinaus, dass es mehr als 10 - mit den symbolischen Argumente um deine Absicht zu verdeutlichen.

+0

Danke. Ich hatte einen Weg gefunden, zu tun, was ich wollte. Es ist schön, die gleichen Ergebnisse zu sehen, aber auf andere Weise. Ich dachte darüber nach wie ein Diagramm und wusste, dass es Quadranten hatte, also rief ich es jedes Mal in einen neuen Quadranten zurück. 'def draw_feather (Tinte): \t für i im Bereich (1,73): \t \t x = -4 \t \t y = -4 \t \t ink.goto (x, y) \t \t Tinten .forward (150) \t \t ink.left (5) \t \t x = x + 1 \t \t y = y + 1 \t ink.home() ' – Rhys

+0

I konnte nicht herausfinden, wie man SEPARA Tue es und mach es richtig formatieren, und natürlich mein 5-Minuten Editierfenster geschlossen! – Rhys

Verwandte Themen