Skip to content

Repozytorium zawiera implementację algorytmu szumu, zbliżoną działaniem do szumu Perlinowskiego. Graficzna reprezentacja projektu zostałą zrealizowana przy wykorzystaniu biblioteki pygame

Notifications You must be signed in to change notification settings

homosum1/Python-Noise-Generator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 

Repository files navigation

Python-Noise-Generator

Repozytorium zawiera implementację algorytmu szumu, zbliżoną działaniem do szumu Perlinowskiego. Graficzna reprezentacja projektu zostałą zrealizowana przy wykorzystaniu biblioteki Pygame.

Opis funkcji programu oraz kompilacja

Elementy składowe:

Program składa się z trzech plików *.py (perlin_render, noise, button) oraz jednej mapy w postaci pliku "map.png", przy czym każdy z nich spełnia odpowiednią funkcjonalność:

  • perlin_render.py jest to główny plik programu, zawierający pętlę obsługującą komunikację GUI z użytkownikiem, oraz cały mechanizm obsługi tej komunikacji
  • button.py plik zawiera jedynie klasę przycisku, pozwalającą na jego szybsze zdefiniowanie i wdrożenie do programu głównego
  • noise.py plik zawierający główną klasę programu, odpowiedzialną za obsługę algorytmu szumu oraz jego odpowiednie prezentowanie użytkownikowi

Kompilacja:

Program został napisany w Pythonie 3

do poprawnej kompilacji wymaga on posiadania:

  • biblioteki Pygame
  • biblioteki PIL (wykorzystywanej do edycji pliku *.png)
  • biblioteki numpy

Plikiem głównym ("main") programu jest plik "perlin_rder.py".

Dokładniejszy opis działania kluczowych fragmentów programu

Poruszanie się po menu

Po uruchomieniu programu pojawi się nam jego menu wraz z głównym ekranem wyświetlającym wyniki (interpretacja wyników omówiona jest w następnym podpunkcie). Do naszej dyspozycji otrzymujemy trzy funkcjonalne przyciski (submit, create oraz exit), przy czym działanie przycisku exit jest dość wymowne. Na lewo od przycisku znajdują się dwa input-boxy (ocvates oraz bias). Liczby koło napisów opisują aktualny zadany stan parametrów. W celu zmienienia parametrów należy kliknąć myszą w pole i wprowadzić odpowiedni parametr. Program zabezpieczony jest przed wprowadzaniem niepoprawnych danych (przyjmowane są wyłącznie cyfry oraz kropki oznaczające rozdzielenie części zmienno od stałoprzecinkowej liczby). Zmienna octaves powinna być liczbą naturalną z przedziału około 1-10, natomiast liczba Bias może być liczbą całkowitą, preferowany przedział 10^(-3) - 10.

Po wprowadzeniu nowych parametrów, wystarczy nacisnąć przycisk submit, który wygeneruje dla nas szum o zadanych wcześniej parametrach. Przycisk create natomiast odpowiada za wygenerowanie nowego "seeda" czyli zestawu zmiennych losowych z przedziału (0,1) na podstawie których tworzona jest sekwencja wynikowa algorytmu.

*utworzenie nowego zestawu zmiennych losowych spowoduje reprezentację wyniku dla wcześniej określonych parametrów co widać na stanie licznika parametru.

input view input view

Sposób reprezentacji wyników

Wynik działania algorytmu przedstawiany jest w postaci wykresu, reprezentowanego w programie przez plik map.png, który nadpisywany jest w trakcie pracy algorytmu.

Algorytm szumu pozwala nam na zamianę zmiennych losowych w pozornie "naturalnie" wyglądające układy - jest to w implementacji Perlina tak zwany szum gradientowy. W jaki sposób obserwujemy wyniki? Jak widać po uruchomieniu programu widzimy wykres o stałej wartości y. Dzieje się tak dlatego, że początkowo ilość oktaw ustawiona jest na 1. Zatem interpolacja liniowa w naszym algorytmie odbywa się względem tylko jednego punktu, co w rezultacie daje nam całkowicie wypłaszczony wykres. Zmiana liczby oktaw na wyższą spowoduje, że wykres zacznie przypominać "naturalnie wyglądające pasmo górskie", co jest skutkiem wykonywania coraz większej ilości przybliżeń między punktami i wyliczanie na ich podstawie, nowych punktów o zbliżonej wartości.

Zmiana parametru bias na skrajnie mały skutkować będzie natomiast powrotem wyglądu wykresu do tego jaki otrzymalibyśmy podczas reprezentacji zmiennych wygenerowanych losowo, dzieje się tak dlatego, że zmienna ta stanowi mianownik w ilorazie na podstawie którego wyznaczana jest skala z każdym kolejnym wyznaczeniem oktawy. Mechanizm działania dobrze ilustrują poniższe grafiki.

input view input view

About

Repozytorium zawiera implementację algorytmu szumu, zbliżoną działaniem do szumu Perlinowskiego. Graficzna reprezentacja projektu zostałą zrealizowana przy wykorzystaniu biblioteki pygame

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages