cwiczenia 4 voxelspace

This commit is contained in:
duszekjk 2021-05-07 20:45:42 +02:00
parent 865e725dd2
commit 0a81acb3c5
17 changed files with 41 additions and 26 deletions

File diff suppressed because one or more lines are too long

58
Opis.md
View File

@ -39,7 +39,7 @@ https://projects.duszekjk.com/ants1.0/
1. Otwórz projekt voxelSpace w Unity
2. Otwórz scenę "Scenes/theAntsAreMarching"
3. Zapoznaj się z przygotowanymi skryptami
1. Ant (objekt mrówki)
1. Ant (obiekt mrówki)
1. **bool** hasFood - czy ma jedzenie
2. **sbyte** foodSearch - stan szukania jedzenia, 1 wraca do mrowiska, -1 idzie od mrowiska, szuka jedzenia
3. **VoxelSpace** voxelSpace
@ -54,54 +54,68 @@ https://projects.duszekjk.com/ants1.0/
4. **void** placeFood() umieszcza jedzenie w losowej pozycji
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
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:
**GameObject[,] lights**;
5. Do utoworzenia obiektów wizualizujących użyj funkcję: **Instantiate(previewShape)**;
6. Umieść te obiekty w odpowiednich miejscach
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).
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
2. Dodaj do funkcji z poprzedniego zadania pozycje obiektów lights wykorzystując nowe funkcje
3. Napisz funkcje getPheromoneAt(**foat** x, **float** y)
1. Funkcja ta ma zwrócić zawartość fermonu w danej pozycji 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)
3. Jeśli nie - zwróć **-1**
1. Funkcja przyjmuje współrzędne w przestrzeni świata i ma zwrócić zawartość fermonu przechowywaną w *voxel space*.
2. Przekonweruj współrzędne x,y do przestrzeni voxeli
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)
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
2. Sprawdź i uaktualnij status
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
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
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. 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 (ustawiamy **hasFood** i **foodSearch**)
<img src="images/Opis/foundfoodant-0411648.png" alt="foundfoodant" style="zoom:25%;" />
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
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
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ą

BIN
Opis.pdf

Binary file not shown.

BIN
images/Opis/1,1-0408926.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 441 KiB

BIN
images/Opis/1,1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 441 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 485 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 485 KiB

BIN
images/Opis/bouncea.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 485 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 597 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 597 KiB

BIN
images/Opis/bounceb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 597 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 690 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 690 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 690 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 750 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 750 KiB

BIN
images/Opis/turn.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 750 KiB