Albero di Pitagora

Il forum di Base5, dove è possibile postare problemi, quiz, indovinelli, rompicapo, enigmi e quant'altro riguardi la matematica ricreativa e oltre.

Moderatori: Gianfranco, Bruno

Rispondi
Quelo
Livello 7
Livello 7
Messaggi: 894
Iscritto il: ven giu 16, 2006 3:34 pm

Albero di Pitagora

Messaggio da Quelo »

Ho visto un'immagine dell'albero di Pitagora su Internet e ho pensato di fare un programmino in decimal basic che lo disegna.
Lo lascio qui se qualcuno lo vuole provare.

Codice: Seleziona tutto

OPTION ANGLE DEGREES
DIM q(15,16384,2,2)
SUB QUAD(e,t)
   SET COLOR e
   LET ax = q(e,t,1,1)
   LET ay = q(e,t,1,2)
   LET bx = q(e,t,2,1)
   LET by = q(e,t,2,2)
   LET dx = bx-ax
   LET dy = by-ay
   PLOT AREA: ax, ay; bx, by; bx-dy, by+dx; ax-dy, ay+dx
   LET l1 = SQR(dx^2+dy^2)
   LET ax = ax-dy
   LET ay = ay+dx
   LET bx = bx-dy
   LET by = by+dx
   LET l2 = l1 * COS(g)
   LET h = ACOS(dx/l1)
   IF by < ay THEN LET h = -h
   LET cx = ax + l2 * COS(g+h)
   LET cy = ay + l2 * SIN(g+h)
   LET q(e+1,2*t-1,1,1) = ax
   LET q(e+1,2*t-1,1,2) = ay
   LET q(e+1,2*t-1,2,1) = cx
   LET q(e+1,2*t-1,2,2) = cy
   LET q(e+1,2*t,1,1) = cx
   LET q(e+1,2*t,1,2) = cy
   LET q(e+1,2*t,2,1) = bx
   LET q(e+1,2*t,2,2) = by
END SUB

SET WINDOW 0,10,0,10

INPUT  PROMPT "ANGOLO (15-45)": g
IF g < 15 OR g > 45 THEN LET g = 30
LET q(1,1,1,1) = 6
LET q(1,1,1,2) = 2
LET q(1,1,2,1) = 7
LET q(1,1,2,2) = 2

FOR i = 1 TO 14
   FOR j = 1 TO 2^(i-1) 
      CALL quad(i,j)
   NEXT J
NEXT I
END
Ecco un esempio del risultato
.
Albero pitagora.jpg
Albero pitagora.jpg (98.34 KiB) Visto 2382 volte
Ultima modifica di Quelo il dom ago 01, 2021 5:53 pm, modificato 1 volta in totale.
[Sergio] / $17$

Gianfranco
Supervisore del sito
Supervisore del sito
Messaggi: 1708
Iscritto il: ven mag 20, 2005 9:51 pm
Località: Sestri Levante
Contatta:

Re: Albero di Pitagora

Messaggio da Gianfranco »

Grazie Sergio, bel programma ottimo risultato!
Pace e bene a tutti.
Gianfranco

Bruno
Livello 10
Livello 10
Messaggi: 2020
Iscritto il: lun nov 21, 2005 6:07 pm
Località: Bologna

Re: Albero di Pitagora

Messaggio da Bruno »

Bellissimo, Sergio :D
(Bruno)

...........................
Invisibile un vento
l'ha apena sfioragia
sospension d'un momento;
e la bola iridessente gera 'ndagia.
{Biagio Marin}
................................................................
Meglio soluzioni sbagliate che risposte esatte.
{Rudi Mathematici}

Quelo
Livello 7
Livello 7
Messaggi: 894
Iscritto il: ven giu 16, 2006 3:34 pm

Re: Albero di Pitagora

Messaggio da Quelo »

Ho aggiunto qualche parametro regolabile e aumentato a 18 livelli (memoria permettendo)
A me funziona in modalità binaria

Codice: Seleziona tutto

OPTION ANGLE DEGREES
RANDOMIZE
DIM q(19,262144,2,2)
SUB QUAD(e,t)
   LET ax = q(e,t,1,1)
   LET ay = q(e,t,1,2)
   LET bx = q(e,t,2,1)
   LET by = q(e,t,2,2)
   LET dx = bx-ax
   LET dy = by-ay
   LET l1 = SQR(dx^2+dy^2) 
   LET l2 = l1 * COS(g)
   SELECT CASE col
   CASE 0
      SET COLOR e
   CASE 1
      SET COLOR 1
   CASE 2
      IF l1 > 0.1 THEN
         SET COLOR 12
      ELSE
         SET COLOR 10
      END IF
   END SELECT
   PLOT AREA: ax, ay; bx, by; bx-dy, by+dx; ax-dy, ay+dx
   LET ax = ax-dy
   LET ay = ay+dx
   LET bx = bx-dy
   LET by = by+dx
   LET h = ACOS(dx/l1)
   IF by < ay THEN LET h = -h
   LET cx = ax + l2 * COS(g+h)
   LET cy = ay + l2 * SIN(g+h)
   LET q(e+1,2*t-1,1,1) = ax
   LET q(e+1,2*t-1,1,2) = ay
   LET q(e+1,2*t-1,2,1) = cx
   LET q(e+1,2*t-1,2,2) = cy
   LET q(e+1,2*t,1,1) = cx
   LET q(e+1,2*t,1,2) = cy
   LET q(e+1,2*t,2,1) = bx
   LET q(e+1,2*t,2,2) = by
END SUB

SET WINDOW 0,10,0,10

INPUT PROMPT "ANGOLO [15-45] (0 = 30) ": g
IF g < 15 OR g > 45 THEN LET g = 30
INPUT PROMPT "COLORE [0-SEQUENZA 1-MONO 2-NATURA] ": col
LET col = INT(col)
IF col < 0 OR col > 2 THEN LET col = 0
LET liv = 18
IF col < 2 THEN
   INPUT PROMPT "LIVELLI [1-18] (0 = 16) ": liv
   LET liv = INT(liv)
   IF liv < 1 OR liv > 18 THEN LET liv = 16
END IF
INPUT PROMPT "SCABIO ANGOLI [0-NO, 1-LIVELLO, 2-CASUALE] ": sca
LET sca = INT(sca)
IF sca < 0 OR sca > 2 THEN LET sca = 0
IF sca = 2 THEN
   INPUT PROMPT "PROBABILITA' SCAMBIO [1-99] (0=50%)": prb
   IF prb < 1 OR prb > 100 THEN 
      LET prb = 0.5
   ELSE
      LET prb = (100-prb)/100
   END IF
END IF

LET q(1,1,1,1) = 5
LET q(1,1,1,2) = 2
LET q(1,1,2,1) = 6
LET q(1,1,2,2) = 2
 
FOR i = 1 TO liv
   FOR j = 1 TO 2^(i-1) 
      CALL quad(i,j)
      IF sca = 2 THEN    
         IF RND > prb THEN LET g = 90 - g
      END IF
   NEXT J
   IF sca = 1 THEN LET g = 90 - g
NEXT I
Albero pitagora natura.png
Albero pitagora natura.png (206.71 KiB) Visto 2475 volte
[Sergio] / $17$

Quelo
Livello 7
Livello 7
Messaggi: 894
Iscritto il: ven giu 16, 2006 3:34 pm

Re: Albero di Pitagora

Messaggio da Quelo »

Quesito:
1) calcolare l'area di tutti i quadrati (questo è particolarmente facile)
2) calcolare l'area di tutti i triangoli delimitati dai quadrati
[Sergio] / $17$

Rispondi