If you're seeing this message, it means we're having trouble loading external resources on our website.

Ако си зад уеб филтър, моля, увери се, че домейните *. kastatic.org и *. kasandbox.org са разрешени.

Основно съдържание

Двуизмерен шум

Идеята за обитаващите едномерно пространство стойности на шума е важна, защото ни води към дискусията за двуизмерното пространство. Да помислим за това за момент. С едномерен шум имаме последователност от стойности, в която всяка дадена стойност е подобна на своя съсед. Тъй като стойността е в едно измерение, тя има само двама съседи: стойност, която идва преди нея (отляво на графиката) и една, която идва след нея (отдясно).
Природата на кода изображение
Фигура I.10: 1D Шум
Концептуално двуизмерният шум работи по абсолютно същия начин. Разликата, разбира се, е в това, че не разглеждаме стойностите по линейна пътека, а разглеждаме стойности в мрежа. Представи си лист чертожна хартия, във всяка клетка на която са записани числа. Дадена стойност ще бъде подобна на всички свои съседи: отгоре, отдолу, отдясно, отляво и по диагоналите.
Природата на кода изображение
Фигура I.11: 2D шум
Ако искаш да визуализираш тази графична хартия с всяка стойност, свързана с яркостта на цвят, ще получиш нещо, което прилича на облаци. Бялото седи до светло сивото, което стои до сивото, което стои до тъмно сивото, което стои до черното, което стои до тъмно сивото и т.н.
Природата на кода изображение
Това е първопричината да бъде изобретена функцията за шум. Пипваш малко параметрите или си играеш с цветовете, за да накараш полученото изображение да изглежда повече като мрамор или дърво или други органични текстури.
Да хвърлим бърз поглед върху това как да имплементираме двуизмерния шум в ProcessingJS. Ако искаш да оцветиш всеки пиксел от прозореца на случаен принцип, ще ти трябва вложен цикъл, който достъпва всеки пиксел и избира случайна яркост.
За да оцветим всеки пиксел според функцията noise(), ще направим съвсем същото, но вместо да извикваме random(), ще извикваме noise().
var bright = map(noise(x,y), 0, 1, 0, 255);
Това е добро начало – дава ни стойност на шума за всяка точка (x,y) в нашето двуизмерно пространство. Проблемът е там, че това няма да ни даде облачния изглед, който искаме. Скачането от пиксел 200 на пиксел 201 е прекалено голямо за скок през шума. Спомни си, че когато работихме с едномерен шум, увеличавахме нашата променлива с 0,01 за всеки кадър, а не с 1! Доста добро решение на този проблем е да използваме различни променливи за аргументи на шума. Например можем да увеличаваме една променлива, наречена xoff всеки път, когато се движим хоризонтално, и една променлива yoff всеки път, когато се движим вертикално през вложените цикли.
Вече разгледахме няколко традиционни употреби на шума на Пърлин в този урок. С едномерния шум използвахме плавни стойности, за да зададем локацията на един обект и да получим визия на случайно движение. С двуизмерния шум създадохме облачен модел с плавни стойности върху равнина от пиксели. Важно е да запомниш, обаче, че стойностите на шума на Пърлин са само това – стойности. Те не са свързани с локацията на пикселите или с цветове. Всеки пример в тези уроци има променлива, която може да се контролира от шума на Пърлин. Когато моделираме силата на вятъра, нейната сила може да се контролира от шума на Пърлин. Същото се отнася и за ъглите между клоните на фрактално дърво, или за скоростта и посоката на обекти, които се движат по течението на симулиран поток, както е в програмата по-долу.
Започнахме последния урок с разговор за това как случайността може да бъде от помощ. По много начини тя е най-очевидния отговор на въпросите, които си задаваме постоянно – как трябва да се движи този обект? Какъв цвят трябва да бъде? Този очевиден отговор, обаче, може да бъде малко мързелив.
В края на този урок би трябвало да се отбележи и че можем лесно да попаднем в капана на това да използваме шума на Пърлин за щяло и не щяло. Как трябва да се движи този обект? Шум на Пърлин! Какъв цвят трябва да бъде? Шум на Пърлин! Колко бързо трябва да расте? Шум на Пърлин!
Целта на всичко това не е да кажем, че трябва или не трябва да използваш случайност. Или че трябва или не трябва да използваш шума на Пърлин. Целта е, че правилата в твоята система се определят от теб и колкото повече инструменти имаш в своята кутия, толкова повече избор имаш за имплементацията на тези правила. Целта на тези уроци е да ти помогнем да обогатиш своята кутия. Ако всичко, което знаеш, е един тип случайност, тогава всичките ти проекти ще включват само този вид случайност. Шумът на Пърлин е друг инструмент за случайност, който можеш да използваш в своите програми. След малко практика с шума на Пърлин ще минем към още един инструмент – векторите!

Курсът "Компютърни симулации на физични явления" е производeн на "Природата на кода" от Даниел Шифман, използвана от Creative Commons Attribution-NonCommercial 3,0 Unported License.

Искаш ли да се присъединиш към разговора?

Все още няма публикации.
Разбираш ли английски? Натисни тук, за да видиш още дискусии в английския сайт на Кан Академия.