Polilinee che evitano ostacoli

Avrei necessità di congiungere tramite polilinea due punti tra i quali può esserci un ostacolo. La congiungente deve essere quella più breve possibile. Ad esempio. Immaginate una scatola di scarpe aperta superiormente e poggiata su un tavolo, dentro c’è una sferetta e fuori la scatola, sul tavolo ce c’è un’altra. Io devo unire i centri delle sferette tramite una polilinea che può anche toccare il bordo della scatola, ma non deve attraversarla.
Avete qualche idea o conoscete qualche plugin?

Questo caso sembra semplice, dato che il bordo della scatola ha altezza costante.
Disegni la congiungente i centri e poi ‘sollevi’ il punto che interseca la parete fino al bordo superiore …

O non ho capito il problema ?

Ciao Luca.
La mia idea è questa.
Ovviamente si deve fare riferimento a un piano.
ostacolo.gh (22,3 KB)


Hai capito benissimo.

Anche se ho capito … ripensandoci … ho dato la risposta sbagliata, scusa … :blush:

Quanto ti ho detto vale solo se la pareta della scatola e’ perpendicolare alla linea che congiunge le sferette.
Se no la cosa mi pare piu’ complicata …

Provo a cercare il modo … ma non prometto, sorry. :confused:

EDIT:

No, analiticamente non sono capace …
Penso che finirei col fare delle ricerche dicotomiche lungo i 4 lati della scatola …

Interessante, ma quando la sfera è all’interno della scatola non funziona. La polilinea deve “uscire” dall’apertura.

Prima graficamente, poi si vede la parte analitica.
A me viene in mente un fascio di piani che passano per la congiungente e intersecano l’ostacolo. Ci provo..

1 Mi Piace

Forse così?
ostacolo a.gh (16,8 KB)

Ciao Filippo, potrebbe servire un _Project, della congiungente i due punti, sulla superficie delle scatole?
Non dovrebbe essere poi difficile evidenziare i punti di interesse per la spezzata “minima”.
O no? :thinking:

[quote=“Gambler, post:9, topic:6740”]
potrebbe servire un _Project, della congiungente i due punti, sulla superficie delle scatole?
[/quote] Sì certo, ma se la congiungente giace sul medesimo piano della base? Inoltre, l’obiettivo e validare il modello anche in presenza di un semplice ostacolo frapposto e non necessariamente piano. Ma andiamo per gradi.

Intendi che i due punti (sfere) giacciano sullo stesso piano, sul fondo delle scatole?

Si, può capitare.

Project dovrebbe fornire i punti chiave per la spezzata anche in quel caso.

Come? Perché quel cilindro?

Il cilindro l’ho inserito perché mi hai parlato di altri elementi frapposti. :grinning:
Fai come se non ci fosse.

Qui i due punti sono sul fondo della scatola.
Proiettando la congiungente i due punti (sfere) sulle superfici e unendo opportunamente mi pare ci sia tutto per tracciare la spezzata minima.
Non so usare GH, penso servano delle liste dove si prendono i valori massimi in Z delle intersezioni e si ragioni con la distanza dei vari punti dai due punti originali (sfere) per avere l’ordine con cui unire i vertici della spezzata.

Scusa Fabio, intendi proiezione verticale ?
Non so, forse sbaglio … :confused:
Ma non mi sembra che il percorso minimo sia necessariamente rettilineo visto in pianta, anche nel caso debba scavalcare una semplice parete ad altezza costante. :thinking:

O forse non capisco cosa intendi :blush:

1 Mi Piace

Ciao Emilio, sì.

E’ molto probabile che non abbia capito io allora.
Puoi postare un esempio veloce in cui il percorso minimo non sia, in pianta, rettilineo?

Dopo ci provo … :blush: :slightly_smiling_face:

Esempio con parete da scavalcare ad altezza costante, non perpendicolare alla linea sfera-sfera e non equidistante dalle sfere …

Poi se c’entra qualcosa con quanto si diceva … e’ tutta un’altra faccenda. :confused: :wink:

fabio-3.gh (16,5 KB)

Ovviamente bisogna smanettare a mano sugli slider … :blush:

1 Mi Piace


fabio-3 b.gh (18,0 KB)

I due segmenti devono incontrare il bordo superiore formando lo stesso angolo.

Il problema può essere risolto geometricamente pensando ad un foglio di carta con una piega:
la piega è il bordo superiore della parete da scavalcare, le due metà del foglio di carta sono due piani che passano ciascuno per uno dei due punti di inizio/fine.
Segni i due punti sul foglio di carta, raddrizzi il foglio, tracci una linea retta, ri-pieghi il foglio.

In pratica il foglio di carta è lo “spazio curvo” che si piega attorno al bordo superiore della parete, semplifichi lo “spazio curvo” in uno spazio planare, risolvi il problema, e riporti il risultato nello spazio curvo.


Tornando al post iniziale, non ho capito quanto complesso potrebbe diventare il problema, ma se ci sono n ostacoli e la situazione è complessa, io forse procederei con:

  • dare uno spessore minimo ad ogni ostacolo, solido
  • sottrazione booleana solida degli ostacoli al volume massimo percorribile, otteniamo un volume solido dove il percorso può esistere
  • “tetraedrizzazione” del solito ottenuto
  • propagazione iterativa da punto inizio a punto fine , shortest walk
  • trovata così una polilinea grezza del percorso più breve (possibilmente)
  • cleanup finale con algoritmo iterativo (kangaroo) per ottimizzare il percorso mantenendo attiva la collisione con gli ostacoli
2 Mi Piace