2013-05-22 3 views
1

J'ai donc ce programme qui génère un flocon de neige koch hexagonal en utilisant ces deux fonctions principales:Comment pourrais-je faire en sorte que chaque nouvelle génération de triangles dans ce flocon de neige koch soit de couleur différente? (Python + tortue)

def mvmt(length): 

if length <= 10: 
    voldemort.forward(length) 
else: 
    mvmt(length/3) 
    voldemort.right(60) 
    mvmt(length/3) 
    voldemort.left(120) 
    mvmt(length/3) 
    voldemort.right(60) 
    mvmt(length/3) 


def whole(length = 300): 
    voldemort.hideturtle() 
    voldemort.penup() 
    voldemort.goto(-300,-255) 
    voldemort.pendown() 
    voldemort.begin_fill() 
    mvmt(length) 
    voldemort.left(60) 
    mvmt(length) 
    voldemort.left(60) 
    mvmt(length) 
    voldemort.left(60) 
    mvmt(length) 
    voldemort.left(60) 
    mvmt(length) 
    voldemort.left(60) 
    mvmt(length) 
    voldemort.end_fill() 

Comment puis-je faire en sorte que chaque nouvelle série de triangles ajoutés par le processus itératif est un nouvelle couleur? Je préfère ne pas utiliser des processus méticuleux de changer la couleur de remplissage, puis en cours d'exécution "voldemort.beginfill()" et "voldemort.endfill()". L'aide est très appréciée. NOTE Ceci est écrit en python en utilisant le module Tortue.

+0

vous pouvez utiliser 'beginFill()' et 'endFill()', mais vous devez peindre le triangle d'abord, puis faire récursivité. Cela ne devrait pas poser de problème puisque vous savez comment le peindre. Vous pouvez définir la vitesse de la tortue pour peindre d'abord les bords lentement, puis remplir instantanément le triangle. – User

+0

Je ne suis pas très sûr de ce que vous voulez dire. J'ai été capable d'obtenir le plus externe (le plus petit) ensemble de triangles à remplir en noir en exécutant les commandes de remplissage à l'intérieur de la fonction "mvmt()". Les autres ne rempliront pas. Pourriez-vous élaborer s'il vous plaît? – Stumbleine75

Répondre

0

Une façon de le faire est de cloner la tortue à l'intérieur mvmt(), de sorte que vous avez un indépendant que vous pouvez remplir sans interférer avec le remplissage de l'externe. Pour que cela fonctionne récursivement, vous devez passer la tortue actuelle en tant que paramètre à mvmt().

C'est ce que j'ai changé votre code:

#!/usr/bin/env python 

from __future__ import division 

import colorsys 
import turtle 

def mvmt(original, length): 
    if length >= 10: 
     fraction = length/3 
     h, s, v = colorsys.rgb_to_hsv(*original.fillcolor()) 

     clone = original.clone() 
     clone.fillcolor(colorsys.hsv_to_rgb(h + 1/6, s, v)) 
     clone.begin_fill() 
     mvmt(clone, fraction) 
     clone.right(60) 
     mvmt(clone, fraction) 
     clone.left(120) 
     mvmt(clone, fraction) 
     clone.right(60) 
     mvmt(clone, fraction) 
     clone.end_fill() 

    original.forward(length) 

def whole(length = 300): 
    voldemort = turtle.Turtle() 
    voldemort.speed(0) 
    voldemort.hideturtle() 
    voldemort.penup() 
    voldemort.goto(-200,-255) 
    voldemort.pendown() 

    voldemort.fillcolor((1.0, 0.5, 0.5)) 
    voldemort.begin_fill() 
    mvmt(voldemort, length) 
    voldemort.left(60) 
    mvmt(voldemort, length) 
    voldemort.left(60) 
    mvmt(voldemort, length) 
    voldemort.left(60) 
    mvmt(voldemort, length) 
    voldemort.left(60) 
    mvmt(voldemort, length) 
    voldemort.left(60) 
    mvmt(voldemort, length) 
    voldemort.end_fill() 

turtle.delay(0) 
turtle.speed(0) 

whole() 
turtle.exitonclick() 
Questions connexes