[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:06.77,0:00:10.26,Default,,0000,0000,0000,,Добро утро, днес ще си говорим за вектори Dialogue: 0,0:00:10.94,0:00:12.88,Default,,0000,0000,0000,,Имам дълъг списък с видеота за правене Dialogue: 0,0:00:13.35,0:00:17.05,Default,,0000,0000,0000,,Ще разгледаме синтаксиса на PVector, основни математически операции с вектори, Dialogue: 0,0:00:17.45,0:00:21.01,Default,,0000,0000,0000,,Ще разгледаме нещо наречено ускорение, където ще видим законът на Нютон, сили Dialogue: 0,0:00:21.29,0:00:28.11,Default,,0000,0000,0000,,Накрая на тази поредица от видеота, съдържаща 5-6 или 7 видеота, ще имаме физически двигател (англ. - physics engine) Dialogue: 0,0:00:28.11,0:00:32.82,Default,,0000,0000,0000,,Ще симулираме физически тела от заобикалящия ни свят, реагиращи на физически сили Dialogue: 0,0:00:32.82,0:00:33.75,Default,,0000,0000,0000,,Доста вълнуващо Dialogue: 0,0:00:33.75,0:00:44.22,Default,,0000,0000,0000,,Какво ще правим? Единствената цел на това видео е да се запознаем със синтаксиса на PVector Dialogue: 0,0:00:44.22,0:00:45.79,Default,,0000,0000,0000,,Какво имам в предвид под PVector? Dialogue: 0,0:00:50.96,0:00:53.20,Default,,0000,0000,0000,,PVector-ът е клас в библиотеката Processing. Dialogue: 0,0:01:01.17,0:01:03.49,Default,,0000,0000,0000,,Има много готови класове в Processing Dialogue: 0,0:01:03.49,0:01:09.00,Default,,0000,0000,0000,,които описват например картинка, шрифт и различни видове обекти Dialogue: 0,0:01:09.00,0:01:11.95,Default,,0000,0000,0000,,Това е нещо, с което се надявам че сте запознати Dialogue: 0,0:01:11.95,0:01:13.26,Default,,0000,0000,0000,,ако сте използвали Processing Dialogue: 0,0:01:13.90,0:01:15.75,Default,,0000,0000,0000,,Днес ще научим за нов клас, наречен PVector Dialogue: 0,0:01:15.75,0:01:18.78,Default,,0000,0000,0000,,PVector-ът ще съдържа в себе си компонентите Dialogue: 0,0:01:18.78,0:01:19.80,Default,,0000,0000,0000,,на един вектор Dialogue: 0,0:01:19.80,0:01:21.20,Default,,0000,0000,0000,,Ако помните от предишното видео Dialogue: 0,0:01:21.26,0:01:22.68,Default,,0000,0000,0000,,Векторът, който може да бъде представен Dialogue: 0,0:01:22.93,0:01:25.92,Default,,0000,0000,0000,,като стрелка или посока (към коя страна векторът сочи?) Dialogue: 0,0:01:25.92,0:01:28.19,Default,,0000,0000,0000,,дължина (колко е дълъг векторът?) Dialogue: 0,0:01:32.06,0:01:34.68,Default,,0000,0000,0000,,Векторът има 'х' компонент и 'у' компонент Dialogue: 0,0:01:34.92,0:01:37.74,Default,,0000,0000,0000,,В интерес на истината PVector-ът пази в себе си Dialogue: 0,0:01:37.97,0:01:40.60,Default,,0000,0000,0000,,и 'z' компонент, но за целите на това видео Dialogue: 0,0:01:40.64,0:01:41.94,Default,,0000,0000,0000,,ще го игнорираме Dialogue: 0,0:01:56.57,0:01:58.31,Default,,0000,0000,0000,,Трябва да разясним какво представлява математиката Dialogue: 0,0:01:58.31,0:01:59.59,Default,,0000,0000,0000,,засягаща векторите Dialogue: 0,0:01:59.84,0:02:01.39,Default,,0000,0000,0000,,Какво означава да събираме вектори? Dialogue: 0,0:02:01.47,0:02:03.97,Default,,0000,0000,0000,,Ще видим умножение, деление, скаларно произведение Dialogue: 0,0:02:04.25,0:02:07.22,Default,,0000,0000,0000,,Да търсим дължина, да намираме единични вектори Dialogue: 0,0:02:08.32,0:02:10.09,Default,,0000,0000,0000,,Но първо, бих искал да разгледам нещо просто Dialogue: 0,0:02:10.100,0:02:13.16,Default,,0000,0000,0000,,Представете си, че имаме програма Dialogue: 0,0:02:13.69,0:02:16.56,Default,,0000,0000,0000,,Която има 'х' и 'у' променливи Dialogue: 0,0:02:17.62,0:02:20.47,Default,,0000,0000,0000,,Бихме искали да държим 'х'-те и 'у'-те Dialogue: 0,0:02:20.97,0:02:24.14,Default,,0000,0000,0000,,заедно в един векторен обект Dialogue: 0,0:02:25.93,0:02:30.49,Default,,0000,0000,0000,,Бихме могли да кажем PVector location (местоположение) Dialogue: 0,0:02:46.82,0:02:48.58,Default,,0000,0000,0000,,Вместо да имам отделни променливи за 'х' и 'у' Dialogue: 0,0:02:48.63,0:02:50.16,Default,,0000,0000,0000,,ще създадем един PVector Dialogue: 0,0:02:56.42,0:03:00.89,Default,,0000,0000,0000,,присвояваме стойност PVector на променливата location Dialogue: 0,0:03:02.46,0:03:05.79,Default,,0000,0000,0000,,със аргументи 100 50 например Dialogue: 0,0:03:12.60,0:03:14.51,Default,,0000,0000,0000,,Добре, какво точно се случва тук? Dialogue: 0,0:03:14.88,0:03:16.12,Default,,0000,0000,0000,,Примитивна промнелива Dialogue: 0,0:03:16.42,0:03:17.34,Default,,0000,0000,0000,,името и е 'х' Dialogue: 0,0:03:17.62,0:03:19.18,Default,,0000,0000,0000,,типът и е 'float' Dialogue: 0,0:03:19.68,0:03:21.15,Default,,0000,0000,0000,,Обектна променлива Dialogue: 0,0:03:21.36,0:03:22.30,Default,,0000,0000,0000,,името и е 'location' Dialogue: 0,0:03:22.49,0:03:23.71,Default,,0000,0000,0000,,типът на променливата е PVector Dialogue: 0,0:03:23.80,0:03:25.54,Default,,0000,0000,0000,,Какъвто и обект да направим Dialogue: 0,0:03:25.56,0:03:28.85,Default,,0000,0000,0000,,Например топка или риба Dialogue: 0,0:03:31.50,0:03:32.62,Default,,0000,0000,0000,,Казваме направи нова топка Dialogue: 0,0:03:32.76,0:03:33.57,Default,,0000,0000,0000,,или направи нова риба Dialogue: 0,0:03:33.69,0:03:34.49,Default,,0000,0000,0000,,направи ново балонче Dialogue: 0,0:03:35.01,0:03:36.52,Default,,0000,0000,0000,,Инстанцираме този обект Dialogue: 0,0:03:36.52,0:03:38.66,Default,,0000,0000,0000,,Правиме същото и с PVector Dialogue: 0,0:03:41.42,0:03:44.37,Default,,0000,0000,0000,,Казваме, 'location' е нова инстанция на PVector обекта Dialogue: 0,0:03:44.37,0:03:47.80,Default,,0000,0000,0000,,и конструктора взема 2 или 3 аргумента Dialogue: 0,0:03:47.80,0:03:50.81,Default,,0000,0000,0000,,В нашият случай, използваме двуизмерни вектори Dialogue: 0,0:03:50.81,0:03:53.35,Default,,0000,0000,0000,,за това използваме 2 аргумента Dialogue: 0,0:04:05.72,0:04:08.46,Default,,0000,0000,0000,,Нека разгледаме конкретен пример Dialogue: 0,0:04:11.39,0:04:16.12,Default,,0000,0000,0000,,Тук имаме стандартен пример за употребата на Processing Dialogue: 0,0:04:16.12,0:04:18.04,Default,,0000,0000,0000,,имаме скица на подскачаща топка Dialogue: 0,0:04:18.04,0:04:19.83,Default,,0000,0000,0000,,имаме обект-топка 'b' Dialogue: 0,0:04:19.88,0:04:21.22,Default,,0000,0000,0000,,Правим си нова топка Dialogue: 0,0:04:21.22,0:04:23.70,Default,,0000,0000,0000,,топката се движи и подскача Dialogue: 0,0:04:25.63,0:04:29.40,Default,,0000,0000,0000,,но нека разгледаме прозореца на топката Dialogue: 0,0:04:29.40,0:04:31.14,Default,,0000,0000,0000,,Тук са съществените неща Dialogue: 0,0:04:31.14,0:04:33.52,Default,,0000,0000,0000,,имаме 'х', 'у', 'xspeed' (speed - скорост) и 'yspeed' Dialogue: 0,0:04:33.52,0:04:35.91,Default,,0000,0000,0000,,Тук трябва да променим кода си, така че Dialogue: 0,0:04:35.91,0:04:37.58,Default,,0000,0000,0000,,да използваме вектори Dialogue: 0,0:04:45.07,0:04:49.07,Default,,0000,0000,0000,,Ще заместим 'х' и 'у' със PVector 'location' Dialogue: 0,0:04:50.57,0:04:53.09,Default,,0000,0000,0000,,и ще изтрием двете променливи Dialogue: 0,0:04:53.89,0:04:56.46,Default,,0000,0000,0000,,Сега, имаме още една двойка от 'х' и 'у' Dialogue: 0,0:04:57.89,0:05:00.31,Default,,0000,0000,0000,,Знаеме от функцията move(), че 'xspeed' променя 'х' Dialogue: 0,0:05:00.31,0:05:01.64,Default,,0000,0000,0000,,'уspeed' променя 'у' Dialogue: 0,0:05:01.75,0:05:04.14,Default,,0000,0000,0000,,Ще направим същото нещо, но със вектори Dialogue: 0,0:05:04.14,0:05:08.39,Default,,0000,0000,0000,,Вместо 'xspeed' и 'yspeed', ще напишем PVector и ще го кръстим Dialogue: 0,0:05:08.39,0:05:09.65,Default,,0000,0000,0000,,'velocity' (скорост) Dialogue: 0,0:05:09.65,0:05:12.71,Default,,0000,0000,0000,,Оказва се че скоростта е ключова идея Dialogue: 0,0:05:12.71,0:05:15.13,Default,,0000,0000,0000,,Която ще вградим нашият physics engine Dialogue: 0,0:05:15.33,0:05:17.09,Default,,0000,0000,0000,,Ако даден обект има позиция Dialogue: 0,0:05:17.27,0:05:20.57,Default,,0000,0000,0000,,Промяната на тази позиция спрямо времето е скоростта на обекта Dialogue: 0,0:05:20.60,0:05:24.73,Default,,0000,0000,0000,,Скоростта е вектор, който ни казва как позицията на обекта Dialogue: 0,0:05:24.73,0:05:26.70,Default,,0000,0000,0000,,се изменя в дадени моменти от време Dialogue: 0,0:05:33.78,0:05:35.48,Default,,0000,0000,0000,,Нека разгледаме конструктора Dialogue: 0,0:05:35.48,0:05:38.16,Default,,0000,0000,0000,,Инициализирахме 'х' и 'у' отделно Dialogue: 0,0:05:38.94,0:05:40.19,Default,,0000,0000,0000,,Сега ще го направим с вектори Dialogue: 0,0:05:40.19,0:05:41.38,Default,,0000,0000,0000,,със същите стойности Dialogue: 0,0:05:59.86,0:06:08.22,Default,,0000,0000,0000,,Виждате че заменяме всяка двойка променливи с един вектор Dialogue: 0,0:06:23.48,0:06:26.23,Default,,0000,0000,0000,,Тън-тън-тън-тън-тън-тън-тъъъъ! Dialogue: 0,0:06:55.38,0:06:58.61,Default,,0000,0000,0000,,Вместо две променливи, като всяка една от тях се променя Dialogue: 0,0:06:58.61,0:07:00.56,Default,,0000,0000,0000,,със съотвената си скорост Dialogue: 0,0:07:01.54,0:07:03.67,Default,,0000,0000,0000,,сега имаме една променлива, променяйки се от 'velocity' Dialogue: 0,0:07:06.05,0:07:07.87,Default,,0000,0000,0000,,Какво би могло да се обърка? Dialogue: 0,0:07:09.50,0:07:10.52,Default,,0000,0000,0000,,Нека го пуснем Dialogue: 0,0:07:12.41,0:07:13.41,Default,,0000,0000,0000,,Не знам дали виждате Dialogue: 0,0:07:15.85,0:07:22.98,Default,,0000,0000,0000,,Операторът '+' е недефиниран за вектори Dialogue: 0,0:07:25.69,0:07:26.58,Default,,0000,0000,0000,,Побърква се Dialogue: 0,0:07:27.47,0:07:29.22,Default,,0000,0000,0000,,Какво се случва тук? Dialogue: 0,0:07:29.71,0:07:31.06,Default,,0000,0000,0000,,Сега ще се наложи да спрем за малко Dialogue: 0,0:07:31.06,0:07:32.45,Default,,0000,0000,0000,,и да се върнем на дъската Dialogue: 0,0:07:34.84,0:07:37.27,Default,,0000,0000,0000,,Нека размишляваме върху това какво означава Dialogue: 0,0:07:37.27,0:07:38.48,Default,,0000,0000,0000,,операторът + Dialogue: 0,0:07:38.48,0:07:42.02,Default,,0000,0000,0000,,Знаем че използването на + във програмирането работи доста често Dialogue: 0,0:07:46.77,0:07:47.53,Default,,0000,0000,0000,,Това работи Dialogue: 0,0:07:50.21,0:07:53.66,Default,,0000,0000,0000,,Бихме могли дори събираме низове (string) Dialogue: 0,0:07:55.75,0:07:57.100,Default,,0000,0000,0000,,Какво представлява '+' в този контекст? Dialogue: 0,0:07:58.04,0:07:59.98,Default,,0000,0000,0000,,Представлява конкатенация (слепване) Dialogue: 0,0:07:59.98,0:08:01.24,Default,,0000,0000,0000,,получаваме 'abcd' Dialogue: 0,0:08:01.24,0:08:02.81,Default,,0000,0000,0000,,+ в контекста на числата означава събиране Dialogue: 0,0:08:02.83,0:08:05.56,Default,,0000,0000,0000,,+ в контекста на низовете означава конкатенация Dialogue: 0,0:08:05.56,0:08:08.78,Default,,0000,0000,0000,,Какво става когато се опитаме да съберем вектори Dialogue: 0,0:08:18.21,0:08:22.42,Default,,0000,0000,0000,,Реалността е, че просто не можем да правим подобно нещо Dialogue: 0,0:08:25.30,0:08:26.12,Default,,0000,0000,0000,,Би било хубаво Dialogue: 0,0:08:26.12,0:08:30.12,Default,,0000,0000,0000,,Има други програмни езици, които биха ни позволили Dialogue: 0,0:08:30.12,0:08:34.12,Default,,0000,0000,0000,,да използваме '+' операторът върху векторите Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,За съжаление Processing знае как да събира вектори, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,толкова колкото знае как да събира шрифтове Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,или картинка със картинка Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Събирането е позволено само за примитивни числа Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,и низове Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,За да съберем тези два вектора Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Ще ни е нужно да използваме методи от PVector класа Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Тези методи са add(), sub(), mult() Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Много са Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Във следващото видео ще разгледаме някои от тези методи Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,и математика зад тях Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,За сега ще се задоволим само със събиране на вектори Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,имахме 'х' и 'хspeed' Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Сега имаме Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Ще ги съкратя Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Сега имаме 'loc' (местоположение) и 'vel' (скорост) Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Можем да използваме по-кратката версия '+=' Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,караме компютъра да добави 'xspeed' към 'х' Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,и го запази в 'х' Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Това означава, вземи този вектор Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,и го прибави към другия (loc) Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Ще разгледаме подробностите зад събирането на вектори Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,във следващото видео Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Сега вече знаем, че правилният подход е Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,да използваме метода аdd Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Сега ще го пуснем и ... Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,{\i1}дава му грешка защото използва 'х', който изтрихме{\i0} Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,През по-голямата част от времето, искаме да правим Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,неща като тези Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Искаме да манипулираме векторите като цяло Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Не искаме да навлизаме в компонентите им Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Сравнение: искаме просто да караме колата, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,и когато я караме не искаме да я управляваме чрез жиците и Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,'х' и 'у' компонентите са еквивалента на жиците Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,в този обект Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Но понякога се налага Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Това тук е такъв случай Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Сменяме навсякъде старите променливи с новите Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Не е много вълнуващо Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Просто използваме подобаващо х и у компонентите Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,на тези вектори Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Когато се опитваме да изобразим даден обект на екрана Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,със сигурност ще се наложи да изпозлваме Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,индивидуалните компоненти Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Всичките функции за изобразяване на форми Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,в Processing изискват позиция по х оста Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,и позиция по у оста Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Не можем да кажем нарисувай ми елипса Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,само с този PVector обект Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Би трябвало да проработи Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Имаме си двата вектора Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Инициализираме ги в конструктора Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Във функцията move() Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,скоростта се добавя към местоположението Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,И това го правим всеки кадър Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,и го рисуваме Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Работи Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Това е краят на това видео Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Бих ви предложил, преди да продължите към следващото Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,е да намерите някоя ваша скица Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,която има хиксове и у-ци навсякъде Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,и просто се опитайте Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,да я пренапишете, използвайки вектори Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,без да променяте функционалността Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,опитайте се да използвате някои от функциите Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,от PVector класа Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,но не се притеснявайте за тях Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,тъй като ще ги разгледаме в следващото видео