Logica
Last updated
Last updated
La logica, o più specificatamente, la logica condizionale, consente di specificare un'azione o un gruppo di azioni in base ad un test. Dopo aver valutato il test, sarà presente un valore booleano che rappresenta True
o False
che è possibile utilizzare per controllare il flusso del programma.
Le variabili numeriche possono memorizzare un intero intervallo di numeri diversi. Le variabili booleane possono memorizzare solo due valori indicati come True o False, Yes o No, 1 o 0. Per eseguire i calcoli, raramente vengono utilizzati valori booleani a causa del loro intervallo limitato.
L'istruzione "If" è un concetto chiave nella programmazione: "Se ciò è vero, allora accade questo, altrimenti succede qualcos'altro. L'azione risultante dell'istruzione è determinata da un valore booleano. Esistono diversi modi per definire un'istruzione "If" in Dynamo:
If (If)
test, true, false
risultato
Formula (IF(x,y,z))
x, y, z
risultato
Code Block ((x?y:z);)
X, Y, Z
risultato
Si esaminerà un breve esempio per ciascuno di questi tre nodi in azione utilizzando l'istruzione "If" condizionale.
In questa immagine, Boolean è impostato su True, ovvero il risultato è una stringa che riporta: "This is the result if true”. I tre nodi che creano l'istruzione If funzionano in modo identico in questo contesto.
Anche in questo caso, i nodi funzionano in modo identico. Se Boolean viene modificato in False, il risultato è il numero Pi, come definito nell'istruzione If originale.
Scaricare il file di esempio facendo clic sul collegamento seguente.
Un elenco completo di file di esempio è disponibile nell'Appendice.
Si utilizzerà la logica per separare un elenco di numeri in un elenco di numeri pari e un elenco di numeri dispari.
a. Range: aggiungere un intervallo di numeri all'area di disegno.
b. Number: aggiungere tre nodi di numeri all'area di disegno. Il valore per ogni nodo Number deve essere: 0.000 per start, 10.000 per end e 1.000 per step.
c. Output: l'output è un elenco di 11 numeri da 0 a 10.
d. % (modulo): collegare Range a x e 2.000 a y. In questo modo viene calcolato il resto per ogni numero dell'elenco diviso per 2. L'output di questo elenco fornisce un elenco di valori alternati tra 0 e 1.
e. = = (test di uguaglianza): aggiungere un test di uguaglianza all'area di disegno. Collegare l'output del modulo all'input x e 0.000 all'input y.
f. Watch: l'output del test di uguaglianza è un elenco di valori alternati tra true e false. Questi sono i valori utilizzati per separare le voci dell'elenco. 0 (o true) rappresenta i numeri pari e (1 o false) rappresenta i numeri dispari.
g. List.FilterByBoolMask: questo nodo filtra i valori in due elenchi diversi in base al valore booleano di input. Collegare il nodo Range originale all'input list e l'output del test di uguaglianza all'input mask. L'output in rappresenta valori true, mentre l'output out rappresenta valori false.
h. Watch: il risultato è ora un elenco di numeri pari e un elenco di numeri dispari. Sono stati utilizzati operatori logici per separare gli elenchi in modelli.
Partendo dalla logica stabilita nel primo esercizio, si applicherà questa configurazione ad un'operazione di modellazione.
2. Partire dall'esercizio precedente con gli stessi nodi. Le uniche eccezioni (oltre a modificare il formato sono):
a. Utilizzare un nodo Sequence con questi valori di input.
b. È stato scollegato l'input list da List.FilterByBoolMask. Questi nodi verranno messi da parte per ora, ma saranno presto utili più avanti nell'esercizio.
3. Iniziare creando un gruppo separato del grafico come mostrato nell'immagine precedente. Questo gruppo di nodi rappresenta un'equazione parametrica per definire una curva di linea. Ecco alcune note:
a. Il primo Number Slider rappresenta la frequenza dell'onda, deve avere un minimo di 1, un massimo di 4 e un passo di 0.01.
b. Il secondo Number Slider rappresenta l'ampiezza dell'onda, deve avere un minimo di 0, un massimo di 1 e un passo di 0.01.
c. PolyCurve.ByPoints: se il diagramma dei nodi riportato sopra viene copiato, il risultato è una curva seno nella finestra di anteprima di Dynamo.
Il metodo indicato qui per gli input è questo: utilizzare i nodi Number per ottenere proprietà più statiche e i dispositivi di scorrimento numerici su quelle più flessibili. Si desidera mantenere l'intervallo di numeri originale definito all'inizio di questo passaggio. Tuttavia, la curva seno creata qui dovrebbe avere una certa flessibilità. È possibile spostare questi dispositivi di scorrimento per controllare l'aggiornamento della frequenza e dell'ampiezza della curva.
4. Si passerà alla definizione, quindi si osserverà il risultato finale in modo da poter fare riferimento a quello che si sta ottenendo. I primi due passaggi vengono eseguiti separatamente. Ora si desidera collegarli. Si utilizzerà la curva seno di base per determinare la posizione dei componenti della cerniera e si utilizzerà la logica true/false per alternare tra caselle di piccole dimensioni e caselle più grandi.
a. Math.RemapRange: utilizzando la sequenza numerica creata nel passaggio 02, creare una nuova serie di numeri riassociando l'intervallo. I numeri originali del passaggio 01 sono compresi tra 0 e 100. Questi numeri variano da 0 a 1, rispettivamente in base agli input newMin e newMax.
5. Creare un nodo Curve.PointAtParameter, quindi collegare l'output Math.RemapRange del passaggio 04 come il relativo input param.
Questo passaggio crea punti lungo la curva. I numeri sono stati riassociati da 0 a 1 perché l'input di param sta cercando valori in questo intervallo. Un valore di 0 rappresenta il punto iniziale, mentre un valore di 1 rappresenta i punti finali. Tutti i numeri compresi vengono valutati nell'intervallo [0,1].
6. Collegare l'output da Curve.PointAtParameter a List.FilterByBoolMask per separare l'elenco di indici pari e dispari.
a. List.FilterByBoolMask: collegare Curve.PointAtParameter del passaggio precedente all'input list.
b. Watch: un nodo di controllo per in e un nodo di controllo per out indicano che sono presenti due elenchi che rappresentano indici pari e indici dispari. Questi punti sono ordinati nello stesso modo sulla curva, che è possibile mostrare nel passaggio successivo.
7. Quindi, si utilizzerà il risultato dell'output di List.FilterByBoolMask nel passaggio 05 per generare geometrie con dimensioni in base ai relativi indici.
Cuboid.ByLengths: ricreare i collegamenti visti nell'immagine riportata sopra per ottenere una cerniera lungo la curva seno. Un cuboide qui è solo un parallelepipedo e si sta definendo la sua dimensione in base al punto della curva al centro del parallelepipedo stesso. La logica della divisione pari/dispari dovrebbe ora essere chiara nel modello.
a. a. Elenco di cuboidi in corrispondenza di indici pari.
b. b. Elenco di cuboidi in corrispondenza di indici dispari
Voila! È stato appena programmato un processo per definire le quote della geometria in base all'operazione logica illustrata in questo esercizio.