Comando Curvatura

immagine

utilizzando il comando Curvatura in Rhino mi compaiono dei punti “bianchi/neri”
sarebbe possibile replicare la stessa cosa in Gh?

Scopo?

Ciao Salvio, sono i punti di minima e massima curvatura.
Non conosco Gh, il comando non ha delle uscite per questi punti?

Edit: ho curiosato, il comando non fornisce i punti, per quello che ci posso capire io. :smiling_face:
No penso sia un problema per te estrarre i raggi dei cerchi osculatori e trovare quello massimo e quello minimo, dovrebbero essere i punti che cerchi.
Occhio che la curvatura massima si ha con il cerchio di raggio minimo e viceversa.
Dove il cerchio passa da una parte all’altra della curva si ha curvatura nulla (il cerchio osculatore ha raggio infinito).

1 Mi Piace

grazie per le risposte.

replicare il comando Curvatura.


questa non mi è tanto chiara, cosa intendi con: passa da una parte all’altra?

ho cercato anch’io nella guida e avevo letto che recupera i "punti bianchi " con curvatura max
(“punti neri” con curvatura minima non restituisce nessun cerchio)

ma credo che ci siano anche altre caratteristiche da tenere in considerazione, se ho capito il funzionamento del comando, tiene presente delle variazione di curvatura e segna la circonferenza minima tra due grandi?
(in teoria dovrei recuperare tutte le circonferenze e selezionare la più piccola tra le due più grandi. . .)

ps magari potrei dare un’occhiata di scrivere un codice Py in Gh se viene fatto tutto dal metodo curvature

comunque bisogna capire prima il comando Curvatura come analizza la curva

facendo delle prove con i componenti Evaluate/Curvature/Divide
mi ritrovo comunque con risultati diversi da Curvatura in Rhino

edit: preciso che ho impostato anche la tolleranza a 0.1 in Rhino

ps
ma i due componenti Curvature e Evaluate dividendo il dominio in un range di 10 valori,
come mai non danno lo stesso risultato del componente DivideCrv settato a 10 sezioni?

Consideriamo la curva che hai postato inizialmente.
Nella parte a destra del punto nero, la concavità è rivolta verso l’alto.
Nella parte a sinistra del punto nero, la concavità è rivolta verso il basso.
Questo vuole dire che nel punto nero la curvatura si deve annullare.
Il punto in cui si annulla è chiamato punto di flesso, lì la curvatura è nulla, il cerchio osculatore ha raggio infinito, la curva è “piatta”.
Fai una prova al volo con GH.
Usa il componente Curvature e controlla con un pannello i risultati.

Quello che indicano i punti è spiegato bene nell’help del comando.
Il concetto è che la curvatura è misurabile come l’inverso del raggio del cerchio osculatore in un determinato punto.
Per un tratto piano il cerchio osculatore ha raggio infinito e, di conseguenza, la curvatura è nulla … cosa che si comprende intuitivamente.
Nei punti di flesso, quindi, la curvatura è nulla.
Di norma si associa la curvatura nulla alla derivata seconda nulla, cosa non proprio corretta.
E qui vorrei approfittare della tua abilità nella programmazione di GH … se sei d’accordo ovvio.
Traccia una curva (_Curve) con grado almeno tre e impostala come “amica delle SubD” … da R7 in poi è possibile.
Come noto, Rhino inserisce due punti di controllo particolari che sono visibili ma non gestibili dall’utente.
I due punti sono posizionati sulla congiungente i due primi punti di controllo gestibili, in modo che il segmento tra i due sia diviso in un rapporto uno a due.
Questa configurazione pone la curva nella condizione definita “naturale”.
Importala i GH e usa i componenti Curvature e Derivative, per quest’ultimo imposta il calcolo della derivata seconda.
Verifica i valori della curvatura e della derivata seconda negli estremi della curva.
Credo dovresti trovare valori nulli.
Ora chiedi a Rhino di trasformare la curva in modo che non sia più amica delle subd.
La forma non cambia ovviamente, ma i due punti di controllo di cui detto, ora sono normalmente gestibili.
Concentriamoci solo su un lato della curva, per l’altro vale lo stesso.
Sposta il punto di controllo prima non gestibile lungo la congiungente i primi due punti di controllo gestibili, dove vuoi e ricontrolla con Gh
Dovresti trovare la curvatura nulla ma non nulla la derivata seconda.
Se questo accade, direi che dovremo cominciare a mettere in dubbio l’associazione “derivata seconda nulla” = “curvatura nulla”.
In teoria infatti, la curvatura, nel caso in cui la nostra curva fosse espressa dal grafico della funzione f(x), sarebbe k=f’‘(x)/(1+f’(x)^2)^3/2.
Tra le altre cose, questa formula, ci dice una cosa interessante che abbiamo usato nelle nostre considerazioni: il segno della derivata seconda è uguale al segno della curvatura … detto così non sembra molto ma ci permette di stabilire la concavità o la convessità della curva.

