Punti estremi nella curva originaria

nella foto sopra postata, lo script in Py mi torna i punti estremi, riferiti ai cambiamenti della coordinata Y

der_crv_org2.gh (9,8 KB)

ma l’intento era quello di fare la stessa cosa ma per i cambiamenti di direzione della curva originaria,
mi spiego meglio: se la direzione/derivata della curva cambia dal salire/scendere indicare il punto di cambio.

SE
ho ben capito: tu vuoi i massimi e minimi locali della curva?
Gradiente zero della derivata. Approssimazione non basta?
Ma è SICURO come le tasse che ho capito male… :rofl:

1 Mi Piace

ciao Giuseppe e grazie, anzi credo che hai colto in pienamente nel segno :+1:
nel primo esempio codice Py avevo estratto la derivata ma mi torna un’altro valore

l’intento sarebbe quello di capire quando la curva cambia direzione come spiega il video sopra linkato

nel video postato sopra, sono andato a controllare la tangenza ed ho verificato,
che nel cambiamento dell’oscillazione della stessa non combacia con i punti H/L

ps ho replicato la def della tua foto, ma mi manca l’espressione nell’output della Y . . . . (abs?)

Bravo: Abs(x) dove per “X” non si intende la coordinata ma il valore di una generica variabile “x”
Essendo una campionatura con N punti lo slider ti serve per intercettare i punti che differiscono di un tot da pendenza 0
derivata.gh (7,6 KB)

Giuseppe si vede che stamani l’arteria che porta al cervello era meno occlusa ahahahah :rofl: :rofl:

stavo facendo delle prove, se con la tua def si evitasse un problema discusso in un 3d di qualche girono fa:
nella foto postata il punto indicato nel cerchio giallo non dovrebbe esserci, per lo meno in Rhino lo Snap
Quad non lo aggancia. essendo che con la tua def si poteva regolare valore/tolleranza ho fatto il confronto.
in questo caso riporta tutti i punti come anche il metodo ExtremePatameters, solo che se abbasso di un’altro valore, non scompare il punto indicato nel cerchio ma quello opposto in alto a Dx (ci ho provato)

(comunque tornando a questa domanda e lasciando stare questa breve parentesi che riguardava l’altro 3d)

nel codice Py che ho postato all’inizio del 3d come hai detto indica i punti estremi H/L (dell’angolo derivata)
mentre a me servirebbe sapere quando/come cambia la direzione della curva stessa

(posto una foto già postata in un’altra discussione per spiegare meglio lo scopo)

fiore

dove ho messo i 4 punti rossi, stanno ad indicare i punti che mi interesserebbe recuperare
lo scopo sarebbe quello di sapere il punto di quando la direzione ricomincia a salire dopo essere scesa
(i punti indicati sono continui non dovrebbero essere discontinui come gli spigoli tra un petalo e l’altro)

nel codice postato all’inizio ho un doppio confronto ad ogni cambiamento,
ma posso impostarlo per indicarmi soltando quando il valore torna a crescere.

ps ovviamente per lo meno questo ragionamento nella mia testa dovrebbe funzionare. . . .
con la derivata indicata nella prima foto funziona, ora non so se e come farlo anche per la curva :thinking: :thinking:
(nel secondo video che ho postato l’estremo della curvatura non combacia con il cambio oscillatorio)

Scusa Salvio, sai che di queste cose non ci capisco nulla, ma se stai cercando (mi pare) i punti con tangente orizzontale, quello nel cerchio giallo credo ci debba stare, con buona pace degli osnap di Rhino.
O no? :thinking:

Usando la stessa definizione, prendendo l’uscita X del componente “Deconstruct” non trovi i punti con tangente verticale?
Certo per estrarre solo quelli che indichi nell’immagine penso serva applicare qualche “trucchetto” geometrico che, temo, sia legato alla particolare forma della curva - quindi senza validità generale.
Su quest’ultimo punto spero però di essere stupito dagli esperti di GH. :smiley:

image

Scusa Salvio, da dove proviene quella def, e in particolare il componente Python ? :slight_smile:

Mi sembra che per quanti punti si prendano in considerazione non è possibile trovare una tangente perfettamente orizzontale o verticale come si vorrebbe.


Dal punto di vista pratico la mia idea è quella di dividere la curva in vari segmenti e su questi trovare le tangenti.
quad points h.gh (15,8 KB)

2 Mi Piace

in effetti Leopoldo, nel mio piccolo, questo problema l’ho sto riscontrando in ogni tentativo di verifica,
però ovviamente non posso essere sicuro delle mie prove se non vengono confermate da chi può :+1:

quindi dici di usare questo metodo proprio per trovare i punti Quad?
l’altra volta quando hai trovato il bug usando questo metodo, gli spigoli dei rettangoli combaciavano con i cv,
questa volta invece dici di dividere la curva, e creare i rettangli usando i punti sulla curva. . . .
l’idea dalla foto sembra fattibile, ma non’é che anche in questo caso, come hai accennato prima,
non vi è il vincolo di quanti punti bisogna poi dividere la curva? se sono pochi funziona ugualmente?

voi esperti sicuramente potete fare congetture molto più precise delle mie “spesse” stravaganti fantasie :wink:

eeee Fabio, infatti a questo punto, dopo aver letto la spiegazione di Leopoldo e provato con la sua def:

