Nurbs curve

OK, ho ridisegnato la curva e splittandola mi da’ il tuo stesso risultato.
Quella di prima la era stata spostata e ruotata e poi rimessa a posto.

Cerchero’ di capire che differenze ci sono.
Grazie !

… Non vorrei ripiombare nella discussione sui floating point … :confused:
:smile:

Quella sopra e’ quella originale.
Quella sotto spostata e rimessa a posto.
Sembra piu’ esatta quella pacioccata … non mi raccapezzo …
:confused:

… E queste sono le due meta’ della curva originale splittata.

Suppongo che per splittare si inseriscano dei nodi.
Adesso non ricordo quali calcoli ci vogliono (dovrei chiedere a te o a Sergio), ma forse la disposizione particolare dei CV porta ad errori floating point maggiori del solito … mah …

Sergio si è offerto volontario. :smiley:
E poi io sono in fase preparazione bagagli … colgo l’occasione per augurare a tutti buone vacanze.

Floating point?! :upside_down_face:
Spero non c’entrino nulla … ciao Salvio. :wink:

Hehe.
Auguri di vacanze … G2 :wink:

ciao Fabio, un saluto anche a te :wink:

:wave:

si Sergio, l’ho avevo già fatto, viene fuori una bella rete intrecciata è spettacolare

edit:
mi sa che questo fa parte del vaso di Pandora:

Annotazione 2020-08-06 012841

anche a voi il grafico di curvatura torna indietro?

poi mi è venuto in mente di estrarre il grafico di curvatura:

Annotazione 2020-08-06 013259

questo è il risultato. . . .

come si dice: ogni tanto, nel mare morto, si trova il pesce vivo :slight_smile:

infatti, ho notato che sta uscendo fuori tutta la matematica delle nurbs :clap:

anche questo sarebbe un bel argomento da seguire, la continuità geometrica e parametrica :+1:

Al bacio… Sergì

Ciao Emilio
metodo di De Casteljau. Ecco i valori esatti, salvo errori. Partendo dalla prima riga composta dalle coordinate dei punti di controllo, si generano le righe successive composte dai punti ottenuti operando tra coppie successive di punti della riga sottostante (mediate). La colonna e la diagonale evidenziate sono i punti di controllo delle due curve (ovvero il punto della curva corrispondente alla coordinata parametrica 0.5 è il punto in apice dello schema triangolare).

(0.00;0.00) (2.00;1.00) (0.00;1.00) (2.00;0.00)
(1.00;0.50) (1.00,1.00) (1.00;0.50)
(1.00;0.75) (1.00,0.75)
(1.00;0.75)

Sergio

1 Mi Piace

Buone vacanze Fabio!!!

Per capire cosa fa i grafico di curvatura devi spostare l’ultimo punto della curva leggarmente a sinistra in orizzontale. In pratica hai una curva che si autointerseca descrivendo un “loop” sempre più stretto con r -> 0. Di conseguenza il grafico che si basa su 1/r si allontana sempre di più. Quanto il punto di controllo finale si trova nella posizione indicata dalle coordinate di Sergio si avrà raggio r=0 e il grafico non è più definito (infinito) quindi anche la sua rappresentazione geometrica non è più definita.

Ciao Fabio

Secondo me volevi dire stessa direzione ma verso differente.

Buone ferie!

Sergio

ok Giuseppe, provo come hai suggerito.
credevo fosse qualcosa che non andava e dava quel risultato bizzarro :+1:

Ciao Sergio, grazie !

Bene.
Ho provato da script e tutto funziona bene:

In alto la curva ottenuta inserendo il nodo multiplo.
Le altre due sono le curve ottenute splittando la curva originale a meta’ domino.

Forse le piccole discrepanze riscontrate ieri potrebbero dipendere dall’interfaccia grafica,
cioe’ dal punto snappato per lo Split.
Anche se non capisco perche’ i CV esterni sono OK ma si sballano leggermente i 2 CV interni …
Mah !
:confused:

Tra l’altro se non sbaglio le coordinate dei CV sembrano tutti floating point esatti, senza problemi di approssimazione, neanche inserendo il nodo. :grinning:

1 Mi Piace

Ciao Sergio.
Scusa ma non capisco. :thinking:
Faccio un esempio al volo, cortesemente dimmi dove sbaglio … e scusa i mezzi di fortuna. :blush:

Due curve di Bezier, di grado tre, curva alfa e curva beta, coincidenti nel punto P3=Q0.
Indico i relativi punti di controllo, P0-P1-P2-P3 e Q0-Q1-Q2-Q3.
Per G1, avendo scelto che il punti P2 P3 Q0 Q1 siano sulla stessa retta, non ci sono problemi, è verificata sempre, la distanza P2-P3 e la distanza Q0-Q1 possono anche avere valori differenti.

Per la continuità parametrica abbiamo:

d(alfa)/dt = 3(P3-P2)

d(beta)/dt = 3(Q1-Q0)

