Combaciare dominio curve

Cercavo di “aiutare” la funzione di intersezione fornendo casi più semplici e circoscritti… ma non ha funzionato…

È più o meno quello che stiamo facendo.

Mi è venuto in mente che avevo fatto una cosa simile anche sul forum internazionale:

questa ^ è una definizione che trova tutte le coppie di punti in una curva che creano una linea perpendicolare alla curva in entrambe le estremità.
In questo caso ho usato un grafico di derivata toroidale (supponendo sempre che la curva sia chiusa)… è termine che mi invento io, non so se in matematica ci sia un modo più corretto per chiamarlo.
Vedi anche qua:


… e se poi metti i risultati su un piano cartesiano e interpoli puoi ricavare con precisione la “cuspide”, dove si trova il risultato. O fare una intersezione con quel grafico.
Puoi anche usare il risultato per ri-fare una “forza bruta” più fitta in quella zona, e ottenere un secondo grafico molto più preciso.


Ha senso!
Ma rimango dell’idea che stiamo guardando al problema dal buco della serratura… ma la porta è aperta (per Salvio).
Che diamine stiamo facendo qua? XDDD

1 Mi Piace

Ci provo … ma era solo un esempio, certamente ci sono diversi modi di procedere …
Schematizzando:

  1. Consideri tutti i possibili angoli di rotazione della curva:

… E per OGNI rotazione …
2) Consideri tutti i possibili spostamenti relativi tra le 2 curve:

Non serve a cercare la posizione delle curve, se e’ quello che intendi,
Serve solo a ricavare gli overlap una volta che le 2 curve sono in posizione.
E’ semplicemente un sostituto del metodo RhinoCommon che non riusciamo a far funzionare con tolleranze alte.

OK adesso capisco il tuo significato di brutale ahahahah per la serie a mali estremi estremi rimedi :rofl: :rofl:

quindi è un metodo simile a quello che avevo pensato di fare prima di postare la domanda sul forum :wink:
in pratica una volta specchiata la curva partendo dal centroide, dove intorno ad esso mi demilito un’area
con la quale la curva specchiata fa una serie di spostamenti in direzione X e Y insieme a delle rotazioni.

appunto perché lo ritenevo anch’io “molto ma molto brutale” ho postato la domanda :joy: :joy:
e vabbè se sono queste le strade da percorrere vedo cosa riesco ad ottenere alla meglio :+1:

grazie ancora!

adesso forse mi è un po più chiaro, di cosa non vi era chiaro (scusate il gioco di parole)

in altri forum dove si parla di argomenti scolastici, gli studenti pubblicano domande/quesiti chiedendo
delucidazioni su un determinato argomento specifico, che hanno studiato a scuola con il professore

capisco la situazione, ma ti assicuro che cerco sempre di essere il più preciso possibile. nel passato mi si diceva che con la domanda che facevo era talmente lunga che non si capiva. quindi adesso sto cercando di essere più coinciso e allegando immagini invece di mille parole per aiutare a non far travisare a chi risponde.

di sicuro se sapevo che ciò su cui si doveva lavora era la “Distanza di Hausdorff” l’avrei detto subito. . . .
ps comunque sempre complimenti per i tuoi post, solo a vederli in esecuzioni mi viene il mal di testa :+1:

Io dico solo che se ci spiegassi direttamente qual’è il tuo obiettivo finale sarebbe molto meglio.
Questa curva la userai per farci qualcosa, no?
Non dirci il “come”, ma il “cosa”.
Qual’è lo scopo finale nel mondo vero? Contesto.

Non sai quante volte nel forum internazionale capita che utenti chiedano come ottenere un risultato accanendosi con un metodo, poi quando spiegano il background salta fuori una risposta che con tutt’altro metodo risolve tutto con un quarto dei componenti.

1 Mi Piace

Mah … a me sembra solo la solita procedura quando si cerca di fare uno script … :slight_smile:
Quello che non trovi gia’ pronto provi a fartelo.
E suppongo che nella programmazione seria sia ancora ‘peggio’.
:grinning:

1 Mi Piace

Dici che ti bastava sta parola magica???

Bravo Riccardo! :clap: :clap: :clap:

In tuo codice evita di dover operare all’inizio con la curva specchiata.
… rimane il problema di calcolare il dominio di overlap …

determinato molto bene da Emilio! :+1: da eseguirsi per entrambe le curve.

1 Mi Piace

Ciao Sergio

… Non risultano le stesse zone se offsetto l’altra curva ? :confused:

Dipende da come si quantifica la lunghezza di overlap …
Se rispetto a punto di tangenza la curva originaria ha overlap 10 a destra e 2 a sinistra,
la curva specchiata avrà overlap 2 a destra e 10 a sinistra. L’overlap è 12 oppure 20?

1 Mi Piace

Non mi convinci (almeno per ora … :slight_smile: )

Presumendo che parliamo di lunghezze geometriche e non parametriche …
E parlando del caso generale, indipendentemente da eventuali punti di tangenza…