in effetti sembra che la def di Leopoldo riporti lo stesso risultato del metodo ExtremeParameters
quindi come ho già detto anch’io usando le derivate non trovo riscontri precisi come dovrebbero essere.

per la seconda domanda, quella dell’uscita X si confermo quanto dici, e confermo ci vorrebbe un trucchetto,
ma come hai sottolineato bisognerebbe poi ogni volta adattare il trucchetto ad ogni singolo caso/curva
per questo ho pensato sin da l’inizio che non sia una strada percorribile per lo meno per come la penso
infatti la mia soluzione era quella di intercettare la variazione di curvatura appunto come ho già spiegato
(se fattibile nei limiti del possibile ovviamente) con la derivata il mio script funziona, se si potesse creare una derivata sulla variazione di curvatura e no utilizzando l’angolazione con *, forse sarebbe l’ideale.

ciao Emilio,
la def l’ho “ri”-fatta partendo dagli esempi come quelle postate nei giorni scorsi da voi esperti sul forum,
ovviamente poi lo script Py l’ho fatta io da 0 ero partito per verificare una cosa poi l’ho implementata. . . .
(trovato qualche errore?)

Dipende da cosa dovrebbe trovare … :grinning_face_with_smiling_eyes:
A me sembra che trovi i punti sulla curva a tangente verticale piu’ i punti in cui la curva cambia direzione di curvatura (prima curva a destra, dopo a sinistra o viceversa).

Se e’ quello che cercavi lo script va bene.
Sempre tenendo conto che non troviamo i punti esattamente, ma con una certa approssimazione …
diciamo che troviamo le zone. :wink:

Vero: per questo dal principio ho chiesto se bastasse approssimazione o meno. Quel famoso: “intorno piccolo a piacere…” :slight_smile:

2 Mi Piace

Una volta identificati i punti in maniera approssimativa si potrebbe usare un algoritmo di affinazione.

1 Mi Piace

Si’, oppure si potrebbe usare l’ormai famoso metodo dell’intersezione, quello che (secondo me giustamente) usa spesso Riccardo.
Costruisci una curva con i valori in questione (in questo caso la direzione della tangente) e poi intersechi con una retta rappresentante il valore cercato (qui potremmo usare inclinazione orizzontale o verticale).
L’interpolazione dati i punti e la ricerca dell’intersezione la fa GH/Rhino.
E ottieni la massima precisione possibile, dato il numero di punti per l’approssimazione.

Bella anche la soluzione di Leopoldo, anche quella sfrutta gli algoritmi di Rhino per ottenere la precisione desiderata.

Hehe … quella e’ la teoria.
La pratica limita il … piacere alle possibilita’ dei floating point a 64 bit. :wink: :grinning:

2 Mi Piace

i 3 punti in Rhino sono i Quad sulla curva, poi ci sono i 2 punti estremi nella derivata che combaciano con i 2 punti sulla curva che si trovano circa a metà tra i 3 punti Quad della curva (non’é il risultato immaginato)

se si intende tipo il risultato di questa foto con i 3 punti Quad usando la tolleranza si questo era fattibile,
ma il problema come dicevo come fai poi a filtrare il solo punto in cui la curva rientra verso l’intero?
ovviamente avendo curve sia aperte che chiuse e con ondulazioni diverse, trovare un soluzione generica?

ps che bisogna lavorare con le approssimazioni questo ormai credo di averlo capito, quello che
mi confonde un po, e quando faccio un confronto tipo tra Rh e Gh ed i risultati sono diversi :thinking: :thinking:

pps tanto per essere chiaro, l’intento iniziale della mia def era che ad ogni picco minimo della
derivata, corrispondesse al punto Quad sulla curva con la direzione che rientra verso l’interno.
EDIT:
mi correggo, il picco minimo della derivata corrispondesse al picco minimo sulla curva con la direzione verso l’interno, e questo non necessariamente potrebbe corrispondere ad un qualsiasi Quad giusto?

Nella definizione quella che chiami derivata e’ l’angolo (tra zero e 180 gradi) tra tangente alla curva e asse Y.

Cosi’ com’e’ lo script cerca minimi e massimi di quell’angolo (circa).
Cosi’ facendo trova anche, ma non solo, i punti della curva a tangente verticale.

Se cerchi i minimi della curva, cioe’ i punti a tangente orizzontale in cui la Y prima scende e poi risale, devi usare l’angolo con l’asse X e cercare i punti in cui l’angolo diventa zero o 180 gradi.
Ma troverai anche i massimi, cioe’ quelli in cui prima sale e poi scende.

Secondo me, se parli di un punto sulla curva in cui la Y diventa (localmente) minima, allora e’ senz’altro un Quad, che Rhino lo trovi o meno.

Pero’ se lo scopo e’ trovare i punti rossi nell’immagine postata sopra …

… allora la cosa mi sembra piu’ complessa.
Li’ ci sono sia punti con tangente verticale che orizzontale.
E non saprei come separarli dagli altri punti di Quad …
Come ha gia’ detto Fabio, serve una logica per individuare quei punti.

Non servono molti punti o, nel caso specifico, segmenti.
Come si vede nell’immagine basta selezionare i punti/vettori che soddisfano i requisiti richiesti.

2 Mi Piace

Fabio che ne pensi di questa di questa def? come ragionamento per la precisione della zona è valida?

der_crv_org7.gh (12,4 KB)