Polilinee che evitano ostacoli

Non ho ancora visto le vostre soluzioni, ma faccio una piccola parentesi e vi chiedo:

  1. da una serie di punti tutti complanari, come ricavo la polilinea che ha per vertici tutti i punti tranne quelli che la porterebbero ad avere un angolo interno maggiore di 180°?


In pratica la polilinea a destra da cui posso poi ricavare la superficie?

Vi dico anche perché mi pongo questa domanda: perché pensavo di ragionare con le superfici piuttosto che con le curve, anche se ho ancora le idee confuse su come poter raggiungere lo scopo.


Con un piano solo frapposto ottengo un triangolo, con due piano posso ricavare due triangolo, e unendo i due o più triangoli complanare in un unica figura piana, potrei trovare la polilinea di contorno a cui togliere la congiungente le sferette.

Questo però è ok con più piani paralleli, ma se ho una scatola se cose cambiano un po’. Ma deve esserci un modo per poter trovare una soluzione generale.

Se immaginiamo le due sferette (o punti) , ciascuna dentro una propria scatola aperta (ma potrei ruotare a piacimento la scatola) le cose di complicano.

Io non capisco questo problema.
I punti nella immagine superiore non sono li stessi nella immagine inferiore a sx (quella con “OK”)
“un angolo interno maggiore di 180” … se puoi spiegare questa cosa…
(angoli inferiori di 180 gradi hanno un “verso”, ma superiori di 180 significa essere andati oltre a “una linea retta” … mi spiace, io non capisco)


Circoscriviamo il problema:
Le scatole sono sempre semplicemente rettangolari se viste in pianta XY?
Hanno bordi con altezza costante?
La rotazione di cui parli, è attorno un asse parallelo a Z o intendi anche rotazioni diverse?

scatole.gh (18,1 KB)

Come diceva Emilio, il percorso minimo non è necessariamente rettilineo visto in pianta.


scatole.gh (29,6 KB)
Sempre stesso esempio, ma con soluzione in costruzione geometrica anziché iterativa (kangaroo).
Risultati congruenti.

Spazio curvo:

Un immagine più di tante parole :slight_smile:

PS urca che siete attivi. Sono indietro con i post, portate pazienza.
Ad ogni modo posso aggiungere dei dettagli.

Il post nasce da una esigenza di tipo “acustico”.
In pratica ho necessità di conoscere il percorso minimo tra una sorgente ed una ricevente ignorando al momento, il fatto che il suono si trasmetta attraverso pareti, solai, ecc.
In pratica immaginate di essere a casa, nella vostra stanza, senza porte e di sentire la radio accesa in altra stanza anch’essa senza porte, o da qualsiasi altra stanza. Mi serve conoscere il percorso più breve che il suono può percorrere (detto ancora che non è il solo percorso che l’onda percorre). Ora, non ponete troppi limiti, nel senso che la sorgente potrebbe essere anche esterna, ad un piano diverso dal vostro… o sorgente e ricevente potrebbero essere all’aperto e tra questi potrebbe essere interposto un edificio.
@RiccardoMajewski parlava di ostacoli solidi, shortest walk, kangaroo,.. beh forse si serve tutto ciò. Volevo semplificare il problema, ma potrebbe invece complicarlo e magari esistono strade migliori. Temo anche, però che una soluzione non analitica, ma più aleatoria quale quella su cui si basa Kangaroo possa essere più onerosa in termini computazionali.

Oh porca… ma come hai fatto??


No dico, come hai partorito questa roba? Sono curioso.

Perché quel punto in mezzo ai due ostacoli esiste?
Che cos’è quel punto?

Guarda come funziona il componente “Convex hull”.

1 Mi Piace

Ho messo delle soluzioni che danno lo stesso risultato di kangaroo senza usare kangaroo.
Non mi è ancora chiaro se stai cercando soluzioni che creino un percorso che sia planare o stai veramente cercando il percorso più breve (in tal caso, non sarà planare, come nelle mie soluzioni).

Ma per quanto detto da Emilio non serve più forse.

Il percorso più breve.

Allora scarta subito tutte le soluzioni che ragionano in 2D.


Se il problema non si limita a “due scatole su un piano” , tutti i post sopra ^ sono inutili.
Sarebbe stato utile saperlo subito.

Se googli “3d shortest path” trovi altri che parlano del tuo stesso problema/task.


