Formula per CurvaNurbs

tra tanti tutorial che ho sbirciato in rete, riguardanti le espressioni, derviate ecc
tanti usano GeoGebra che se ricordo bene viene chiamato anche calcolatore
grafico chissà magari potrebbe essere più idoneo per questi tipi di discorsi?

è anche online, riporta i piani cartesiani ecc.

Hahaha … no, no.
Sergio e’ un vecchio amico, da cui c’e’ sempre molto da imparare. :grinning:
Ma abbiamo una lunga tradizione di … discussioni. :wink:

… Poi, tra l’altro, devo ammettere che su Python non ha tutti i torti …
:smile:

1 Mi Piace

se intendi la parte che ho quotata era VBS :smile:

No, parlavo d’altro.

A quanto ne so, Sergio non e’ un fan di Python, per cosi’ dire … :smile:
Io, per fortuna, non ho grandi difficolta’ ad usare Python quando serve, ad esempio per scriptare Rhino.
Ma riguardo all’opinione personale sul linguaggio, considerando anche gli script di Rhino, concordo in buona misura con Sergio, anche se forse con qualche differenza sui motivi. :grinning:

1 Mi Piace

ma la derivata 2 usata da Fabio in questa foto, che viene chiamata accellerazione
con tale derivata, sarebbe possibile trovare il punto ultimo dopo il quale la curva cambia?


l’oscillazione del versone della derivata2 va ad indicare l’accelerazione?

Non so cosa indichino esattamente quei 2 vettori.
Potrebbero essere prima e seconda derivata ma con lunghezza costante …
Dalla def. non capisco (non sapevo nemmeno che ci fossero i loop in GH :smile:)
Non vedo niente collegato alle uscite delle derivate … :confused:

Nel caso fosse cosi’ direi che il primo vettore indica la direzione della velocita’, nel senso di spostamento riferito al parametro.
E il secondo sarebbe la direzione della variazione di velocita’, quindi di una accelerazione, sempre riferita al parametro.

Ma certo posso sbagliare … :confused:

Anemone plugin di Gh su food, in alcuni topic lo hanno usato sia Leopoldo che RiccardoMajewski
io lo usato per rendere lo scorrimento più fluido, che se lo avessi fatto io trascinare lo slider

si in effetti la prima derivata si chiama velocità e la seconda accelerazione
facendo una prova, ho notato che la direzione della velocità corrisponde alla tangenza

non capisco come mai per i componenti LineSDL e Vector2Pt parto con lo stesso punto
e uso come direzione la derivata1 ma hanno direzioni differenti :man_facepalming: :man_facepalming:

dopo tutto questo ambarabà, sono arrivato a delle conclusioni di cui ho fatto delle prove:

dalla foto, la curva in alto ha la poligon cage simmetrica, e impostando evaluate a 0.5
mi trova lo stesso punto di marcatura del comando Curvature in Rhino.

mentre con la curva in basso, che ha una polygon cage asimmetrica questo non accade
andando a recuperare prima il punto con il comando Curvature in Rhino
e poi successivamente posso recuperare il giusto valore t

mi chiedevo, per recuperare il valore t corretto in una polygon cage asimmetrica come nella foto
cosa dovrei fare, una sottrazione della lunghezza tra il primo e secondo segmento?

Ciao Salvio.
Se non ho interpretato male la tua richiesta direi di sì.
Vuoi calcolare il punto sulla curva dove la curvatura si annulla, per intenderci il punto che viene marcato con il quadratino nero dal comando _Curvature di Rhino.
E’ un punto di flesso, la concavità (o la convessità) passa “dall’altra” parte della curva.
Io lavorerei con la formula della curvatura che abbiamo già usato, uguagliandola a zero.
Anzi, porrei uguale a zero solo il numeratore della formula.
Il denominatore non ci interessa e, a meno di non inventarci una bezier “anomala” non dovrebbe darci problemi.
Come ti dicevo, non è un problema ricavare la scrittura, piuttosto è un problema risolvere l’equazione in GH, per lo meno per me.
La formula di partenza era questa.

k=X'Y''-Y'X''