Se comunque abbiamo un punto di tangenza e offsettando la curva A otteniamo un overlap a destra di 10, significa che in quei 10 (mm?) la distanza tra le curve e’ minore della tolleranza.
Se offsetto la curva B, a destra trovero’ la stessa zona in cui la distanza tra le curve e’ minore della tolleranza.

Offsettare la curva e’ solo un modo per ricavare la zona in cui la distanza e’ inferiore a un certo valore.
La zona resta quella, qualunque modo utilizziamo per cercarla.

… Deve esserci qualche equivoco, mi sa che non capisco di cosa stai parlando … :confused:

Per come ho visto comportarsi gli overlap di rhinocommon, un overlap non restituisce un “tween”, o una curva media tra le due fornite.
Quindi si tratta di porzioni di curva di una delle due curve…

(tutte supposizioni eh… XD)

Caso estremo:
2021-10-15 18_28_38-Untitled 001.3dm (8 MB) - Rhino 7 Commerciale
t1 è il parametro sulla curva blu dove finisce l’overlap in tolleranza, secondo la curva blu
t2 è il parametro sulla curva blu dove finisce l’overlap in tolleranza, secondo la curva rossa

Si può considerare overlap “completo” come il maggiore tra t1 e t2, e “minimo” come il minore tra t1 e t2.
Oppure si può fare una media tra t1 e t2, o calcolare un punto medio e ri-proiettarlo su entrambe le curve.
Non è scontato…

Ma fare una valutazione di overlap in tolleranza partendo da una sola delle due curve sarebbe incompleto, asimmetrico.

Poi chiaro che se la tolleranza è piccolissima in rapporto al raggio di curvatura la precisione è ottima lo stesso, e forse vale la pena dimezzare i calcoli e farla semplice, partendo da solo una delle due.

@Sergio_Alessi … era quello che intendevi? Ci sono andato vicino? :rofl:

Ciao Riccardo

Si’, vero.
RhinoCommon retituisce i punti sulle 2 curve di partenza.

E ovviamente sono d’accordo che, a seconda di come ricaviamo il punto estremo dell’overlap,
le lunghezze delle subcurve risultanti possono variare tra la prima e la seconda curva.

E’ proprio questo il motivo per cui nell’immagine postata per Salvio avevo aggiunto “circa” … :wink:

Pensavo di trascurare quell’errore (risparmiando un po’ di tempo)… Ma effettivamente bisognerebbe sapere quanto vale la tolleranza prima di decidere cosa trascurare e cosa no …
E quello non lo so.
OK, capito.
Grazie per la spiegazione ! :slight_smile:

Ma … non si cercava il massimo overlap con la curva specchiata?
Se non c’è tangenza (e qualcosa in più …) che overlap c’è?

Si.

Se non c’è overlap effettivo, l’overlap restituito dal metodo intersezione sarà l’ultimo
sottodominio di una delle curve che contiene il punto di intersezione … forse :upside_down_face:

Si’, ma direi che questo non implica necessariamente punti di tangenza … forse …(Vedi sotto)
La tangenza l’avevo cercata perche’ non avevo capito il problema. :roll_eyes:
Salvio cercava degli overlap, non ha mai parlato di tangenza (a quanto ricordo).
Io invece (guardando l’immagine postata da Salvio) pensavo volesse specchiare ‘mezza’ curva mantenendo la tangenza.

Se guardi il disegnino che ho postato con gli offset, c’e’ una intersezione, ma non in tangenza.
Li’ stavo parlando della ricerca degli overlap tra 2 curve con tolleranza a piacere, in generale.
Le curve potrebbero anche non toccarsi per niente, ma se si avvicinano a distanza inferiore alla tolleranza, per me c’e’ overlap … poi magari e’ solo una mia idea. :confused:

Comunque Riccardo mi ha gia’ spiegato che il problema era che i punti estremi della subcurva dipendono dalla procedura utilizzata (offsettare una o l’altra curva).
Su questo non discuto. :slight_smile:

Volendo tagliar la testa al toro potremmo offsettare entrambe le curve con mezza tolleranza,
e poi proiettare il punto di intersezione sulle curve…
Anche se la distanza tra i punti ottenuti sulle 2 curve puo’ essere un po’ diversa dal valore teorico (tolleranza).

Credo che si dovrebbe prima definire bene cosa sia l’overlap.
Se lo consideri come insieme dei punti di una curva per cui la distanza minima dall’altra curva e’ minore della tolleranza, allora mi sembra che ci sia sempre un overlap se le curve si avvicinano abbastanza o si incrociano.
Poi certo ai fini pratici un overlap lungo 10^-6 mm potremmo considerarlo un punto … credo. :confused:

Oppure potremmo richiedere anche una condizione di parallelismo (forse e’ quello di cui parlavi tu).
Diciamo che nella zona di overlap nei punti ‘vicini’ le rispettive curve devono avere la stessa direzione, a meno di una tolleranza angolare.
E in questo caso il sistema delle curve di offset lo buttiamo alle ortiche. :grinning:

Miiiii … ‘sta cosa si complica sempre piu’, meglio dormirci sopra. :wink:

1 Mi Piace

