< Return to Video

1.2: PVector class - The Nature of Code

  • 0:07 - 0:10
    Добро утро, днес ще си говорим за вектори
  • 0:11 - 0:13
    Имам дълъг списък с видеота за правене
  • 0:13 - 0:17
    Ще разгледаме синтаксиса на PVector, основни математически операции с вектори,
  • 0:17 - 0:21
    Ще разгледаме нещо наречено ускорение, където ще видим законът на Нютон, сили
  • 0:21 - 0:28
    Накрая на тази поредица от видеота, съдържаща 5-6 или 7 видеота, ще имаме физически двигател (англ. - physics engine)
  • 0:28 - 0:33
    Ще симулираме физически тела от заобикалящия ни свят, реагиращи на физически сили
  • 0:33 - 0:34
    Доста вълнуващо
  • 0:34 - 0:44
    Какво ще правим? Единствената цел на това видео е да се запознаем със синтаксиса на PVector
  • 0:44 - 0:46
    Какво имам в предвид под PVector?
  • 0:51 - 0:53
    PVector-ът е клас в библиотеката Processing.
  • 1:01 - 1:03
    Има много готови класове в Processing
  • 1:03 - 1:09
    които описват например картинка, шрифт и различни видове обекти
  • 1:09 - 1:12
    Това е нещо, с което се надявам че сте запознати
  • 1:12 - 1:13
    ако сте използвали Processing
  • 1:14 - 1:16
    Днес ще научим за нов клас, наречен PVector
  • 1:16 - 1:19
    PVector-ът ще съдържа в себе си компонентите
  • 1:19 - 1:20
    на един вектор
  • 1:20 - 1:21
    Ако помните от предишното видео
  • 1:21 - 1:23
    Векторът, който може да бъде представен
  • 1:23 - 1:26
    като стрелка или посока (към коя страна векторът сочи?)
  • 1:26 - 1:28
    дължина (колко е дълъг векторът?)
  • 1:32 - 1:35
    Векторът има 'х' компонент и 'у' компонент
  • 1:35 - 1:38
    В интерес на истината PVector-ът пази в себе си
  • 1:38 - 1:41
    и 'z' компонент, но за целите на това видео
  • 1:41 - 1:42
    ще го игнорираме
  • 1:57 - 1:58
    Трябва да разясним какво представлява математиката
  • 1:58 - 2:00
    засягаща векторите
  • 2:00 - 2:01
    Какво означава да събираме вектори?
  • 2:01 - 2:04
    Ще видим умножение, деление, скаларно произведение
  • 2:04 - 2:07
    Да търсим дължина, да намираме единични вектори
  • 2:08 - 2:10
    Но първо, бих искал да разгледам нещо просто
  • 2:11 - 2:13
    Представете си, че имаме програма
  • 2:14 - 2:17
    Която има 'х' и 'у' променливи
  • 2:18 - 2:20
    Бихме искали да държим 'х'-те и 'у'-те
  • 2:21 - 2:24
    заедно в един векторен обект
  • 2:26 - 2:30
    Бихме могли да кажем PVector location (местоположение)
  • 2:47 - 2:49
    Вместо да имам отделни променливи за 'х' и 'у'
  • 2:49 - 2:50
    ще създадем един PVector
  • 2:56 - 3:01
    присвояваме стойност PVector на променливата location
  • 3:02 - 3:06
    със аргументи 100 50 например
  • 3:13 - 3:15
    Добре, какво точно се случва тук?
  • 3:15 - 3:16
    Примитивна промнелива
  • 3:16 - 3:17
    името и е 'х'
  • 3:18 - 3:19
    типът и е 'float'
  • 3:20 - 3:21
    Обектна променлива
  • 3:21 - 3:22
    името и е 'location'
  • 3:22 - 3:24
    типът на променливата е PVector
  • 3:24 - 3:26
    Какъвто и обект да направим
  • 3:26 - 3:29
    Например топка или риба
  • 3:32 - 3:33
    Казваме направи нова топка
  • 3:33 - 3:34
    или направи нова риба
  • 3:34 - 3:34
    направи ново балонче
  • 3:35 - 3:37
    Инстанцираме този обект
  • 3:37 - 3:39
    Правиме същото и с PVector
  • 3:41 - 3:44
    Казваме, 'location' е нова инстанция на PVector обекта
  • 3:44 - 3:48
    и конструктора взема 2 или 3 аргумента
  • 3:48 - 3:51
    В нашият случай, използваме двуизмерни вектори
  • 3:51 - 3:53
    за това използваме 2 аргумента
  • 4:06 - 4:08
    Нека разгледаме конкретен пример
  • 4:11 - 4:16
    Тук имаме стандартен пример за употребата на Processing
  • 4:16 - 4:18
    имаме скица на подскачаща топка
  • 4:18 - 4:20
    имаме обект-топка 'b'
  • 4:20 - 4:21
    Правим си нова топка
  • 4:21 - 4:24
    топката се движи и подскача
  • 4:26 - 4:29
    но нека разгледаме прозореца на топката
  • 4:29 - 4:31
    Тук са съществените неща
  • 4:31 - 4:34
    имаме 'х', 'у', 'xspeed' (speed - скорост) и 'yspeed'
  • 4:34 - 4:36
    Тук трябва да променим кода си, така че
  • 4:36 - 4:38
    да използваме вектори
  • 4:45 - 4:49
    Ще заместим 'х' и 'у' със PVector 'location'
  • 4:51 - 4:53
    и ще изтрием двете променливи
  • 4:54 - 4:56
    Сега, имаме още една двойка от 'х' и 'у'
  • 4:58 - 5:00
    Знаеме от функцията move(), че 'xspeed' променя 'х'
  • 5:00 - 5:02
    'уspeed' променя 'у'
  • 5:02 - 5:04
    Ще направим същото нещо, но със вектори
  • 5:04 - 5:08
    Вместо 'xspeed' и 'yspeed', ще напишем PVector и ще го кръстим
  • 5:08 - 5:10
    'velocity' (скорост)
  • 5:10 - 5:13
    Оказва се че скоростта е ключова идея
  • 5:13 - 5:15
    Която ще вградим нашият physics engine
  • 5:15 - 5:17
    Ако даден обект има позиция
  • 5:17 - 5:21
    Промяната на тази позиция спрямо времето е скоростта на обекта
  • 5:21 - 5:25
    Скоростта е вектор, който ни казва как позицията на обекта
  • 5:25 - 5:27
    се изменя в дадени моменти от време
  • 5:34 - 5:35
    Нека разгледаме конструктора
  • 5:35 - 5:38
    Инициализирахме 'х' и 'у' отделно
  • 5:39 - 5:40
    Сега ще го направим с вектори
  • 5:40 - 5:41
    със същите стойности
  • 6:00 - 6:08
    Виждате че заменяме всяка двойка променливи с един вектор
  • 6:23 - 6:26
    Тън-тън-тън-тън-тън-тън-тъъъъ!
  • 6:55 - 6:59
    Вместо две променливи, като всяка една от тях се променя
  • 6:59 - 7:01
    със съотвената си скорост
  • 7:02 - 7:04
    сега имаме една променлива, променяйки се от 'velocity'
  • 7:06 - 7:08
    Какво би могло да се обърка?
  • 7:10 - 7:11
    Нека го пуснем
  • 7:12 - 7:13
    Не знам дали виждате
  • 7:16 - 7:23
    Операторът '+' е недефиниран за вектори
  • 7:26 - 7:27
    Побърква се
  • 7:27 - 7:29
    Какво се случва тук?
  • 7:30 - 7:31
    Сега ще се наложи да спрем за малко
  • 7:31 - 7:32
    и да се върнем на дъската
  • 7:35 - 7:37
    Нека размишляваме върху това какво означава
  • 7:37 - 7:38
    операторът +
  • 7:38 - 7:42
    Знаем че използването на + във програмирането работи доста често
  • 7:47 - 7:48
    Това работи
  • 7:50 - 7:54
    Бихме могли дори събираме низове (string)
  • 7:56 - 7:58
    Какво представлява '+' в този контекст?
  • 7:58 - 8:00
    Представлява конкатенация (слепване)
  • 8:00 - 8:01
    получаваме 'abcd'
  • 8:01 - 8:03
    + в контекста на числата означава събиране
  • 8:03 - 8:06
    + в контекста на низовете означава конкатенация
  • 8:06 - 8:09
    Какво става когато се опитаме да съберем вектори
  • 8:18 - 8:22
    Реалността е, че просто не можем да правим подобно нещо
  • 8:25 - 8:26
    Би било хубаво
  • 8:26 - 8:30
    Има други програмни езици, които биха ни позволили
  • 8:30 - 8:34
    да използваме '+' операторът върху векторите
  • Not Synced
    За съжаление Processing знае как да събира вектори,
  • Not Synced
    толкова колкото знае как да събира шрифтове
  • Not Synced
    или картинка със картинка
  • Not Synced
    Събирането е позволено само за примитивни числа
  • Not Synced
    и низове
  • Not Synced
    За да съберем тези два вектора
  • Not Synced
    Ще ни е нужно да използваме методи от PVector класа
  • Not Synced
    Тези методи са add(), sub(), mult()
  • Not Synced
    Много са
  • Not Synced
    Във следващото видео ще разгледаме някои от тези методи
  • Not Synced
    и математика зад тях
  • Not Synced
    За сега ще се задоволим само със събиране на вектори
  • Not Synced
    имахме 'х' и 'хspeed'
  • Not Synced
    Сега имаме
  • Not Synced
    Ще ги съкратя
  • Not Synced
    Сега имаме 'loc' (местоположение) и 'vel' (скорост)
  • Not Synced
    Можем да използваме по-кратката версия '+='
  • Not Synced
    караме компютъра да добави 'xspeed' към 'х'
  • Not Synced
    и го запази в 'х'
  • Not Synced
    Това означава, вземи този вектор
  • Not Synced
    и го прибави към другия (loc)
  • Not Synced
    Ще разгледаме подробностите зад събирането на вектори
  • Not Synced
    във следващото видео
  • Not Synced
    Сега вече знаем, че правилният подход е
  • Not Synced
    да използваме метода аdd
  • Not Synced
    Сега ще го пуснем и ...
  • Not Synced
    дава му грешка защото използва 'х', който изтрихме
  • Not Synced
    През по-голямата част от времето, искаме да правим
  • Not Synced
    неща като тези
  • Not Synced
    Искаме да манипулираме векторите като цяло
  • Not Synced
    Не искаме да навлизаме в компонентите им
  • Not Synced
    Сравнение: искаме просто да караме колата,
  • Not Synced
    и когато я караме не искаме да я управляваме чрез жиците и
  • Not Synced
    'х' и 'у' компонентите са еквивалента на жиците
  • Not Synced
    в този обект
  • Not Synced
    Но понякога се налага
  • Not Synced
    Това тук е такъв случай
  • Not Synced
    Сменяме навсякъде старите променливи с новите
  • Not Synced
    Не е много вълнуващо
  • Not Synced
    Просто използваме подобаващо х и у компонентите
  • Not Synced
    на тези вектори
  • Not Synced
    Когато се опитваме да изобразим даден обект на екрана
  • Not Synced
    със сигурност ще се наложи да изпозлваме
  • Not Synced
    индивидуалните компоненти
  • Not Synced
    Всичките функции за изобразяване на форми
  • Not Synced
    в Processing изискват позиция по х оста
  • Not Synced
    и позиция по у оста
  • Not Synced
    Не можем да кажем нарисувай ми елипса
  • Not Synced
    само с този PVector обект
  • Not Synced
    Би трябвало да проработи
  • Not Synced
    Имаме си двата вектора
  • Not Synced
    Инициализираме ги в конструктора
  • Not Synced
    Във функцията move()
  • Not Synced
    скоростта се добавя към местоположението
  • Not Synced
    И това го правим всеки кадър
  • Not Synced
    и го рисуваме
  • Not Synced
    Работи
  • Not Synced
    Това е краят на това видео
  • Not Synced
    Бих ви предложил, преди да продължите към следващото
  • Not Synced
    е да намерите някоя ваша скица
  • Not Synced
    която има хиксове и у-ци навсякъде
  • Not Synced
    и просто се опитайте
  • Not Synced
    да я пренапишете, използвайки вектори
  • Not Synced
    без да променяте функционалността
  • Not Synced
    опитайте се да използвате някои от функциите
  • Not Synced
    от PVector класа
  • Not Synced
    но не се притеснявайте за тях
  • Not Synced
    тъй като ще ги разгледаме в следващото видео
Title:
1.2: PVector class - The Nature of Code
Description:

more » « less
Video Language:
English
Duration:
14:47

Bulgarian subtitles

Incomplete

Revisions