Logika
Last updated
Last updated
Logika, a w szczególności logika warunkowa, pozwala określić operację lub zestaw operacji na podstawie testu. Przez oszacowanie testu uzyskamy wartość logiczną reprezentującą prawdę (True
) lub fałsz (False
), za pomocą której można sterować przepływem programu.
Zmienne liczbowe mogą przechowywać liczby z szerokiego zakresu. Zmienne logiczne mogą przechowywać tylko dwie wartości, nazywane Prawda lub Fałsz, Tak lub Nie albo 1 lub 0. Rzadko stosuje się operacje logiczne do wykonywania obliczeń z powodu ich ograniczonego zakresu.
Instrukcja „If” (jeśli) stanowi kluczowe pojęcie w programowaniu: „Jeśli to jest prawdą, wtedy tak się stanie, w przeciwnym razie stanie się coś innego”. Wynikowa operacja tej instrukcji zależy od wartości logicznej. Istnieje wiele sposobów definiowania instrukcji „If” w dodatku Dynamo:
Ikona | Nazwa (składnia) | Dane wejściowe | Dane wyjściowe |
---|---|---|---|
Jeśli (If) | test, prawda, fałsz | wynik | |
Formuła (IF(x,y,z)) | x, y, z | wynik | |
Code Block ((x?y:z);) | x? y, z | wynik |
Przeanalizujmy krótki przykład dotyczący działania każdego z tych trzech węzłów z użyciem instrukcji warunkowej „If”.
Na tej ilustracji wartość logiczna jest ustawiona na true, co oznacza, że wynik jest ciągiem: „this is the result if true” (to jest wynik, jeśli prawda). Trzy węzły tworzące instrukcję If działają tu w ten sam sposób.
Węzły działają identycznie. Jeśli wartość logiczna zostanie zmieniona na false, wynik będzie liczbą Pi, jak to zdefiniowano w oryginalnej instrukcji If.
Pobierz plik przykładowy, klikając poniższe łącze.
Pełna lista plików przykładowych znajduje się w załączniku.
Użyjmy logiki, aby rozdzielić listę liczb na listę liczb parzystych i listę liczb nieparzystych.
a. Number Range — dodaj zakres liczb do obszaru rysunku.
b. Number — dodaj trzy number liczb do obszaru rysunku. Wartość dla każdego węzła number powinna wynosić: 0,0 dla start, 10,0 dla end i 1,0 dla step.
c. Wyjście — wynik wyjściowy to lista 11 liczb w zakresie od 0 do 10.
d. Modulo (%) — węzeł Number Range do x i 2,0 do y. Spowoduje to obliczenie reszty z dzielenia przez 2 dla każdej liczby na liście. Wynik z tej listy to lista wartości 0 i 1.
e. Test równości (==) — dodaj test równości do obszaru rysunku. Podłącz wyjście modulo do wejścia x i wartość 0,0 do wejścia y.
f. Watch — wynik testu równości jest listą wartości logicznych true i false. Są to wartości używane do oddzielenia elementów na liście. 0 (lub true) reprezentuje liczby parzyste, a 1 (lub false) reprezentuje liczby nieparzyste.
g. List.FilterByBoolMask — ten węzeł filtruje wartości na dwie różne listy w oparciu o wejściową wartość logiczną. Podłącz oryginalny węzeł Number Range do wejścia list oraz wyjście equality test do wejścia mask. Wyjście in reprezentuje wartości true, podczas gdy wyjście out reprezentuje wartości false.
h. Watch — w wyniku tego mamy teraz listę liczb parzystych i listę liczb nieparzystych. Użyliśmy operatorów logicznych do rozdzielenia list na wzory.
Bazując na logice ustanowionej w pierwszym ćwiczeniu, zastosujmy tę konfigurację do operacji modelowania.
2. Oprzemy się na poprzednim ćwiczeniu z tymi samymi węzłami. Jedyne wyjątki to (oprócz zmiany formatu):
a. Użyj węzła Sequence z tymi wartościami wejściowymi.
b. Odłączyliśmy wejście list in od węzła List.FilterByBoolMask. Na razie odłożymy te węzły na bok, ale później w tym ćwiczeniu się przydadzą.
3. Zacznijmy od utworzenia oddzielnej grupy wykresu, jak pokazano na ilustracji powyżej. Ta grupa węzłów reprezentuje równanie parametryczne definiujące krzywą liniową. Kilka uwag:
a. Pierwszy suwak Number Slider reprezentuje częstotliwość fali. Powinien mieć wartość min. 1, maks. 4 i krok 0,01.
b. Drugi Number Slider reprezentuje amplitudę fali. Powinien mieć wartość min. 0, maks. 1 i krok równy 0,01.
c. PolyCurve.ByPoints — jeśli zostanie skopiowany powyższy wykres węzłów, wynikiem będzie krzywa sinusoidalna w rzutni podglądu Dynamo.
Metoda stosowana tutaj dla wejść: użyj węzłów number dla bardziej statycznych właściwości i węzłów Number Slider dla właściwości bardziej elastycznych. Chcemy zachować oryginalny węzeł Number Range definiowany na początku tego kroku. Jednak tworzona tutaj krzywa sinusoidalna powinna mieć pewną elastyczność. Możemy przesunąć te suwaki, aby obserwować, jak aktualizowane są częstotliwość i amplituda krzywej.
4. Będziemy analizować definicję nie po kolei, więc spójrzmy na wynik końcowy, aby móc się odwoływać do tego, do czego dążymy. Pierwsze dwa kroki są wykonywane oddzielnie, chcemy je teraz połączyć. Użyjemy bazowej krzywej sinusoidalnej do sterowania położeniem komponentów zamka, a za pomocą logiki prawdy/fałszu będziemy przełączać się między małymi i większymi kostkami.
a. Math.RemapRange — za pomocą sekwencji liczb utworzonej w kroku 02 utwórzmy nową serię liczb poprzez ponowne odwzorowanie zakresu. Oryginalne liczby z zakresu od 0 do 100 z kroku 01. Te liczby mieszczą się w zakresie od 0 do 1 dla odpowiednio wejść newMin i newMax.
5. Utwórz węzeł Curve.PointAtParameter, a następnie połącz wyjście Math.RemapRange z kroku 04 jako wejście param.
W tym kroku tworzone są punkty wzdłuż krzywej. Ponownie odwzorowaliśmy liczby na wartości od 0 do 1, ponieważ wejście param szuka wartości w tym zakresie. Wartość 0 reprezentuje punkt początkowy, a wartość 1 reprezentuje punkty końcowe. Wszystkie liczby między nimi są odwzorowane na wartości z zakresu [0,1].
6. Połącz wyjście z węzła Curve.PointAtParameter z węzłem List.FilterByBoolMask, aby rozdzielić listę indeksów nieparzystych i nieparzystych.
a. List.FilterByBoolMask — podłącz węzeł Curve.PointAtParameter z poprzedniego kroku do wejścia list.
b. Watch — węzeł obserwacyjny dla in i węzeł obserwacyjny dla out pokazują, że mamy dwie listy reprezentujące indeksy parzyste i nieparzyste. Punkty te są uporządkowane w ten sam sposób na krzywej, co przedstawimy w następnym kroku.
7. Następnie użyjemy wyjścia z węzła List.FilterByBoolMask w kroku 05, aby wygenerować geometrie o rozmiarach zgodnych z indeksami.
Cuboid.ByLengths — ponownie utwórz połączenia widoczne na ilustracji powyżej, aby uzyskać zamek wzdłuż krzywej sinusoidalnej. Prostopadłościan jest tutaj tylko kostką. Definiujemy jego rozmiar na podstawie punktu krzywej w środku kostki. Logika podziału na wartości parzyste/nieparzyste powinna być teraz czytelna w modelu.
a. Lista prostopadłościanów przy indeksach parzystych.
b. Lista prostopadłościanów przy indeksach nieparzystych.
Gotowe! Właśnie zaprogramowano proces definiowania wymiarów geometrii zgodnie z operacją logiczną przedstawioną w tym ćwiczeniu.