Interessante.
Fare 2 offset però pesa comunque il doppio… magari facciamo due “offset loose”?
Come compromesso mi piace.

… io non l’avevo neanche mai immaginato. Si potrebbe ragionare anche per tolleranza angolare (oltre alla tolleranza di distanza, sempre necessaria), è vero…

È bello parlar di ste cose, ma mi piacerebbe di più sapere perché fare queste cose.

OK, andata ! :wink:

Si’, non viene spontaneo pensare alla tolleranza angolare …
Ma te ne accorgi quando disegnando con Rhino nasce qualche problema, magari proprio con gli offset …
E indagando noti il fatto che non hai cambiato la tolleranza angolare di Rhino, che di default fa paura :wink: … forse un grado o una cosa simile …
Allora la tolleranza angolare comincia a restarti nella testa, per cosi’ dire … :confused:
:grinning_face_with_smiling_eyes:
( Parlo per me, ovviamente … :slight_smile: )

Ti auguro di riuscirci. :slight_smile:
Io in questi casi, in passato, non sono mai riuscito a cavare un ragno dal buco …
:wink:

scusate l’assenza ma mi sono rituffato un pochino in Python dopo due anni, un dramma :scream:

che non esistono paroline magiche lo so, ma se poteva servire a chiarire prima perché no

ovviamente avendo già la curva digitalizzata/estratta in Rhino, sarebbe un peccato doverla stampare
e ripetere ogni volta le operazioni manualmete da fare tipo curvilinee spiegato nel post precedente
a cosa serve questo tipo di operazioni, è un metodo di preparazione come tanti altri diversi
per individuare e tracciare altri punti di riferimento. quindi in pratica non’é fine a se stesso
capisco e concordo quello che dici, di poter fare la stessa cosa usando un’altra strada
in questo caso però si è obbligati al fatto che bisogna replicare il metodo in questione
anche per avere un successivo confronto fra il risultato manuale e quello col CAD

import rhinoscriptsyntax as rs

a=CrvIn
b=rs.MirrorObject(a,(0,0,0),(0,1,0),True)
c=rs.CurveAreaCentroid(b)[0]
d=rs.VectorCreate((c[0],c[1],c[2]),c)

e=[]
for i in range(10):
    e.append(rs.CopyObject(b,rs.VectorCreate((c[0]+i/10,c[1],c[2]),c)))
    e.append(rs.CopyObject(b,rs.VectorCreate((c[0],c[1]+i/10,c[2]),c)))
    e.append(rs.CopyObject(b,rs.VectorCreate((c[0],c[1]-i/10,c[2]),c)))

f=[]
for j in e:
    for i in range(10):
        f.append(rs.RotateObject(j,rs.CurveAreaCentroid(j)[0],(i/10-10), None,True))

CrvOut=f

avevo prima realizzato una def coi componenti, ma poi mi sono imbattuto col problema
che le intersezioni le ottenevo tramite il componente di Riccardo e quindi non potevo
gestire al momento dell’intersezione quale curva avesse ottenuto i domini SubCrv
quindi in tutto questo ho tentato di buttare giù qualche riga di codice Python
ma poi alla fine mi ero dimenticato che il codice di Riccardo è fatto in C#
e usando rhinoscriptsyntax a come sembra non’é proprio presente
(senza contare il fatto che tra la def e py il risultato è diverso :thinking:)

ps una cosa non mi è chiara con l’ultimo metodo menzionato da Emilio (quello con gli offset)
la curva specchiata mi sembra un pò troppo inclinata verso la curva originaria (verso Sx)
in questo caso le parti inferiori non si intersecheranno mai, andando a vanificare lo scopo
vi prego ditemi che per lo meno questo era chiaro, il fatto che le intersezioni sup ed inf
debbono essere fatte entrambe con un unica curva specchiata con quella originaria. . . .

Quello e’ solo un tentativo di ricerca dell’overlap con tolleranza, in generale.
La posizione delle curve e’ casuale. Non vuole essere la soluzione al tuo problema.
E comunque non stavamo parlando di ricerca per tentativi ? :grinning_face_with_smiling_eyes:

Se parli dello script CCX, abbiamo gia’ visto che il metodo di RhinoCommon non serve per gli overlap con tolleranza a piacere. Quindi temo che per il tuo problema non sia adatto, sempre ammesso che la tolleranza sia ‘grandina’ … non ci hai ancora detto quanto vale, almeno approssimativamente.

Quale def e quale py ?

certamente, era solo per essere sicuro che i tentativi seguissero la direzione giusta :+1:

io nel discorso teorico/tecnico non ho proliferato parola, non potendo entrare nel merito a parte seguirlo,
ritornando alla domanda, nel video che avevo postato le intersezioni le si ottenevano tramite il CCX
credo che quel risultato andava bene, ora se ci vuole un pò di tolleranza non credo sia un problema :wink:

codice che ho postato, prima avevo fatto una definizione, avendo gli stessi valori per la rotazione
ma non combaciano come risultati tra di loro. (non voglio mettere altra carne a cuocere)

EDIT:
ma con Python non’é possibile usare intersect?