cwiczenia 4 voxelspace
58
Opis.md
@ -39,7 +39,7 @@ https://projects.duszekjk.com/ants1.0/
|
|||||||
1. Otwórz projekt voxelSpace w Unity
|
1. Otwórz projekt voxelSpace w Unity
|
||||||
2. Otwórz scenę "Scenes/theAntsAreMarching"
|
2. Otwórz scenę "Scenes/theAntsAreMarching"
|
||||||
3. Zapoznaj się z przygotowanymi skryptami
|
3. Zapoznaj się z przygotowanymi skryptami
|
||||||
1. Ant (objekt mrówki)
|
1. Ant (obiekt mrówki)
|
||||||
1. **bool** hasFood - czy ma jedzenie
|
1. **bool** hasFood - czy ma jedzenie
|
||||||
2. **sbyte** foodSearch - stan szukania jedzenia, 1 wraca do mrowiska, -1 idzie od mrowiska, szuka jedzenia
|
2. **sbyte** foodSearch - stan szukania jedzenia, 1 wraca do mrowiska, -1 idzie od mrowiska, szuka jedzenia
|
||||||
3. **VoxelSpace** voxelSpace
|
3. **VoxelSpace** voxelSpace
|
||||||
@ -54,54 +54,68 @@ https://projects.duszekjk.com/ants1.0/
|
|||||||
4. **void** placeFood() umieszcza jedzenie w losowej pozycji
|
4. **void** placeFood() umieszcza jedzenie w losowej pozycji
|
||||||
5. Funkcje do napisania w zadaniach, opisane poniżej
|
5. Funkcje do napisania w zadaniach, opisane poniżej
|
||||||
|
|
||||||
#opisy co jest w ant i co w voxel space (ant pozycja w przestrzeni ciągłej)
|
|
||||||
|
|
||||||
## Zadanie 2
|
## Zadanie 2
|
||||||
|
|
||||||
1. Napisz funkcję createVoxelSpace()
|
1. Napisz funkcję createVoxelSpace()
|
||||||
|
|
||||||
1. Voxel space jest przechowywany w **public** byte[,] voxels;
|
1. Zainicjalizuj atrybut `byte[,] voxels`, to znaczy utwórz tablicę dwuwymiarową o wymiarach `sizeX` na `sizeY`.
|
||||||
|
|
||||||
2. Rozdzielczość ma być **sizeX** na **sizeY**
|
3. W pętli ustaw wartość każdej komórki na 0.
|
||||||
|
|
||||||
3. Na start, każdy voxel ma mieć wartość **0**
|
4. Do wizualizacji tej przestrzeni wykorzystamy żółte kule, których rozmiar będzie zależny od zawartości feromonu. Utwórz dwuwymiarową tablicę typu `GameObject` o takich samych wymiarach jak powyżej i przypisz ją do atrybutu `GameObject[,] lights`.
|
||||||
|
|
||||||
4. Do wizualizacji tej przestrzeni wykorzystamy żółte kulę, których rozmiar będzie zależny od zawartości feromonu. Dlatego w tej funkcji utworzymy dodatkowo tablicę z tymi objektami:
|
4. W pętli zapełnij tablice instancjami `previewShape`, do utworzenia nowej instancji obiektu służy funkcja `Instantiate(GameObject gameObject)`. Ustaw każdemu pozycję odpowiadającą pozycji danego voxela korzystając z funkcji `positionInWorld` (uzupełnimy ją w następnym kroku).
|
||||||
**GameObject[,] lights**;
|
|
||||||
|
|
||||||
5. Do utoworzenia obiektów wizualizujących użyj funkcję: **Instantiate(previewShape)**;
|
|
||||||
|
|
||||||
6. Umieść te obiekty w odpowiednich miejscach
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
2. Napisz funkcje **positionInVoxelSpace**(Vector3 worldPosition) i **positionInWorld**(Vector2 voxelPosition) skalujące współrzędne z ciągłych na te w voxel space i z powrotem na ciągłe. Weź po uwagę różne skale (voxelScale), oraz umiejscowienie objektu table (gameObject.transform.position)
|
2. Napisz funkcje **positionInVoxelSpace**(Vector3 worldPosition) i **positionInWorld**(Vector2 voxelPosition) skalujące współrzędne z ciągłych (współrzędnych gameObject'ów - floats), na te w voxel space (wartości współrzędnych są wartościami Int o wielkości od 0 do odpowiednio sizeX-1 i sizeY-1) i z powrotem na ciągłe. Weź po uwagę różne skale (voxelScale), oraz umiejscowienie obiektu table (gameObject.transform.position).
|
||||||
|
Jako, że w pozycji ciągłej (obiektów gry) mamy 3 wymiary, a ten voxel space ma 2, to ustaw wymiary xy z voxel space w wartościach xz, a wymiar y pomiń/ustaw na 0.
|
||||||
|
|
||||||
|
<img src="images/Opis/1,1.png" alt="1,1" style="zoom:25%;" />
|
||||||
|
|
||||||
1. Po dodaniu tej funkcji, w prawym górnym rogu pojawi się mrowisko
|
1. Po dodaniu tej funkcji, w prawym górnym rogu pojawi się mrowisko
|
||||||
2. Dodaj do funkcji z poprzedniego zadania pozycje obiektów lights wykorzystując nowe funkcje
|
2. Dodaj do funkcji z poprzedniego zadania pozycje obiektów lights wykorzystując nowe funkcje
|
||||||
|
|
||||||
3. Napisz funkcje getPheromoneAt(**foat** x, **float** y)
|
3. Napisz funkcje getPheromoneAt(**foat** x, **float** y)
|
||||||
|
|
||||||
1. Funkcja ta ma zwrócić zawartość fermonu w danej pozycji voxel space
|
1. Funkcja przyjmuje współrzędne w przestrzeni świata i ma zwrócić zawartość fermonu przechowywaną w *voxel space*.
|
||||||
2. Jeśli te współrzędne się mieszczą w voxel space, to zwróć odpowiednią wartość (uwzględniając zmiane współrzędnych na voxelowe)
|
2. Przekonweruj współrzędne x,y do przestrzeni voxeli
|
||||||
3. Jeśli nie - zwróć **-1**
|
3. Jeśli te współrzędne się mieszczą w voxel space, to zwróć odpowiednią wartość (uwzględniając zmiane współrzędnych na voxelowe). Jeśli nie - zwróć **-1**
|
||||||
|
|
||||||
4. Napisz funkcje sniff() (skrypt Ant)
|
4. Napisz funkcje sniff() (skrypt Ant)
|
||||||
|
|
||||||
|
Mrówki po wyjściu z mrowiska poruszają się w kierunkach w dół lub w lewo. Jeśli znajdą jedzenie, to zawracają i idą w kierunku mrowiska (prawo i w górę). Jeśli mrówka dojdzie do krańca voxel space, to też zaczyna iść w kierunku mrowiska. Mrówka po dojściu do mrowiska zostawia jedzenie (jeśli je ma) i znowu wychodzi z mrowiska. Kierunek (dół i lewo lub góra i prawo) jest zależny od zawartości feromonu w sąsiednich voxelach w tym kierunku. Jeśli zawartość fermonu jest taka sama, to idzie w losowym kierunku.
|
||||||
|
|
||||||
|
https://projects.duszekjk.com/ants1.0/
|
||||||
|
|
||||||
|
**bool** hasFood - czy ma jedzenie
|
||||||
|
|
||||||
|
**sbyte** foodSearch - stan szukania jedzenia, **1** wraca do mrowiska, **-1** idzie od mrowiska, szuka jedzenia
|
||||||
|
|
||||||
1. Funkcja ta ma na celu zmianę kierunku poruszania się tej mrówki
|
1. Funkcja ta ma na celu zmianę kierunku poruszania się tej mrówki
|
||||||
2. Sprawdź i uaktualnij status
|
2. Sprawdź i uaktualnij status (ten voxel)
|
||||||
1. Jeśli jeśli funkcja getPheromoneAt zwraca liczbę większą od **250**, to to jest jedzenie, z którym mrówka ma wracać do mrowiska
|
1. Jeśli jeśli funkcja **getPheromoneAt** zwraca liczbę większą od **250**, to to jest jedzenie, z którym mrówka ma wracać do mrowiska (ustawiamy **hasFood** i **foodSearch**)
|
||||||
3. Jeśli jesteśmy w punkcie **(0,0)** to jesteśmy w mrowisku (zostawiamy jedzenie i zmieniamy kierunek na szukanie jedzenia)
|
|
||||||
4. Jeśli dojdziemy do końca voxelSpace, to wracamy do mrowiska
|
<img src="images/Opis/foundfoodant-0411648.png" alt="foundfoodant" style="zoom:25%;" />
|
||||||
3. Ustal kierunek
|
|
||||||
1. Sprawdź czy zawartość fermonu jest większa jeśli się pójdzie horyzontalnie, czy wertykalnie i skieruj mrówkę w odpowiednim kierunku
|
2. Jeśli jesteśmy w punkcie **(0,0)** (voxel space) to jesteśmy w mrowisku (zostawiamy jedzenie i zmieniamy kierunek na szukanie jedzenia (ustawiamy **hasFood** i **foodSearch**))
|
||||||
|
|
||||||
|
3. Jeśli dojdziemy do końca voxelSpace, to wracamy do mrowiska (ustawiamy tylko foodSearch)
|
||||||
|
|
||||||
|
<img src="images/Opis/bouncea-0411921.png" alt="bouncea" style="zoom:25%;" /><img src="images/Opis/bounceb-0411937.png" alt="bounceb" style="zoom:25%;" />
|
||||||
|
3. Ustal kierunek (sąsiednie voxele)
|
||||||
|
1. Sprawdź czy zawartość fermonu jest większa jeśli się pójdzie horyzontalnie (prawo, lewo), czy wertykalnie (góra, dół) i skieruj mrówkę w odpowiednim kierunku (możesz wykorzystać **foodSearch**, żeby wiedzieć gdzie sprawdzać)
|
||||||
|
<img src="images/Opis/turn-0412369.png" alt="turn" style="zoom:25%;" />
|
||||||
2. jeśli są takie same, to idź w losowym kierunku
|
2. jeśli są takie same, to idź w losowym kierunku
|
||||||
3. Podpowiedź - funkcje: **turnVerticaly()** i **turnHorizontaly()**
|
3. Podpowiedź - funkcje: **turnVerticaly()** i **turnHorizontaly()**
|
||||||
|
|
||||||
|
4. Jeśli mrówka ma jedzenie, to zwiększ w obecnej pozycji wartość voxel'a o **40**. (ten voxel)
|
||||||
|
|
||||||
5. Napisz funkcje updateVoxelSpace(), która obniża wartości feromonów jako wynik parowania w czasie
|
5. Napisz funkcje updateVoxelSpace(), która obniża wartości feromonów jako wynik parowania w czasie
|
||||||
|
|
||||||
1. Przejdź po wszystkich voxelach, które mają wartość poniżej **250** (nie są jedzeniem) i obniż ich wartość o **1**
|
1. Przejdź po wszystkich voxelach, które mają wartość poniżej **250** (nie są jedzeniem) i obniż ich wartość o **1**
|
||||||
2. Minimalna możliwa wartość to 0
|
2. Minimalna możliwa wartość to **0**
|
||||||
|
|
||||||
6. Sprawdź jak mrówki się poruszają
|
6. Sprawdź jak mrówki się poruszają
|
||||||
|
|
||||||
|
BIN
images/Opis/1,1-0408926.png
Normal file
After Width: | Height: | Size: 441 KiB |
BIN
images/Opis/1,1.png
Normal file
After Width: | Height: | Size: 441 KiB |
BIN
images/Opis/bouncea-0411919.png
Normal file
After Width: | Height: | Size: 485 KiB |
BIN
images/Opis/bouncea-0411921.png
Normal file
After Width: | Height: | Size: 485 KiB |
BIN
images/Opis/bouncea.png
Normal file
After Width: | Height: | Size: 485 KiB |
BIN
images/Opis/bounceb-0411936.png
Normal file
After Width: | Height: | Size: 597 KiB |
BIN
images/Opis/bounceb-0411937.png
Normal file
After Width: | Height: | Size: 597 KiB |
BIN
images/Opis/bounceb.png
Normal file
After Width: | Height: | Size: 597 KiB |
BIN
images/Opis/foundfoodant-0411646.png
Normal file
After Width: | Height: | Size: 690 KiB |
BIN
images/Opis/foundfoodant-0411648.png
Normal file
After Width: | Height: | Size: 690 KiB |
BIN
images/Opis/foundfoodant.png
Normal file
After Width: | Height: | Size: 690 KiB |
BIN
images/Opis/turn-0412366.png
Normal file
After Width: | Height: | Size: 750 KiB |
BIN
images/Opis/turn-0412369.png
Normal file
After Width: | Height: | Size: 750 KiB |
BIN
images/Opis/turn.png
Normal file
After Width: | Height: | Size: 750 KiB |