Mi rinfresco la memoria: le derivate prima e seconda dell’equazione sono indicate con X e Y perché si riferiscono ai valori della derivata di B(t) utilizzando, rispettivamente, le componenti x e y dei punti scelti per generare la curva.
Utilizziamo dei punti di controllo tali da ottenere una Bezier che abbia un flesso ovviamente, ad esempio questi:

P_0(0,3)
P_1(2,2)
P_3(3,0)
P_3(5,0)

Ponendo uguale a zero il numeratore dell’equazione della curvatura, si ottiene (sempre salvo errori e omissioni):

(6 (1 - t)^2 + 6 t (1 - t) + 6 t^2)\cdot (-6 (1 - t) + 12 t) - (-3 (1 - t)^2 - 12 t (1 - t))\cdot (-6 (1 - t) + 6 t)

E fino qui tutto bene, nel senso che non penso ci siano difficoltà a comporre questa scrittura in GH, per fargliela risolvere però non saprei come fare a meno di non usare plugin o script adatti, io su questo mi arrendo subito. :blush:
Si tratta di una equazione di terzo grado per le quali possono esserci dei metodi di risoluzione che però non sono “standard”, dipendono dalla specifica equazione … leggi dai punti che abbiamo scelto.
Nel nostro caso c’è pure una soluzione immaginaria che mi pare GH non gradisca.
Tra le varie soluzioni quella che ci interessa deve ovviamente essere compresa tra zero e uno (la nostra parametrizzazione).
La soluzione è 4-\sqrt(13).
Se inserisci questo valore trovi il punto cercato.
Ho fatto una prova al volo con Rhino e mi pare sia corretta.
Aspetterei quindi la risposta degli esperti di GH per vedere come poter risolvere una generica equazione in GH.

Edit: non capisco perché l’equzione non si veda per intero, in teoria dovrebbero comparire una barra di scorrimento, io non la vedo.
Riporto l’erquazine su due righe:

(6 (1 - t)^2 + 6 t (1 - t) + 6 t^2)\cdot (-6 (1 - t) + 12 t)
- (-3 (1 - t)^2 - 12 t (1 - t))\cdot (-6 (1 - t) + 6 t)

Edit2: correggo, la soluzione immaginaria non c’è. Non che abbia molta importanza nel nostro caso.

Qui non ti seguo proprio. :blush:
Stiamo sempre parlando del “problema” della curvatura o di un’altra cosa? :thinking:

E’ di difficile interpretazione … :joy:

Penso voglia dire questo:
data una curva bezier con punti di controllo disposti in modo simmetrico rispetto ad un asse,
in corrispondenza della coordinata parametrica t=0.5 determino una data curvatura.
Se taglio la curva (temo di perdermi … :joy:) il punto in cui ho calcolato la curvatura non sarà
più 0.5. A che coordinata parametrica corrisponde?
In altre parole nel quesito si parla di curvatura ma non centra nulla.

1 Mi Piace

:+1:

in questo caso stavo parlando del punto bianco che si trova col comando Curvatura
(dovrebbe essere il punto min e max giusto?)
ho notato che se la curva è simmetrica col valore t 0.5 corrisponde al punto trovato con Curvatura
mentre se la curva è asimmetrica come si vede nel panel il valore t in quel caso è 0.429
questo ovviamente è dato dal fatto che il secondo segmento della polygon cage è più lungo
mi chiedevo se bastasse una compensazione della lunghezza dei due segmenti?

esatto Sergio, hai centrato in pieno la questione

ps considerando quanto esposto più volte da Fabio, il fatto che sia complicato poter eseguire
Exp posta, non ci si potrebbe aiutare con vari componenti esistenti come già fatto in questa occasione:

appunto, essendo che man mano sembra aumentino le complicazioni
se alcuni componenti già possono risolvere parte dell’Exp perché non utilizzarli?

giusto per conferma: dalla foto sopra si evince che i risultati del componente derivate corrispondono alle derivate che si sono trovate fin’ora con gli esempi delle Exp giusto?
quindi con la derivate 3 si dovrebbe risolvere parte della tua ultima Exp?