In questo caso non basta che le derivate abbiano la stessa direzione, devono avere anche lo stesso modulo.
Riassumento:
C1 = derivate con stessa direzione e stesso modulo
G1 = derivate stessa direzione e modulo arbitrario

Non capisco cosa mi sfugge. :thinking:

1 Mi Piace

Ciao Fabio

se fosse come dici tu tutte le nurbs con vettore dei knot non uniformi non avrebbero continuità parametrica. Proseguo con il tuo esempio. Sia ad esempio:

dist(P3-P2) = 1
dist(Q1-Q0) = 3

Costruisci la nurbs

CP = {P0,P1,P2,Q1,Q2,Q3}
Knot = {0,0,0,1,1,4,4,4}

Si riscontrerà la perfetta coincidenza delle 3 curve.

Come si nota la prima bezier viene parametrizzata 0 - 1 mentre la seconda 1 - 4.

In altri termini poco formali visto che la seconda curva è tre volte più “veloce” della prima gli triplichiamo la lunghezza da percorrere.

Continuando, se si calcolano le derivate seconde e il rapporto tra i due moduli è ancora pari a 3 allora è possibile rimuovere un knot 1 e si otterrà la medesima curva.

Se poi si calcola la derivata terza e se risulta che il rapporto tra i due moduli è pari a 3 si deduce che le due bezier sono state originate da una bezier splittata alla coordinata parametrica 1/4=0.25.

Prova con qst curve

array(0, 1, 0), array(1, 0, 0), array(3, 0, 0), array(3, 1, 0)

array(3, 1, 0), array(3, 3, 0), array(5, 3, 0), array(5, 1, 0))

Di seguito lo script per generare la nurb.

Dim strObject, arrPoints, arrKnots, intDegree

arrPoints = array(array(0, 1, 0), array(1, 0, 0), array(3, 0, 0), array(3, 3, 0), array(5, 3, 0), array(5, 1, 0))

arrKnots = array(0, 0, 0, 1, 1, 3, 3, 3)

intDegree = 3

strObject = Rhino.AddNurbsCurve(arrPoints, arrKnots, intDegree)

Per finire, è chiaro che la continuità parametrica è più forte della continuità geometrica. Ma questo concetto ritengo valga per le superfici dove il dominio parametrico è due dimensionale. …

Mi fermo qui sperando di non aver detto troppe cavolate.

Un saluto

Sergio

EDIT

Forse creando la nurbs

CP = {P0,P1,P2,P3,Q1,Q2,Q3}
Knot = {0,0,0,1,1,1,4,4,4}

e quindi rimuovendo in rhino un knot 1 il tutto potrà risultare più chiaro: si vedrà scomparire il punto di controllo P3.

2 Mi Piace

:scream: :scream: :scream:
:star_struck::star_struck:

Concordo, Salvio.
Leggere questi due e’ … rinfrescante. (Nel senso, se prima ti capita di vedere un telegiornale o un giornale (quasi tutti) ) …
:grinning:

1 Mi Piace

Ciao Sergio, grazie per la spiegazione e per gli esempi.
Questi purtroppo non posso replicarli, in vacanza il computer è bandito. :slight_smile:
Ho cercato di simularli mentalmente e mi sembrano corretti, non avrei comunque motivo di pensare il contrario.
Però mi manca ancora un tassello … se stai pensando che sono di coccio non posso darti torto. :slight_smile:
Probabilmente sono troppo legato al formalismo e non vedo oltre il mio naso ma l’equazione che ho scritto per la derivata prima non mi lascia scampo.
Ho fatto una ricerca in internet e ho trovato un po’ di materiale.
In questo documento, al capitolo 1.8 fa un esempio simile al mio, arriva alle mie stesse conclusioni.

https://www.google.com/url?sa=t&source=web&rct=j&url=http://digilander.libero.it/b.dellavecchia/documents/Grafica%20computazionale%20finito.pdf&ved=2ahUKEwj_grv1xZLrAhWH-KQKHRjiC4IQFjAEegQIBRAB&usg=AOvVaw0JsxRjgXIe25NtWd5Ro2lt

In quest’altro documento, al capitolo 2.2, si esplicita ancora meglio il concetto.
Derivate prime proporzionali comportano continuità geometrica, non parametrica.
Per la continuità parametrica le derivate devono essere uguali.

https://www.google.com/url?sa=t&source=web&rct=j&url=https://www.gameludere.it/2019/08/10/le-spline-e-le-curve-di-bezier-e-il-loro-utilizzo-nei-videogiochi/%23:~:text%3DNaturalmente%20la%20continuit%C3%A0%20parametrica%20implica,non%20%C3%A8%20vero%20il%20viceversa.%26text%3DNel%20caso%20della%20continuit%C3%A0%20geometrica,i%20due%20segmenti%20di%20curve.&ved=2ahUKEwjml8HV0ZLrAhVNDuwKHblIC9wQFjABegQIDhAG&usg=AOvVaw3cYRxH4mP4YraDBBmuK5T6

Non ti nascondo che sono parecchio confuso. :thinking:

2 Mi Piace