Formula per CurvaNurbs

Ciao Salvio, credo che Emilio abbia già spiegato bene la cosa, con una funzione specifica puoi trovare le coordinate dei punti e poi collegarli secondo un ordine per ottenere la curva. Tieni se ci vuoi giocare un po’.


math_ex.gh (14,4 KB)

non so quanto possa essere fuorviante la cosa, ma io l’ho sempre inteso come quando al liceo dovevi fare il grafico della funzione (più o meno).

Poi non so se OT, comunque per le bezier penso sia sempre utile capire come si realizzavano prima le spline senza cad, giusto per avere un punto di vista meno matematico di come si approcciava il problema prima. Durante i miei fallimentari anni ad ingegneria navale, ci hanno fatto disegnare un intero scafo così (e con un foglio excell per trovare le coordinate delle linee d’acqua, almeno quello).

3 Mi Piace

Alex ti ha inquadrato meglio l’argomento in generale.
Sempre interessante. :grinning:

Avevamo gia’ fatto delle def per quello.
L’algoritmo di De Casteljau.

Le formule si possono scrivere in vari modi.
Poi quella generale e’ un conto.
Quella per un particolare grado un altro.

Prova con questa:
( Sempre dalla stessa pagina Web)

immagine

immagine

ok grazie Alex
ma fammi capire una cosa, essendo che questo tipo di def che hai allegato li avevo già visti fare sia in rete che qualche volta anche qui nel forum, ma si tratta della stessa cosa? perché da quello che si vede nell’animazione per le Bezier i punti dove deve passare la curva si collegano a particolari linee, mentre se non erro con la tua def sposti nello spazio i punti determinando una suddetta forma ma senza seguire le regole della Bezier giusto?

ps ma quei pesi sul foglio di carta, sono per i clienti rompiscatole ahahahah :rofl: :rofl:

Emilio giusto per non sbagliare, sarebbe la stessa postata in questo post:

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.

Credo che li’ Sergio parli di continuita’ e derivate.
Ma in effetti utilizza una Bézier cubica.

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

mi sembrava la stessa che hai postato con la differenza che mette le “PxX” all’inizio

nel caso di Sergio una cosa che mi sfugge come mai ne usa 2 righe, una per PxX e una PxY

“la x min sta per 0 / 1 / 2 / 3”

Sergio parla di una curva 2D, o se vogliamo disegnarla su Rhino: sul piano XY, trascurando la Z costante, e scrive due equazioni: una per la X e una per la Y.

Nella def che ho postato il componente Expression lavora direttamente sui punti (i CV), quindi su vettori con 3 componenti: X,Y,Z con una sola espressione.

1 Mi Piace

Scusami, no forse ho capito male cosa intendevi con la richiesta. Volevo solo dimostrarti che con quel componente puoi sfruttare un’espressione matematica che rappresenta una specifica “curva” (o meglio dei punti appartenenti ad essa). Poi come vedi puoi usarli per costruire una polilinea, farci passare una interpolata o come poligono di controllo per la nurbs. Se non sbaglio il libro Essential Mathematics for computational designer di Raja Issa ha un sacco di GH relativi

Questo il calcolo dell’intelligenza artificiale :joy:

Fabio questo si chiama sabotaggio
già mi sta uscendo il fumo dalle orecchie
adesso vedere anche gli esempi di AI noooo
:rofl: :rofl:

non so se è valida o meno (credo di no)
ma comunque non lo voglio nemmeno sapere
mi attengo su quello che “è già” stato scritto in passato
a quanto sembra quello che viene scritto oggi è mutabile
come la moda che si porta oggi dove si parla di essere fluidi

ok quindi non mi ero sbagliato, la tua def andavi a trasporre un punto in altre coordinate

bello il libro ne avevo alcuni ma questo mi mancava :+1:

immagine

:confused:

grande Emilio questa ha funzionato :+1:

1 Mi Piace



se avessi dovuto trascrivere la prima in alto non l’avrei saputo fare
comprendo che ci possono essere modi diversi per un unico risultato
ma “personalmente” comparando le due formule non le avrei mai equiparate

qui un video dove con Python vengono usate proprio le formule più complesse:

aggiungendo uno slider ha effetto animazione :grin:


edit:

è corretta la parte esterna al gruppo oppure è solo una coincidenza?

provo a fare la stessa cosa con la curva di grado 3 con 4 cv mi sa che è diverso il discorso. . .


edit²

a vabbè pensavo peggio, quindi il giochetto viene fatto tutto dal valore “t”

1 Mi Piace

Lascio la risposta a chi conosce GH.
Io se non leggo i nomi dei componenti non capisco niente … e anche se leggo non e’ detto. :confused:

wauuu proprio carina sta cosa :star_struck: :star_struck:

cerco di farlo con una curva di grado 5, se riesco a trovare espressione semplice ci provo.

:thinking: :thinking:

scusate ragazzi cortesemente potreste controllare questa espressione se è scritta correttamente?

cv0*(1-t)^5+5cv1t*(1-t)^4+10cv2t^2*(1-t)^3+10cv3t^3*(1-t)^2+5cv4t^4*(1-t)+cv5*t^5

cv0*(1−t)^5
+
5*cv1*t*(1−t)^4
+
10*cv2*t^2*(1−t)^3
+
10*cv3*t^3*(1−t)^2
+
5*cv4*t^4*(1−t)
+
cv5*t^5

l’ho controllata più e più volte, e sembra che abbia trascritta bene. . .


ok come non detto funziona :+1:

Ciao Salvio, essendo la formulazione generale occorre un po’ di formalismo matematico che mette sicuramente confusione, almeno a me.
Il termine (n i) mi pare si chiami coefficiente binomiale e , calcolarlo a mano, è una rottura di scatole.
Per rispondere anche alla tua ultima domanda, per i vari coefficienti numerici, credo che potresti usare il triangolo di Tartaglia, ti permette di cogliere visivamente e in maniera ordinata lo sviluppo del coefficiente binomiale.
Alla sesta riga “riconoscerai” la tua equazione di quinto grado.

2 Mi Piace

ciao Fabio,

immaginavo che ci fosse uno schema da seguire, ma non sapevo quale
quindi grazie per la condivisione, confrontandola con equazioni postate
adesso le comprendo molto meglio, prima erano numeri messi a caso
diciamo che nell’ultimo mio post, avevo suddivisa bene l’equazione :wink:

ps la matematica (e affini) è qualcosa di incredibile.
“si dice che sono alla base del creato”

Come disse qualcuno, l’universo è un libro scritto in matematica.

Sì, era corretta.
E se non avevi ancora capito bene come si dovesse sviluppare, complimenti, bravo! :heart_eyes:

1 Mi Piace

le avevo divise in modo che tutte le sequenze avessero una coerenza tra loro,
ogni tanto qualche cosa di buono anche se casualmente l’azzecco :smile: :smile:


spero di non entrare in OT (magari se interessa si potrebbe aprire un’altra discussione)

sarebbe bello sapere se, lavorando sulle equazioni postate “oppure con le formule delle derivate”
si potessero recuperare i punti Quad o/e i punti che trova Rhino con il comando Curvatura.

(argomento trattato poco tempo fa, se ho compreso bene: i comandi Rhino lavorano analiticamente. . .)