Px = Ax + s(Dx-Ax)
Py = Ay + s(Dy-Ay)
Qx = Bx + s(Cx-Bx)
Qy = Cy + s(Cy-By)
Dove s, 0 ≤ s ≤ 1, esprime il rapporto fra AP e AD.
Le equazioni che useremo per trovare il trasformato di ogni punto sono [cfr. Costruzione]:
x' = a(x-x0) + b(y-y0) + x0
y' = a'(x-x0) + b'(y-y0) + y0
Per rappresentare un punto sullo schermo dovrete moltiplicare le sue coordinate per il lato, oltre che operare un'opportuna traslazione.
ESEMPIO: Per disegnare P(xa,ya), e se la vostra finestra grafica misura w × h, potete scrivere
Pset(w/2 + Round(lato * xa), h - Round(lato * ya))
ANGOLI 30° 60° | ANGOLI 45° |
k1 = 0.5 |
k1 = 0.7071 |
Chiama la procedura ricorsiva Pitagora passando come parametri, nell'ordine:
j: il numero di ripetizioni della proceduraNel nostro caso: Chiama Pitagora(j, 0, 0, 1, 0, 1, 1, 0, 1) Fine
le coordinate di A, B, C, D
Procedura Pitagora(n As Integer, x1 As Double, y1 As Double, x2 As Double, y2 As Double, x3 As Double, y3 As Double, x4 As Double, y4 As Double)
Inizio
Dichiara, come variabili si tipo double:
x1q1, y1q1 [trasformati di (x1,y1) nella trasformazione numero 1]Se n = 0 allora
x1q2, y1q2 [trasformati di (x2,y2) nella trasformazione numero 1]
x1q3, y1q3 [trasformati di (x3,y3) nella trasformazione numero 1]
x1q4, y1q4 [trasformati di (x4,y4) nella trasformazione numero 1]
x1q5, y1q5 [trasformati di (x1,y1) nella trasformazione numero 2]
x1q6, y1q6 [trasformati di (x2,y2) nella trasformazione numero 2]
x1q7, y1q7 [trasformati di (x3,y3) nella trasformazione numero 2]
x1q8, y1q8 [trasformati di (x3,y4) nella trasformazione numero 2]
a, b [coefficienti della trasformazione numero 1]
a1, b1 [coefficienti della trasformazione numero 2]
xP, yP, xQ, yQ [coordinate dei punti P e Q come da figura]
s [parametro che varierà fra 0 e 1]
Altrimenti[Si disegnano i quadrati pieni]
s = 0Ripeti
xP = x1 + s * (x4 - x1) yP = y1 + s * (y4 - y1) xQ = x2 + s * (x3 - x2) yQ = y2 + s * (y3 - y2) Disegna la retta per i punti (xP,yP), (xQ,yQ) s = s + 0.01 Fino a quando s >= 1
[Prima trasformazione. Rotazione di 150° in senso antiorario e di centro (x4,y4) seguita da omotetia con lo stesso centro e rapporto 0.5]
a = k1 * Cos(T)
b = -k1 * Sin(T)
a1 = k1* Sin(T)
b1 = k1 * Cos(T)
[Trovo il trasformato di (x1,y1)]
x1q1 = a * (x1 - x4) + b * (y1 - y4) + x4
y1q1 = a1 * (x1 - x4) + b1 * (y1 - y4) + y4
[Trovo il trasformato di (x2,y2)]
x1q2 = a * (x2 - x4) + b * (y2 - y4) + x4
y1q2 = a1 * (x2 - x4) + b1 * (y2 - y4) + y4
[Trovo il trasformato di (x3,y3)]
x1q3 = a * (x3 - x4) + b * (y3 - y4) + x4
y1q3 = a1 * (x3 - x4) + b1 * (y3 - y4) + y4
[Trovo il trasformato di (x4,y4) che resta fisso, infatti è in centro di similitudine]
x1q4 = x4
y1q4 = y4
[Seconda trasformazione. Rotazione di 240° in senso antiorario intorno a (x3,y3) seguita da omotetia con lo stesso centro e rapporto 0.866]
a = k2 * Cos(T1)
b = -k2 * Sin(T1)
a1 = k2 * Sin(T1)
b1 = k2 * Cos(T1)
[Trovo il trasformato di (x1,y1)]
x1q5 = a * (x1 - x3) + b * (y1 - y3) + x3
y1q5 = a1 * (x1 - x3) + b1 * (y1 - y3) + y3
[Trovo il trasformato di (x2,y2)]
x1q6 = a * (x2 - x3) + b * (y2 - y3) + x3
y1q6 = a1 * (x2 - x3) + b1 * (y2 - y3) + y3
[Trovo il trasformato di (x4,y4)]
x1q8 = a * (x4 - x3) + b * (y4 - y3) + x3
y1q8 = a1 * (x4 - x3) + b1 * (y4 - y3) + y3
[Trovo il trasformato di (x3,y3) che resta fisso, infatti è il centro di similitudine]
x1q7 = x3
y1q7 = y3
[Si disegnano i quadrati pieni]
s = 0Ripeti
xP = x1 + s * (x4 - x1) yP = y1 + s * (y4 - y1) xQ = x2 + s * (x3 - x2) yQ = y2 + s * (y3 - y2) Disegna la retta per i punti (xP,yP), (xQ,yQ) s = s + 0.01 Fino a quando s >= 1
[Si richiamano ricorsivamente le procedure sui due quadrati ottenuti, facendo attenzione all'ordine dei vertici!]
Chiama Pitagora(n - 1, x1q4, y1q4, x1q1, y1q1, x1q2, y1q2, x1q3, y1q3)Alberi di Pitagora: Introduzione Pit45° Pit30° Codice Di Natale Casuali Generalizzati Di Natale generalizzati
| | |
©2002 - 2012 www.webfract.it