Occorre capire di che dominio parliamo.
Il dominio parametrico non c’entra molto con quello geometrico.
Almeno credo. :thinking:

spero sia ciò che intendevi:


poi lo ri-convertita a noncompatibilesubd, ma spostando i 2 punti che prima erano bloccati
mi cambia i valori della derivata “2”

Ciao Fabio

( scusa se tompo le scatole a te invece di cercare info per conto mio. :blush: )

Se non sbaglio questo significa che la derivata prima e’ costante.
… E per curve parametriche la derivata prima geometricamente cos’e’ ? :slight_smile:
Mi sembra sia un vettore tangente alla curva …o no ? :confused:
Come mai quel vettore (se e’ lui) non varia con curvatura non nulla ?

Mi sa che dico cavolate … :blush: :confused: :smile:

Ciao Salvio, sai che io e GH non andiamo particolarmente d’accordo. :smiling_face:
Se non vedo i nomi dei componenti …
Intendo una cosa del genere:

la curva è Subd Friendly, come vedi curvatura e derivata seconda sono nulle agli estremi.

Qui invece la stessa curva non Subd Friendly dove ho spostato i cv di cui si è detto.

Come vedi la curvatura è sempre nulla agli estremi, ma non la derivata seconda.

In generale, per la curva cubica che stiamo trattando, ma non solo, il fatto di avere tre cv allineati garantisce che la curvatura sia nulla agli estremi, indipendentemente dalla regola 1/3 2/3.
Credo che anche una curva lineare, quindi con curvatura nulla, possa avere derivata seconda non nulla.

1 Mi Piace

Ciao Emy, invertiamo l’affermazione. :rofl:

… dovresti trovare la curvatura nulla ma non la derivata seconda …

Siccome non ti scuso :rofl: chiedo il tuo supporto.
Secondo te, è corretto vedere la derivata seconda come composta da due parti, ovvero una parte che ci dà la misura di quanto la curva sta “girando” (la curvatura) e una parte che ci dice quanto la parametrizzazione sta accelerando/decelerando nella direzione tangente in quel punto?
O dico cavolate? :smiling_face:

1 Mi Piace

Visto che ho dovuto accendere l’oracolo (Gh lo chiamo scherzosamente così), usiamolo:

Curva lineare con curvatura nulla e derivata seconda non nulla.

1 Mi Piace

Eh … questo mi sa che faro’ fatica a capirlo (sempre se … )
:confused:

Quindi la derivata prima varia come modulo, anche se non come direzione, OK.
Per cui la derivata seconda, in questo caso, mi sembra sia parallela alla derivata prima.

In generale credo di aver capito e per me lo riassumo cosi’:
La derivata seconda con curvatura nulla puo’ essere non nulla e parallela alla derivata prima.

Anche se nel tuo esempio c’e’ una strana componente Y a t=1 …
Ma quando andiamo a 10e-12 comincio a fidarmi poco. :wink: :confused:

