|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: May 2005
Città: Another World
Messaggi: 231
|
[Python] Aiuto esercizio di "How to Think Like a Python Programmer"
Ciao a tutti.
Dopo diversi fallimenti, sto tentando di imparare qualcosa su un linguaggio di programmazione, in questo caso il Python. http://www.greenteapress.com/thinkpy...005.html#toc50 , esercizio 3. Avendo già a disposizione queste funzioni: Codice:
import math from TurtleWorld import * TurtleWorld() bob = Turtle() bob.delay = 0.01 def polyline(t, length, n, angle): """Draw n line segments with the given length and angle (in degrees) between them. t is a turtle. """ for i in range(n): fd(t, length) lt(t, angle) def arc(t, r, angle): """Draw an arc with the given r (radius) and angle """(in degrees). t is a turtle. arclength = 2 * math.pi * r * angle / 360 n = int(arclength / 4) length = arclength / n polyline(t, length, n, float(angle)/n) L'unica cosa funzionante che sono riuscito a fare è la definizione della funzione: Codice:
def flower(t, r, petals): ![]() Grazie per l'aiuto. |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: May 2005
Città: Another World
Messaggi: 231
|
up
![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12093
|
ma scusa..
per il poco che ricordo di python.... le virgolette triple nella funzione arc non dovrebbero essere alla fine della stringa? ![]() cmq spè che mi scarico 'sto turtleworld che non ho mai sentito e vedo ![]()
__________________
![]() |
![]() |
![]() |
![]() |
#4 | |
Member
Iscritto dal: May 2005
Città: Another World
Messaggi: 231
|
Quote:
È chiaramente sbagliato, ma non era presente nelle versioni che ho passato all'interprete. |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12093
|
Codice:
import math from TurtleWorld import * def polyline(t, length, n, angle): """Draw n line segments with the given length and angle (in degrees) between them. t is a turtle. """ for i in range(n): fd(t, length) lt(t, angle) def arc(t, r, angle): """Draw an arc with the given r (radius) and angle (in degrees). t is a turtle.""" arclength = 2 * math.pi * r * angle / 360 n = int(arclength / 4) length = arclength / n polyline(t, length, n, float(angle)/n) def flower(turtle, radius, petals): for i in range(petals): arc(turtle, radius, 180) #fai girare la tartaruga di 90° TurtleWorld() bob = Turtle() bob.delay = 0.01 flower(bob, 50, 4) ![]()
__________________
![]() |
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: May 2005
Città: Another World
Messaggi: 231
|
Questo è il problema. Ho provato tante soluzioni (la prima funzione era simile, se non uguale a quella tua) che in teoria dovrebbero andare, ma in pratica non disegnano i fiori.
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12093
|
Quote:
se hai un raggio x e fai un arco di 180° allora ti ritrovi esattamente in corrispondenza del punto di partenza, dopo aver disegnato un arco, però traslato di 2x lungo la direzione perpendicolare (con verso a sinistra) della posizione inziale della tartaruga. La direzione della tartaruga sarà a quel punto parallela rispetto a quella iniziale, ma il verso sarà opposto. Quindi ruotando di 90° verso destra e ripetendo il procedimento avremo che sarà traslata di 2x nella direzione verso cui era rivolta prima di essere girata di 90°. Finendo il giro si avrà una situazione di questo tipo (rappresentando solo i diametri degli archi): Codice:
------ | | | | ------ A quel punto generalizzare la funzione per ogni numero di petali dovrebbe essere banale così ad occhio.
__________________
![]() |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Dec 2005
Messaggi: 7237
|
per non saper ne leggere ne scrivere in python sono riuscito a ottenere una cosa simile
![]() Codice:
import math from TurtleWorld import * def polyline(t, length, n, angle): """Draw n line segments with the given length and angle (in degrees) between them. t is a turtle. """ for i in range(n): fd(t, length) lt(t, angle) def arc(t, r, angle): """Draw an arc with the given r (radius) and angle (in degrees). t is a turtle.""" arclength = 2 * math.pi * r * angle / 360 n = int(arclength / 4) length = arclength / n polyline(t, length, n, float(angle)/n) def flower(turtle, radius, petals): for i in range(petals): arc(turtle, radius, 90) lt(turtle, 90) arc(turtle, radius, 90) lt(turtle, (360/petals+90)) TurtleWorld() bob = Turtle() bob.delay = 0.001 flower(bob, 90, 7) |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12093
|
Quote:
![]() ![]() Ho sempre odiato chi chiama i metodi e le variabili con nomi non significativi ![]() Cmq il mio codice, con un numero di petali pari a 4 ed aggiungendo il left turn funziona perfettamente ![]()
__________________
![]() |
|
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Dec 2005
Messaggi: 7237
|
Quote:
![]() ps. da uno che usa tk che nomi dei metodi ti aspettavi? ![]() |
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12093
|
Quote:
![]()
__________________
![]() |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12093
|
anzi...
![]() guarda che figata ![]() Codice:
import math from TurtleWorld import * def polyline(t, length, n, angle): """Draw n line segments with the given length and angle (in degrees) between them. t is a turtle. """ for i in range(n): fd(t, length) lt(t, angle) def arc(t, r, angle): """Draw an arc with the given r (radius) and angle (in degrees). t is a turtle.""" arclength = 2 * math.pi * r * angle / 360 n = int(arclength / 4) length = arclength / n polyline(t, length, n, float(angle)/n) def flower(turtle, radius, petals): for i in range(petals): arc(turtle, radius, 180) lt(turtle, 360/petals) TurtleWorld() bob = Turtle() bob.delay = 0.01 flower(bob, 50, 8) ![]() è belliffimo ![]() ![]()
__________________
![]() Ultima modifica di ^TiGeRShArK^ : 19-01-2008 alle 13:21. |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Dec 2005
Messaggi: 7237
|
Quote:
![]() Codice:
import math from TurtleWorld import * def polyline(t, length, n, angle): """Draw n line segments with the given length and angle (in degrees) between them. t is a turtle. """ for i in range(n): fd(t, length) lt(t, angle) def arc(t, r, angle): """Draw an arc with the given r (radius) and angle (in degrees). t is a turtle.""" arclength = 2 * math.pi * r * angle / 360 n = int(arclength / 4) length = arclength / n polyline(t, length, n, float(angle)/n) def flower(turtle, radius, petals): for i in range(petals): arc(turtle, radius, 120) lt(turtle, 120) arc(turtle, radius, 120) lt(turtle, (360/petals+120)) TurtleWorld() bob = Turtle() bob.delay = 0.001 flower(bob, 90, 9) |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12093
|
certo che è intrippante sta tartarughina
![]()
__________________
![]() |
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Dec 2005
Messaggi: 7237
|
|
![]() |
![]() |
![]() |
#16 | |
Member
Iscritto dal: May 2005
Città: Another World
Messaggi: 231
|
Quote:
Forse l'unica soluzione è prendere goniometro, calcolatrice e squadra, calcolare le misure e scrivere la funzione. |
|
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12093
|
Quote:
![]() e cmq l'avevo già scritto io che serviva una banale generalizzazione per farlo funzionare per tutti i casi.. cosa che ha fatto konte nel suo codice ![]()
__________________
![]() |
|
![]() |
![]() |
![]() |
#18 |
Bannato
Iscritto dal: May 2001
Città: Versilia
Messaggi: 1503
|
cad in python
ciao approfitto di questo 3d per chiedere:
stavo provando a far partire questo cam scritto in python e rilasciato sotto licenza mit però mi da errore su un indentazione ma non capisco come risolverlo... qualcuno me lo sà dire??? |
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 1792
|
Non si "approfitta" di un thread, se ne apre uno nuovo, non costa nulla farlo ed in tal modo si contribuisce a mantenere ordinato il forum.
|
![]() |
![]() |
![]() |
#20 | |
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16210
|
Quote:
Proviamo a far disegnare alla tartarughina la parte inferiore di un petalo orizzontale. Possiamo farlo dicendole di - girare a destra di alpha/2, e poi - tracciare un arco di ampiezza alpha. A questo punto, la tartarughina è girata a sinistra di alpha/2 rispetto a est. Per farle fare la parte superiore, dobbiamo farle ripetere la procedura, specularmente rispetto all'asse orizzontale, e in senso inverso. Quindi, nel momento in cui inizia a disegnare, deve essere rivolta di alpha/2 a destra rispetto a ovest. E questo, glielo possiamo far fare con un giro verso sinistra di 180°-alpha. Adesso si può ripetere il tracciamento dell'arco; alla fine del quale, la tartarughina sarà girata di alpha/2 a sinistra rispetto a ovest. Per farla di nuovo andare verso est, basta farla girare a sinistra di 180°-(alpha/2).
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:37.