PREMESSA
Il segmento di partenza sia AE, con A(x1,y1) ed E(x2,y2).
PASSO UNO
Il segmento AE si trasforma nella spezzata ABCDE.
Siano A (x1a, y1a), B(x1b,y1b); C(x1cc,y1c); D(x1d,y1d); E(x1e,y1e)<
Il rapporto di contrazione sia q = 1/[2(1+cosα)]
Risulta
punto A | x1a = x1 | Il punto A resta fisso |
y1a = y1 | ||
punto B | x1b = q(x2 - x1) + x1a | Omotetia di centro A e rapporto q |
y1b = q(y2 - y1) + y1a | ||
|
||
punto C |
|
|
x1c = q(x2 - x1)cosα - q(y2 - y1)senα + x1b | Trovare prima le coordinate di C1:
C1x = q(x2 - x1)
+ x1b Rotazione di centro B di angolo +α (verso antiorario): x' - x1b
= (x - x1b)cosα -
(y- y1b)senα Sostituire ordinatamente ad x ed y le coordinate di C1 |
|
y1c = q(x2 - x1 )senα + q(y2 - y1 )cosα + y1b | ||
|
||
punto D | x1d = x1 + x2 - x1b | Il punto D è il simmetrico di B rispetto al punto H, che è il punto medio di AE |
y1d = y1 + y2 - y1b | ||
|
||
punto E | x1e = x2 | Il punto E resta fisso |
y1e = y2 |
PASSO DUE
Ripetere il procedimento su
ognuno dei segmenti AB, BC, CD, DE ... e così via |
CODICE PER IL FRATTALE
Introduciamo l'ampiezza in gradi dell'angolo a ed il numero di passi passo desiderato.
Trasformiamo a in radianti e calcoliamo q = 1 / (2 * (1 + cos_a))
Procedura iniziale ©2010 www.webfract.it
leggi
passo
'numero di passi desiderato
leggi
a 'angolo
in gradi
a = a * 3.141592 / 180
'trasforma
a in radianti
sen_a = Sin(a)
'seno di
a
cos_a = Cos(a)
'coseno di
a
q = 1 / (2 * (1 + cos_a))
'calcola
q
Chiama la procedura ricorsiva
cesaro
passando ordinatamente come parametri
passo, x1,
y1, x2, y2 '
ad esempio 3, 50, 300, 400,
300
Procedura cesaro(passo, x1, y1, x2, y2)
Se passo = 0 allora
Disegna il segmento di estremi (x1,y1)-(x2,y2)
Altrimenti
x1a = x1
y1a = y1
x1b = q * (x2 - x1) + x1a
y1b = q * (y2 - y1) + y1a
x1c = x1b + q* (x2 - x1) * cos_a - q * (y2 - y1) * sen_a
y1c = y1b + q * (x2 - x1) * sen_a + q * (y2 - y1) * cos_a
x1d = x2 + x1 - x1b
y1d = y2 + y1 - y1b
x1e = x2
y1e = y2
Chiama cesaro(passo - 1, x1a, y1a, x1b, y1b)
Chiama cesaro(passo - 1, x1b, y1b, x1c, y1c)
Chiama cesaro(passo - 1, x1c, y1c, x1d, y1d)
Chiama cesaro(passo - 1, x1d, y1d, x1e, y1e)
Fine se
Fine procedura