ArchiRADAR Forum > GDL

Curve razionali di Bézier

(1/1)

claudio-aster:
piccole cose inutili...
che mi spingono ancora a giocare con il compiuterz
 :bigrin:

claudio-aster:

il peso o valore di attrazione si applica ovviamente sul punto compreso tra gli estremi
il valore per ottenere la coincidenza con il cerchio è pari al seno dell'angolo/2 compreso tra i due tratti estremicon peso pari a 1 la curva si riduce alla normalissima Bézier
con peso pari a 0 la curva si riduce ad un segmento tra gli estremi
bello e curioso quello che succede con peso negativo
 :bigrin:

claudio-aster:
...

marcomasetti:
Le curve di Bézier tradizionali, ovvero di ordine 3, non hanno punti intermedi, ma il punto iniziale, il secondo e terzo punto  (che non appartengono alla curva ma soni i nodi delle tangenti) e il nodo finale.
Per inserire un ulteriore punto o utilizziamo una curva di ordine superiore, come nell'esempio, dove però rimane da definire un parametro t, oppure dobbiamo rinunciare a definire taluni parametri per l'ordine 3, ad esempio i moduli delle tangenti.

Grado 4
La curva algebrica è definita dai punti iniziale e finale,
dai relativi vettori tangenti, dal punto intermedio M, più il valore "temporale" t.

tm= !valore tra 0 e 1 assunto in M=(xm,ym,zm)
xo=
yo=
zo=   !punto inizio
txo=
tyo=
tzo=  !tang.punto inizio
xm=
ym=
zm=   !punto intermedio
xf=
yf=
zf=   !punto fine
txf=
tyf=
tzf=  !tang.punto fine

t=    !valore parametrico, tipo i/n

qq=(xm-tm^4*xf-4*tm^3*(1-tm)*(xf+txf)-4*tm*(1-tm)^3*(xo+txo)-(1-tm)^4*xo)/(tm^2*(1-tm)^2)
x=(1-t)^4*xo+4*(1-t)^3*t*(xo+txo)+(1-t)^2*t^2*qq+4*(1-t)*t^3*(xf+txf)+t^4*xf

qq=(ym-tm^4*yf-4*tm^3*(1-tm)*(yf+tyf)-4*tm*(1-tm)^3*(yo+tyo)-(1-tm)^4*yo)/(tm^2*(1-tm)^2)
y=(1-t)^4*yo+4*(1-t)^3*t*(yo+tyo)+(1-t)^2*t^2*qq+4*(1-t)*t^3*(yf+tyf)+t^4*yf

qq=(zm-tm^4*zf-4*tm^3*(1-tm)*(zf+tzf)-4*tm*(1-tm)^3*(zo+tzo)-(1-tm)^4*zo)/(tm^2*(1-tm)^2)
z=(1-t)^4*zo+4*(1-t)^3*t*(zo+tzo)+(1-t)^2*t^2*qq+4*(1-t)*t^3*(zf+tzf)+t^4*zf
! x,y,z

!proiezione sul solo asse x:
tm= !valore tra 0 e 1 assunto in M=(xm,ym,zm)
xo=
txo=
xm=
xf=
txf=

t=    !valore parametrico, tipo i/n

qq=(xm-tm^4*xf-4*tm^3*(1-tm)*(xf+txf)-4*tm*(1-tm)^3*(xo+txo)-(1-tm)^4*xo)/(tm^2*(1-tm)^2)
x=(1-t)^4*xo+4*(1-t)^3*t*(xo+txo)+(1-t)^2*t^2*qq+4*(1-t)*t^3*(xf+txf)+t^4*xf

!alternativa:
cxo=(-(1-t1)^4-4*t1*(1-t1)^3)/(t1^2*(1-t1)^2)*(1-t)^2*t^2+(1-t)^4+4*(1-t)^3*t
cx1=(1-t)^2*t^2/(t1^2*(1-t1)^2)
cxf=(-4*t1^3*(1-t1)-t1^4)/(t1^2*(1-t1)^2)*(1-t)^2*t^2+t^4+4*(1-t)*t^3
ctxo=-4*t1*(1-t1)^3/(t1^2*(1-t1)^2)*(1-t)^2*t^2+4*(1-t)^3*t
ctxf=-4*t1^3*(1-t1)/(t1^2*(1-t1)^2)*(1-t)^2*t^2+4*(1-t)*t^3

x=cxo*xo+cx1*x1+cxf*xf+ctxo*txo+ctxf*txf

!con tm=1/2 si semplifica:

x=(1-t)^4*xo+4*(1-t)^3*t*(xo+txo)+(1-t)^2*t^2*(16*xm-5*xf-4*txf-4*txo-5*xo)+4*(1-t)*t^3*(xf+txf)+t^4*xf

Navigazione

[0] Indice dei post

Vai alla versione completa