Ti piace vincere facile. :wink:

Penso di no.

Be, abbiamo lavorato per quello.
In sostanza ci siamo calcolati manualmente quello che fa il componente GH, quindi derivata prima, derivata seconda e curvatura.
Un esercizio accademico in sostanza. :wink:

Intendi la derivata terza?
Non c’entra nulla con i nostri calcoli.
Se guardi vedi che vengono utilizzate solo la derivata prima e la derivata seconda.
Il “problema” comunque è che GH, per quel poco che ne so io, non è in grado di risolvere delle equazioni, dobbiamo fornirgli noi tutte le parti e fargli fare banalmente un calcolo.
Se i termini sono ricavabili con una regola unica, basta smanettare un po’ e assemblargli le parti del puzzle.
Ma nel caso della cubica ci sono più metodi risolutivi che richiedono qualche prova/controllo, una certa dose di occhio e anche di qualcos’altro. :rofl:
Io non sono in grado di implementare in una definizione questo processo logico, probabilmente persone esperte potrebbero farlo.
Ma, in generale, si tratterebbe di un lavoro mica da ridere e rimarrebbe sempre limitato al nostro orticello, in questo caso le equazioni cubiche.
Al prossimo “problema” saremmo ancora a punto da capo.
Concorderai con me che, se ci fosse un componente/script/plugin che risolve le equazioni, sarebbe tutto più semplice e lineare.

1 Mi Piace

Fabio, dopo tutto questo, ti posso solo dire, che mal di testa ahahahah :smile: :smile:

ps ovviamente sempre grazie a tutti per tutto :+1:

lo so che dico di fermarmi, ma poi aggiungo qualcosa, volevo solo saprere se poteva essere utile:

infatti funziona fino alla prima parentesi poi dopo si perde


utilizzando GeoGebra la funzione funziona,
sia la prima parte verde, che tutta quella che hai postato rossa.

edit:
ho notato che, sono comparse alcune parentesi più grandi del normale in GeoGebra

E’ un metodo di risoluzione “grafico”, non cambia nulla.
Le intersezioni della curva (rossa) con l’asse delle ascisse sono le soluzioni dell’equazione, la “nostra” è quella ovviamente compresa tra zero e uno.
Questo GeoGebra ti dice quanto vale t in quel punto?
Se non ho sbagliato i calcoli dovrebbe confermarti il valore 4-\sqrt(13)

non ne ho idea ahahahah
lo sto scoprendo man mano

https://www.geogebra.org/classic?lang=it

questo è il link del sito

ho ripetuto inserimento delle formule, e poi ho aggiunto una intersezione “punto A” e “punto C”

a Sx sono comparsi quei valori
A=(0.43, 4.53) e B=(5.82, 174.35)
C=(0.37, 4.61) e D=(1.63, 12.19)

(6(1−t)²+6t(1−t)+6t²)⋅(−6(1−t)+12t)−(−3(1−t)²−12t(1−t))⋅(−6(1−t)+6t)
se noti, oltre alla formula intera
poi lo anche spezzettata
ogni colore una curva

Non è che capisca molto dall’immagine ma devi usare solo l’equazione g(t) che ho visto prima, la curva rossa in sostanza:

Le soluzioni di questa equazioni, ovvero i valori di t per cui diventa pari a zero, equivalgono ai punti di intersezione della curva stessa con l’asse delle ascisse.
Se il programma ti permette di controllare il valore dovresti trovare il valore di cui abbiamo detto.
I punti sono questi … così a occhio mi pare siano giusti:

image

wauuuu addirittura facendo il calcolo a mente riesci ad individuare i punti corretti :scream: :scream:

ho creato una retta sull’ascisse e intersecato con la curva della formula
i valori del risultato sono questi: C=(0.39, 0) e D=(7.61, 0)

che ne dici sono giusti?

Be diciamo che sono loro, arrotondati a due soli decimali però … riesci a visualizzare qualche decimale in più?
Dovrebbero essere:

0,3944487245360107068807787325295
7,6055512754639892931192212674705

… più che altro per capire la precisione di Geogebra …