In questo esercizio costruisco una primitiva triangolare suddivisa in sottomoduli.
Il suo possibile uso può essere la costruzione di pennacchi, vele, lunette.
Oppure può essere utilizzata per deformazioni dello spazio che prevedano oggetti piramidali.
Rispetto la suddivisione in sottomoduli di un rettangolo, la costruzione è più complessa.
Per determinare i valori degli indici ricordiamo che la sommatoria di n numeri interi successivi vale la somma del primo più l’ultimo moltiplicata per n/2.
I vertici, nel passare alla riga successiva, scalano di uno, quindi dalla prima riga alle successive i loro indici (in blu nella figura) saranno:
riga 1,j=0: 1,2,…, n+1 !n+1 elementi
riga 2,j=1: (1+n)+1, (1+n)+2,…, (1+n)+n !n elementi
riga 3,j=2: (1+n)+(n)+1, (1+n)+(n)+2,…, (1+n)+(n)+n-1 !n-1 elementi
riga4, j=3: (1+n)+(n)+(n-1)+1, (1+n)+(n)+(n-1)+2,…, (1+n)+(n)+(n-1)+n-2 !n-2 elementi
…
riga j+1: ( (1+n)+(n-(j-2)) )*j/2+1,(3+2*n-j)*j/2+2,…, (3+2*n-j)*j/2+n-j+1 !n-j+1 elementi
…
riga n,j=n-1: (4+n)*(n-1)/2+1 ,(4+n)*(n-1)/2+2
vertice finale j=n: (3+n)*n/2+1
Consideriamo ora gli indici degli EDGES (in rosso nella figura)
Come i vertici, anche i segmenti di collegamento scalano di 1 passando alla riga successiva:
riga 1,j=0: 1,2,…, n !n elementi
riga 2,j=1: (n)+1 , (n)+2,…, (n)+n-1 !n-1 elementi
riga 3,j=2: (n)+(n-1)+1, (n)+(n-1)+1,…, (n)+(n-1)+n-2 !n-2 elementi
riga4, j=3: (n)+(n-1)+(n-2)+1, (n)+(n-1)+(n-2)+2,…, (n)+(n-1)+(n-2)+n-3 !n-3 elementi
…
riga j+1: ( (n)+(n-(j-1)) )*j/2+1,(1+2*n-j)*j/2+2,…, (1+2*n-j)*j/2+n-j !n-j elementi
…
riga n,j=n-1: (2+n)*(n-1)/2+1=(2*n-2+n^2-n)/2+1= n^2/2+n/2
Oppure, per induzione diretta, ricordando che con m intero risulta:
1+2+…+m=(1+m)*m/2
si deduce che l’indice dell’ultimo EDGE orizzontale è
1+n+(n-1)+...+(n-(n-2))=1+n*(n-1)-(1+...(n-2))=1+n*(n-1)-(n-1)*(n-2)/2=n^2/2+n/2
Quindi l’indice del primo EDGE obliquo è effettivamente n^2/2+n/2+1
Dato che il numero degli edges obliqui con la stessa direzione eguaglia il numero degli edges orizzontali,
il primo indice della seconda serie di edges obliqui è n^2+n+1.
Utilizziamo come modulo di riferimento il triangolo ABC, con AH=l1, HB=l2, HC=sqr(h^2+d^2), essendo H
Il piede dell’altezza tracciata da C.
Dunque: A=(0,0,0), B=(l1+l2,0,0), C=(l1,-d,h)
Lo script dei vertici diventa:
for j=0 to n !n+1 righe, compreso il vertice isolato
for i=0 to n-j
VERT j*l1/n+(l1+l2)/n*i, d/n*j, h/n*j
next i
next j
Gli EDGES orizzontali, su n righe, devono saltare di un posto nel passare alla riga successiva,
inoltre ad ogni salto il loro numero diminuisce di 1.
for j=0 to n-j
for i=1 to n-j
EDGE (3+2*n-j)*j/2+i, (3+2*n-j)*j/2+i+1, -1,-1,0
next i
next j
Per gli EDGES obliqui vale la stessa regola, ma il secondo indice si trova sulla riga successiva, quindi, utilizzando il primo indice, nel secondo il valore di j va aumentato di 1.
for j=0 to n-j
for i=1 to n-j
EDGE (3+2*n-j)*j/2+i, (3+2*n-(j+1))*(j+1)/2+i, -1,-1,0
next i
next j !Da basso sin a alto dex
Per gli EDGES obliqui orientati verso sinistra, va aumentato di 1 il primo indice, rispetto a quelli orientati verso destra,
for j=0 to n-j
for i=1 to n-j
EDGE (3+2*n-j)*j/2+i+1, (3+2*n-(j+1))*(j+1)/2+i, -1,-1,0
next i
next j !Da basso dex a alto sin
Rimangono da costruire i poligoni. Con n=3 il primo poligono sarebbe:
PGON 3,0,-1, 1, 13, -7
Infatti i vettori con indici 1, 13 e 7 invertito di senso chiudono il triangolo in basso a sinistra.
Tali vettori si possono anche riscrivere:
1, n^2+n+1,-( n^2/2+n/2+1)
Infatti nel passare dagli insiemi di vettori orizzontali agli obliqui il salto degli indici è n^2/2+n/2.
Si tratta ora di inserire tale poligono in un loop.
Per il momento costruiamo solo la prima fila:
j=0
for i=1 to n-j
PGON 3,0,-1, i, n^2+n+i,-( n^2/2+n/2+i)
next i
Dato che la riga j+1 prevede un aumento degli indici dei vettori pari a (1+2*n-j)*j/2, aggiungiamo questo valore agli indici:
for j=0 to n-1
for i=1 to n-j
PGON 3,0,-1, (1+2*n-j)*j/2+ i, (1+2*n-j)*j/2+ n^2+n+i,-( (1+2*n-j)*j/2+ n^2/2+n/2+i)
next i
next j
Rimangono da aggiungere I triangoli rovesciati, che sono inferiori di numero:
con n=3 il primo vale:
-4, -13, 8
che si generalizza in:
-((1+2*n-(j+1))*(j+1)/2+i),-((1+2*n-j)*j/2+ n^2+n+i), (1+2*n-j)*j/2+ n^2/2+n/2+i+1
Infatti il vettore 13 lo ricaviamo dal poligono precedente e pure il vettore 8 cambiando di segno -7 e aggiungendo 1,
il vettore 4 si ricava sostituendo in 1 il valore j+1 a j che rappresenta il salto alla riga successiva.
Quindi lo script, tenuto conto del numero inferiore, diventa:
for j=0 to n-2
for i=1 to n-j-1
PGON 3,0,-1, -((1+2*n-(j+1))*(j+1)/2+i),-((1+2*n-j)*j/2+ n^2+n+i), (1+2*n-j)*j/2+ n^2/2+n/2+i+1
next i
next j
Come esempio applico a una piramide con facce costruite in questo modo,
la prospettiva sferica 3D con sfera limite di raggio r e sfera unita di raggio q:
xx=x*d/(sqr(x^2+y^2+z^2)+d-q)
yy=y*d/(sqr(x^2+y^2+z^2)+d-q)
zz=z*d/(sqr(x^2+y^2+z^2)+d-q)
L’oggetto non deformato e la piramide distorta si intersecano lungo la sfera dei punti uniti, come accade per l’omologia lineare.