Nurbs curve

Ciao a tutti

cerco di dare un contributo per fare chiarezza sulla continuità interna delle curve.
Essendo una nurbs composta da bezier concentro l’attenzione proprio sulle bezier.
Anche una bezier di grado superiore ad 1 può non essere derivabile in un punto.

Costruite una curva di grado 3 con punti di controllo alle coordinate:
0,0; 2,1; 0,1; 2,0

In mezzeria la curva ha continuità C0.

E’ vero che le nurbs sono funzioni polimoniali, ma dobbiamo ricordare di aggiungere
sempre il termine “parametriche”.

Nella matematica comune associamo alla funzione polimoniale la forma del tipo:

y=ax^3+bx^2+cx+d

e la derivata della funzione è:

dy/dx = 3ax^2+2bx + c

e così a seguire per le derivate di ordine superiore.

La bezier (grado 3) è ben altra cosa:

x(t) = P0X (1-t)^3+P1X3t(1-t)^2+P2X3t^2*(1-t)+P3Xt^3
y(t) = P0Y (1-t)^3+P1Y3
t*(1-t)^2+P2Y3t^2*(1-t)+P3Y*t^3

e la derivata prima è:

dx/dt = 3*[ (P1X-P0X) (1-t)^2+(P2X - P1X)2t(1-t)+(P3X - P2X)t^2]
dy/dt = 3
[ (P1Y-P0Y) (1-t)^2+(P2Y - P1Y)2t(1-t)+(P3Y - P2Y)*t^2]

Per calcolare la derivata della curva basta calcolare:

dy/dx = (dy(t)/dt) / (dx(t)/dt)

Vediamo la curva di grado 3 indicata. La sua espressione matematica è la seguente:

x(t) = 0 * 1 * (1-t)^3 + 2 * 3 * t * (1-t)^2 + 0 * 3 * t ^2 * (1-t) + 2 * 1 * t^3
y(t) = 0 * 1 * (1-t)^3 + 1 * 3 * t * (1-t)^2 + 1 * 3 * t ^2 * (1-t) + 0 * 1 * t^3

con t {0;1}

La sua derivata è

dx(t) = 3 * [ 1 * (2-0) (1-t)^2 + (0-2) * 2 * t * (1-t) + (2-0) * t^2 ]
dy(t) = 3 * [ 1 * (1-0) (1-t)^2 + (1-1) * 2 * t * (1-t) + (0-1) * t^2 ]

per t= 0.5 risulta

dx(t) = 0
dy(t) = 0

Quindi

dy/dx = 0 / 0 !!!

Ciò vuol dire che si è presenza di un punto angoloso.

Le formule possono sembrare complesse ma sono molto semplici da calcolare.
Spero, almeno per chi ha ancora ricordo dei concetti matematici trattati, di aver dato
un contributo in più.

Sergio

4 Mi Piace