Questo ^ usa un metodo dove prima si generano tutti i collegamenti possibili (una lista di linee) e poi si cerca il percorso più breve Shortest Walk Gh | Food4Rhino .
Per avere un percorso veramente ottimizzato, secondo me servirà sempre una fase di “rilassamento” o ottimizzazione finale, con qualcosa di iterativo come kangaroo o via c#.
Fare un calcolo diretto “one-shot” che trovi il percorso più breve, lo vedo molto più complesso.

2 Mi Piace

Un altro metodo potrebbe essere quello di fare qualcosa di simile a questo Heat Method - Grasshopper - McNeel Forum

Crei un “lattice” (quel tetraedrizzazione che dicevo sopra) abbastanza denso per riempire tutto il volume di aria (dove il suono può viaggiare).
Parti dal punto di partenza e con un “cotan weighting” iterativamente calcoli e popoli tutti i punti del lattice con i valori di distanza.
(Letteralmente un FEM)
Finita questa fase avrai una “mappa pesata” della distanza di ogni punto del lattice fino alla sorgente.
Partendo dal punto finale puoi percorrere al contrario il lattice usando il concetto di gradiente.

1 Mi Piace

Assolutamente no, perché quelle semplificazioni sono già casi reali che posso usare. Adesso stiamo andando oltre, stiamo cercando l esistenza di una soluzione generale, un approccio valido in tutti i casi.

Quello che intendevo è che, un problema con due variabili puoi risolverlo analiticamente, quando le variabili aumentano a dismisura analiticamente diventa impossibile, è più semplice procedere in modo diverso o con metodi tipo brute-force.

In uno dei miei post sopra ho messo un metodo di calcolo diretto, geometrico, per trovare il shortest path tra due bordi.
Ma quello stesso metodo è impossibile da utilizzare in un contesto con più bordi o con altro di diverso. Assolutamente.

Però boh… questa è solo la mia opinione, non voglio polemizzare.
Le mie conoscenze finiscono qua.

Be’ … il problema lo hai dato tu. :wink:

Subito avevo pensato, sbagliando …

Ci sono due triangoli rettangoli, altezze costanti, quindi i lati orizzontali devono essere piu’ corti possibile …

Dopo … (rimbambimento avanzato … :roll_eyes:) … mi sono detto:

Ma pezzo di cretino, ci sono due radici quadrate di mezzo, quindi salta tutto …

E ho pensato che in certi casi due triangoli piu’ simili come forma, anche se leggermene piu’ ‘lunghi’, potevato dare un percorso piu’ corto.

E, come ha chiesto Fabio, ho imbastito un piccolo esempio, tramite rozza def.

EDIT

Quello che non avevo capito e’ quello che ha notato Riccardo:
I due angoli tra bordo da scavalcare e percorso devono essere uguali …

Ci sono certamente diversi algoritmi sul Web, se cerchi Convex Hull

Ad esempio se ne parla qui:

Ma se i punti sono pochi, ci si puo’ anche divertire a cercare un modo abbastanza semplice, anche se lento … :grinning_face:

Nel caso diccelo …

Ciao Emy, hai ragione!

Ciao Riccardo.
Bella! :heart_eyes:

1 Mi Piace

Eh si che è aperta, molto. Qualsiasi caso è utile, mi capitano praticamente tutti. Quindi se un metodo generale non lo troviamo possiamo vederli caso per caso.
Io stavo iniziando col caso della scatola e con una parete interposta (ma la tua dimostrazione mi hai smontato il modello)… sto caso sta diventando una rottura di scatole e di OO sfere :joy:

1 Mi Piace

Si! Certo! Assolutamente!
Hai più casi esemplari? Mostrali! Carica allegati, fai screenshot!
… dopo 38 post in questo thread… :man_facepalming:
(Simile a quanto accade con altri utenti nel forum inglese: non girate attorno al problema dando le informazioni col contagoccie..)

Fino al post 24 si parlava di scatole, poi è entrata l’info che si tratta di onde sonore che viaggiano nello spazio, stanze e porte.
:see_no_evil_monkey:
Tira fuori tutto subito!

Il thread è cmq interessante, ma se ti fai remore al descrivere quello che è realmente il problema dando tutti i dettagli diventa solo un’inutile sofferenza.

Potresti definire chiaramente di che si tratta?

Be’, per questo caso pare che GH faccia da solo …

:wink: