ciao a tutti,
quesito di carattere geometrico:
ho 2 rette sghembe; (immaginate due tubi)
devo individuare il segmento lineare che le congiunga sapendo di vincolare l’angolo che si forma tra ciascuna delle due rette e il segmento di congiunzione ad una angolo fisso di 45°
pensavo di cavarmela costruendo i due coni con assi dati dalle due rette di partenza e vincolando l’angolo di apertura dei coni a 45° per poi muoverli con record history e vedere quando la loro intersezione formasse un segmento lineare…
mi correggo, la definizione è corretta ma lascia l’utente a cercare in modo interattivo il segmento visionando in tempo reale gli angoli…
ma la soluzione non è automatica nè facile da rintracciare
ho tolto la parte del piping (che rallenta l’esecuzione della definizione) e sostituito 2 slider per poter muovere in modo immediato il risultato ma così sembra che si debba “cercare” la soluzione per tentativi
non so come si potrebbe inserire un loop ricorsivo della modifica degli slider che si fermi quando la condizione degli angoli è traguardata =45°
linea angolata.gh (17,9 KB)
Questo script fa una sorta di brute-force, da linea A verso linea B (e crea un grafico con loft) e viceversa da linea B a linea A (e un altro grafico), poi interseca i due grafici e trova la soluzione.
Si possono specificare i due angoli, anche diversi da 45°.
Forse funziona pure con curve non lineari, ma non ho provato…
Edit: ad angoli acuti sballa un po, bisogna aumentare la suddivisione iniziale, portatela a 500 anziché 100…
Secondo me, almeno per il caso con semplici linee, si può trovare una soluzione con un calcolo diretto, senza fare brute-force…
uso l’integer per arrotondare i valori, altrimenti l’eguaglianza non funziona per i 45,01 gradi ad esempio. La distanza iniziale setta ogni quanto testare i punti sulle linee, quindi abbassala a tuo rischio e pericolo.
Provala su altre linee anche e se funziona, in realta’ uno script python potrebbe velocizzare notevolmente la cosa e fermarsi quando pesca la prima soluzione utile.
edit: aggiunto alla fine un flatten e remove duplicate lines (per questo serve kangaroo, ma dovrebbe shippare con GH ormai).
Ho ripreso l’idea del cono espressa da Marco.
Muovendo il cono, anche con due rette praticamente perpendicolari si trova facilmente la soluzione.
Chissà se non sia possibile risolverlo con una funzione matematica. join c.gh (15,0 KB)
Interessante che quindi la soluzione si possa raggiungere a prescindere dalla “scala” del problema, tutti i calcoli sono solo di angoli.
Due rette sghembe hanno comunque un piano che risulta parallelo a entrambe.
Si crea quel piano a metà strada tra le due rette, in modo che ci sia una simmetria di rotazione tra le due rette… in questo modo il problema “si dimezza”, ogni successiva costruzione è più semplice (compaiono angoli retti, utili a fare pitagora e trigonometria con cateti comuni…)
… quindi si misurano gli angoli e si procede con solo con quelli, alla fine con un piano in centro al problema opportunamente ruotato si trovano le intersezioni corrette.