Ho fatto la prova per conto mio e … la capisco meglio … :wink: :blush:

(Mi vengono valori piu’ “umani” … )
Eh … Rhino 6 si’ che e’ affidabile …
:wink: :smile: :smile:

Grazie mille per spiegazione ed esempio !
:grinning:

EDIT:

Infatti e’ quello che dicevi tu prima … :blush:

1 Mi Piace

Molto meglio come esempio.
Più che Rhino 6 direi che sei tu affidabile. :heart_eyes:

ok Fabio, non avevo inteso che la curva doveva essere lineare :+1:

una cosa, quale differenza intendi con i due termini parametrico e geometrico
fin’ora ho sempre sentito dominio parametrico, per quello geometrico intendi la lunghezza della curva?

Ciao Salvio.
Sì, intendo la lunghezza della curva.
La stessa curva può essere descritta con un dominio parametrico arbitrario, ma la sua lunghezza rimane la stessa.

Edit: sai riuscito ad ottenere il risultato che volevi?

 private void RunScript(Curve C, ref object max, ref object min)
  {
    max = C.MaxCurvaturePoints();
    min = C.InflectionPoints();
  }
3 Mi Piace

scusate il ratiardo nel rispondere :pray:


ok per un attimo avevo pensato che oltre alla lunghezza metrica e parametrica, ne esistessero altre :sweat_smile:


ciao Riccardo era proprio quello che volevo ottenere funziona perfettamente grazie :+1:


non comprendo come mai questi tipi di analisi bisogna avere la necessità di scrivere un codice
credo che lo scopo principale di Gh dovrebbe essere proprio quello di evitare ciò e negli
strumenti di analisi curva come questo dovrebbe esserci un componente preposto


avevo fatto delle prove per capire il funzionamento del comando Curvatura in Rhino,
ma unica cosa che ho verificato e che i punti trovati con Curvatura non li posso replicare
ne suddividendo la curva con la lunghezza metrica e nemmeno con quella parametrica. . .

Credo che semplicemente le funzioni di Rhino sono tantissime.
Ri-saturare i menu di Grasshopper con n-mila componenti solo per “averli tutti” è un po insensato.
I dev probabilmente hanno optato per i più comuni e tralasciato quelli più specifici che però vengono usati raramente.

Grasshopper così com’è è molto inuitivo e pulito, le sezioni/tab non sono troppo piene… e c’è tutto quello che normalmente serve.

Quando serve fare quel passetto in più, c’è lo scripting.

3 Mi Piace

si condivido quello che dici, ma personalmente solo fino ad un certo punto

proprio quello che intendevo, mancano quelle “specifiche” e sopratutto proprio per le curve
si parla sempre che in Rhino la cosa importante sono delle buone curve
e in questo caso Gh permette di analizzare n curve tutte insieme
ma a differenza di Rhino mi limita nei componenti per tale scopo

non era una lamentela, ma personalmente non posso non ricordare i post su come trovare i punti Quad
in Gh per fare tutte queste cose bisogna avere una conoscenza profonda sia in Rh che Gh come anche negli script *e non solo, altrimenti andarsi a costruire una derivata come facessi per i Quad non’è da tutti.

*e non solo:
per la Curvatura in Rh che mi da i punti dove la curva inizia a dimunire in entrambe direzione
ora ovviamente si è risolto il tutto tramite script e il metodo MaxCurvaturePoints
se ipoteticamente, si sarebbe dovuto replicarlo utilizzando gli strumenti in Gh
ho provato dividendo la curva per n punti
ho provato dividendo il dominio per n
ma in entrambi i casi i punti trovati con corrispondevano ai punti riscontrati nel comando in Rh

sembra che vengano aggiunti componenti in Gh per fare tante bellissime cose nel costruire/assemblare
se però serve fare una cosa che in Rhino è una delle prime che ti spiegano agli inizi, diventa complicato.