HOME OGGETTI 3D LIBRI CORSI TUTORIAL FORUM SHOP CONTATTI   LOGIN









Autore Topic: parameter buffer  (Letto 1922 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

marcomasetti

  • Newbie
    ...sono qui da poco, il mio miglior amico è il pulsante RICERCA
  • *
  • Post: 183
parameter buffer
« il: 05 Luglio 2012, 10:58 »
Memoria parametri (parameter buffer)

Il comando
PUT expression [ , expression, ...]
archivia valori parametrici in un elenco ordinato.
Questi valori vengono richiamati da:
GET (n)
che inserisce i primi n valori in memoria, cancellandoli dalla memoria (equivale al comando taglia),
oppure sono richiamati da:
USE (n)
che inserisce i primi n valori in memoria, senza cancellarli (equivale al comando incolla).

Il comando:
NSP
corrisponde al numero dei parametri contenuti in memoria.

Esempio:
f(i) e g(i) sono determinate funzioni di i.
FOR i=1 TO k
PUT f(i), g(i), 1
NEXT i
memorizza nsp=3*k valori parametrici:
f(1),g(1),1,  f(2),g(2),1, ..., f(n),g(n),1

GET (nsp-3)
taglia e incolla i primi 3*k-3 valori, per cui rimangono memorizzati f(n),g(n),1

Per inserire diverse liste di valori occorre ripetere PUT ed usare GET.
Esempio :
FOR i=1 TO m
PUT f(i), g(i), 0, 1   !4*m valori
NEXT i
FOR i=1 TO k
PUT h(i), k(i)        !2*n valori
NEXT i

Il comando:
GET (4*m)
taglia e inserisce i primi 4*m valori
GET (2*n)
taglia e inserisce gli ultimi 2*n valori

Come esempio inserisco una successione di punti che può servire per realizzare un arco a sesto acuto:

!arco sesto acuto costruito a partire dal tr.equil.(i=1)
!altezza arco=i*0.5*l*sin(60), i=ingrandimento altezza, l=luce
!c=ascissa,k=ordinata centro arco (c,k)
c=
k=
l=
i=
n=  !risoluzione: numero dispari

for j=0 to (n-1)/2-1
put c+0.5*l-l*cos(120/(n-1)*j),k+i*l*sin(120/(n-1)*j)
next j
put c,k+i*l*sin(60) !chiave di volta
for j=1 to (n-1)/2
put c-0.5*l+l*cos(60-120/(n-1)*j),k+i*l*sin(60-120/(n-1)*j)
next j

!Sviluppo del loop per n=33:
c-0.5*l,k,  !n=33,centro(c,k),base=l,alt=i*0.5*l*sin(60)
c+0.5*l-l*cos(3.75),k+i*l*sin(3.75),
c+0.5*l-l*cos(2*3.75),k+i*l*sin(2*3.75),
c+0.5*l-l*cos(3*3.75),k+i*l*sin(3*3.75),
c+0.5*l-l*cos(4*3.75),k+i*l*sin(4*3.75),
c+0.5*l-l*cos(5*3.75),k+i*l*sin(5*3.75),
c+0.5*l-l*cos(6*3.75),k+i*l*sin(6*3.75),
c+0.5*l-l*cos(7*3.75),k+i*l*sin(7*3.75),
c+0.5*l-l*cos(30),k+i*l*sin(30),
c+0.5*l-l*cos(9*3.75),k+i*l*sin(9*3.75),
c+0.5*l-l*cos(10*3.75),k+i*l*sin(10*3.75),
c+0.5*l-l*cos(11*3.75),k+i*l*sin(11*3.75),
c+0.5*l-l*cos(12*3.75),k+i*l*sin(12*3.75),
c+0.5*l-l*cos(13*3.75),k+i*l*sin(13*3.75),
c+0.5*l-l*cos(14*3.75),k+i*l*sin(14*3.75),
c+0.5*l-l*cos(15*3.75),k+i*l*sin(15*3.75),
c,k+i*l*sin(60),                          !chiave di volta
c-0.5*l+l*cos(15*3.75),k+i*l*sin(15*3.75),
c-0.5*l+l*cos(14*3.75),k+i*l*sin(14*3.75),
c-0.5*l+l*cos(13*3.75),k+i*l*sin(13*3.75),
c-0.5*l+l*cos(12*3.75),k+i*l*sin(12*3.75),
c-0.5*l+l*cos(11*3.75),k+i*l*sin(11*3.75),
c-0.5*l+l*cos(10*3.75),k+i*l*sin(10*3.75),
c-0.5*l+l*cos(9*3.75),k+i*l*sin(9*3.75),
c-0.5*l+l*cos(30),k+i*l*sin(30),
c-0.5*l+l*cos(7*3.75),k+i*l*sin(7*3.75),
c-0.5*l+l*cos(6*3.75),k+i*l*sin(6*3.75),
c-0.5*l+l*cos(5*3.75),k+i*l*sin(5*3.75),
c-0.5*l+l*cos(4*3.75),k+i*l*sin(4*3.75),
c-0.5*l+l*cos(3*3.75),k+i*l*sin(3*3.75),
c-0.5*l+l*cos(2*3.75),k+i*l*sin(2*3.75),
c-0.5*l+l*cos(3.75),k+i*l*sin(3.75),
c+0.5*l,k

Servendosi di quanto ho scritto sulla rappresentazione delle linee, sarebbe un utile esercizio disegnare prima l’arco in 2D, poi tradurlo in 3D.
In maniera analoga si costruisce la successione dei punti per un arco a tutto sesto:

!arco ellittico (tutto sesto se i=1)
!altezza=i*0.5*l,i=ingrandimento altezza,l=luce(diametro)
!c=ascissa,k=ordinata centro arco (c,k)
c=
k=
l=
i=
n=  !risoluzione: numero punti=numero segmenti+1

for j=0 to n-1
put c-0.5*l*cos(180/(n-1)*j),k+i*0.5*l*sin(180/(n-1)*j)
next j

!Sviluppo del loop per n=25:
c-0.5*l,k, !centro(c,k),base=l,alt=i*0.5*l
c-0.5*l*cos(7.5),k+i*0.5*l*sin(7.5),
c-0.5*l*cos(2*7.5),k+i*0.5*l*sin(2*7.5),
c-0.5*l*cos(3*7.5),k+i*0.5*l*sin(3*7.5),
c-0.5*l*cos(4*7.5),k+i*0.5*l*sin(4*7.5),
c-0.5*l*cos(5*7.5),k+i*0.5*l*sin(5*7.5),
c-0.5*l*cos(6*7.5),k+i*0.5*l*sin(6*7.5),
c-0.5*l*cos(7*7.5),k+i*0.5*l*sin(7*7.5),
c-0.5*l*cos(8*7.5),k+i*0.5*l*sin(8*7.5),
c-0.5*l*cos(9*7.5),k+i*0.5*l*sin(9*7.5),
c-0.5*l*cos(10*7.5),k+i*0.5*l*sin(10*7.5),
c-0.5*l*cos(11*7.5),k+i*0.5*l*sin(11*7.5),
c,k+i*0.5*l,                 !chiave di volta
c-0.5*l*cos(13*7.5),k+i*0.5*l*sin(13*7.5),
c-0.5*l*cos(14*7.5),k+i*0.5*l*sin(14*7.5),
c-0.5*l*cos(15*7.5),k+i*0.5*l*sin(15*7.5),
c-0.5*l*cos(16*7.5),k+i*0.5*l*sin(16*7.5),
c-0.5*l*cos(17*7.5),k+i*0.5*l*sin(17*7.5),
c-0.5*l*cos(18*7.5),k+i*0.5*l*sin(18*7.5),
c-0.5*l*cos(19*7.5),k+i*0.5*l*sin(19*7.5),
c-0.5*l*cos(20*7.5),k+i*0.5*l*sin(20*7.5),
c-0.5*l*cos(21*7.5),k+i*0.5*l*sin(21*7.5),
c-0.5*l*cos(22*7.5),k+i*0.5*l*sin(22*7.5),
c-0.5*l*cos(23*7.5),k+i*0.5*l*sin(23*7.5),
c+0.5*l,k

Inserisco una possibile soluzione.
« Ultima modifica: 07 Luglio 2012, 22:14 da marcomasetti »