» »

[python] Risanje Pomoč

[python] Risanje Pomoč

d_DJ ::

Pozdravljeni,

Že dva dni se ubadam s tole nalogo:
V pythonu moram narisati krivulju s pomočjo rekurzije, ki naj bi zgledala nekako takole:


Prva slika je reda 1, druga reda 2 itd...
vse kar mi ratata narisati je drugi red:
import turtle

def krivulja_a(red, dolžina=200):
    if red == 2:
        turtle.forward(dolžina/3)
        turtle.left(45)
        turtle.forward(dolžina/3)
        turtle.right(90)
    if red == 1:
        turtle.forward(dolžina)
    else:
        krivulja_a(red-1, dolžina/3)
        turtle.forward(dolžina/3)
        turtle.left(90)
        krivulja_a(red-1, dolžina/3)
        turtle.right(45)
        krivulja_a(red-1, dolžina/3)


Moja ideja je, če je stopnja soda naj nariše pač te poševne črte če je liha naj bi pa narisal na najdalšo črto pol krog. Sprogramirat pa mi to nikakor ne rata.
Če ima kdo kakšen nasvet idejo bi bil zelo hvaležen.

Hvala

Math Freak ::

Jaz bi se verjetno lotil naloge približno tako (ni rečeno, da je prav):

import turtle

def krivulja(level,dolžina = 200):
    
    if level == 1:
        turtle.forward(dolžina)
        
    elif level == 2:
        turtle.forward(dolžina/3)
        turtle.left(45)
        turtle.forward((3/2)*dolžina/3)
        turtle.right(90)
        turtle.forward(3*dolžina/3)
        turtle.right(-90)
        turtle.forward((3/2)*dolžina/3)
        turtle.right(45)
        turtle.forward(dolžina/3)

    elif level == 3:
        turtle.forward(dolžina/3)
        turtle.left(45)
        turtle.forward((3/2)*dolžina/3)
        turtle.right(90)
        turtle.forward(dolžina/3)
        turtle.right(90)
        turtle.circle((1/2)*dolžina/3, extent=-180, steps=None)
        turtle.right(90)
        turtle.forward(dolžina/3)
        turtle.right(-90)
        turtle.forward((3/2)*dolžina/3)
        turtle.right(45)
        turtle.forward(dolžina/3)
        
    else:
        turtle.forward(dolžina/3)
        turtle.left(45)
        turtle.forward((3/2)*dolžina/3)
        turtle.right(90)
        
        " -> rekurzija"
        
        turtle.right(-90)
        turtle.forward((3/2)*dolžina/3)
        turtle.right(45)
        turtle.forward(dolžina/3)


Prve tri like bi definiral, ker so unikatni, ostale pa bi sestavil s pomočjo lika 2 in 3. Nisem siguren, da je to pravi način razmišljanja, tako da vzami to z rezervo.

d_DJ ::

Kako pa bi potem klical lik 2 in lik 3. Če bi dal recimo level 4. Men je vsakič nekaj preveč narisal.

Math Freak ::

Sm mislu neki na to foro:

import turtle

def krivulja(level,dolžina = 200):
    
    if level == 1:
        turtle.forward(dolžina)
        
    elif level == 2:
        turtle.forward(dolžina/3)
        turtle.left(45)
        turtle.forward((3/2)*dolžina/3)
        turtle.right(90)
        turtle.forward(3*dolžina/3)
        turtle.right(-90)
        turtle.forward((3/2)*dolžina/3)
        turtle.right(45)
        turtle.forward(dolžina/3)

    elif level == 3:
        turtle.forward(dolžina/3)
        turtle.left(45)
        turtle.forward((3/2)*dolžina/3)
        turtle.right(90)
        turtle.forward(dolžina/3)
        turtle.right(90)
        turtle.circle((1/2)*dolžina/3, extent=-180, steps=None)
        turtle.right(90)
        turtle.forward(dolžina/3)
        turtle.right(-90)
        turtle.forward((3/2)*dolžina/3)
        turtle.right(45)
        turtle.forward(dolžina/3)
        
    else:
        turtle.forward(dolžina/3)
        turtle.left(45)
        turtle.forward((3/2)*dolžina/3)
        turtle.right(90)
        
        krivulja(level-2,dolžina/(3))
        turtle.right(90)
        turtle.circle((1/2)*dolžina/3, extent=-180, steps=None)
        turtle.right(90)
        krivulja(level-2,dolžina/(3))
        turtle.right(-90)

        
        turtle.forward((3/2)*dolžina/3)
        turtle.right(45)
        turtle.forward(dolžina/3)


Če se spomnim kaj pametnejšega ti sporočim. Kaj so pa za ene dolžine črt? Ti si jih razdelil enakomerno na tri dele čeprav s slike ni videt, da bi bilo to res.

d_DJ ::

Uf tenx za tole...

ja pri stranicah se sploh nisem ubadu... drgač je če pogledaš sliko pri level dva vodoravne je vsaka 1/6, poševne so pa pomnožene za koren 2... Ampak to bom že sam popravu.

Hvala še enkrat!!


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Poliranje avtomobila

Oddelek: Na cesti
68130 (936) RejZoR
»

Tekkit classic Coumputercraft ERROR

Oddelek: Pomoč in nasveti
7567 (477) [D]emon
»

Python, prosim za pomoc pri programiranju (strani: 1 2 3 )

Oddelek: Programiranje
10413944 (10046) lenika
»

python pomoč

Oddelek: Programiranje
111787 (1607) jype
»

Želvica Logo [Java]

Oddelek: Programiranje
151829 (1324) medobear

Več podobnih tem