Раздел:
Разное
Сделано при поддержке X-Forge

Привет ребятушки, сегодня мы узнаем: что же такое вектор, где он нужен и как его использовать.
А самое главное - все полностью на GUI и на актуальном патче, 1.26.

Что такое вектор?

Вектор - это направленный отрезок в пространстве. Бояться такого определения не нужно.
Давай-те разбираться в обратном порядке:
  1. Пространство - это всего-лишь множество точек, которые можно задать тремя числами.
Самые смышленые из вас уже обратили внимание, что именно в пространстве мы и живем!
  1. Отрезок - это линия, имеющая начало и конец.
А раз она в пространстве, то начало и конец можно представить с помощью 2х наборов из 3х чисел.
  1. Направленный - в нашем представление, отрезок не только две точки, но и указатель для направления.
Для примера можете воспользоваться своим указательным пальцем, укажите куда-нибудь! - Это именно то, что делает вектор.

Для чего нужен?

В нашем любимом варкрафте, его очень сильно боятся, но этого делать не стоит, ведь он упрощенная версия полярного смещения, который используется повсеместно!
Дело простое, векторы будем использовать для триггерного перемещения.

Примеры использования

Прыжок - не проблема. Конечный результат ниже, заинтересованным прошу ступать на две ступени ниже.
А в триггерах всего ничего, один массив с размерностью 3, да сложение с программы первого класса!
Не забывая все проинициализировать!
Объяснение построчно

Прыжки в длину - не проблема. Всего-то одна строчка, да и только!
Объяснение построчно

А по диагонали? - А вот нам и пригодятся все 3 значения в нашем массиве!
Объяснение построчно

Но вы ведь скажете, это все не то, полярки лучше справляются, ведь можно двигать с помощью угла!
И время вспомнить, что полярки тоже своего рода вектор...
На простом примере, где грифон описывает окружность
Объяснение построчно
Почему тут косинусы и синусы, вместе с непонятным умножением?!
Все в порядке, наверняка у вас был плохой учитель математики, который не показал, как все ваши пройденные темы переплетаются.
Вот они наши графики синуса и косинуса:
Особо заинтересованные уже уловили связь между радианами и синусом с косинусом. Для остальных стоит лишь знать, что нужно делать именно так.
А почему умножение на скорость?
Получаемый вектор таким способом является единичным, то есть его длина равна 1-му, и следует, что дистанция между срабатываниями триггерами будет равна именно 1, а в варкрафте это 1 / 128 белой клетки, не дело совсем! Поэтому мы и помножим на скорость.

Но это все лишь детский функционал.
Немного побегу вперед и покажу, что вы сможете делать, поняв эту часть:
спойлер
Вернемся к началу, есть еще один способ получить вектор, с помощью точки начала и точки конца.
Все делается по простой формуле:
Х_вектора = Х_конца - Х_начала
Y_вектора = Y_конца - Y_начала
Z_вектора = Z_конца - Z_начала
На иллюстрации буквально то, чем является вектор:
Если на данном этапе к координатам начала прибавить координаты вектора, то мы получим как раз координаты конца.
Но, так как мы делаем перемещение, нас такой расклад не устроит. И теперь нам нужно сделать из нашего вектора - единичный вектор, или по-научном, нормализовать. Делается это несложно, нужно лишь координаты вектора разделить на длину вектора.
Встает небольшой вопрос, А как найти длину?
Все также просто, вспоминаем теорему пифагора, проводим аналогию и получаем:
Длина = X * X + Y * Y + Z * Z 
Почему так? Складывайте треугольники и увидите закономерность, но не об этом сейчас.
И наконец, чтобы нормализовать, воспользуемся этой формулой:
Х_вектора = Х_вектора / Длина 
Y_вектора = Y_вектора / Длина 
Z_вектора = Z_вектора / Длина 

Домашнее задание

Соотнести пример сложного движение с объяснением выше
Попробовать сделать свое сложное движение:
  1. Движение одного юнита на другого с фиксированной скоростью
  2. Движение юнита зад вперед, пока другой движется на первого
  3. Движение юнита по ключевым точкам в виде юнитов, как в моем примере
  4. Сделать более чем две ключевые точки.

Дисклеймер

Ни в коем случае не использовать примеры в своих проектах!
Я не женился на гуи, поэтому код течет везде, где только может!
Вам могу дать две таблетки на выбор: переписать все с нуля или перейти на жасс!
Переходить я вам крайне советую, потому что это издевательство сидеть по несколько часов тыкать в окнах!

На этом простейшее использование векторов закончилось.
Остальное я рассказывать GUI пользователям не буду, вам и этого хватит.
Всем, решившим перейти, удачного ожидания моего гайда-спидрана по жассу для самых маленьких.
С радостью помогу всем, без зазрений совести пишите в комментариях.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
30
2 года назад
0
0
22
2 года назад
0
Clamp, нет гуи и объяснений для 0+
0
17
2 года назад
0
Ля, красота
0
30
2 года назад
0
Ну, как обучающий материал оно и не предлагалось, зато есть адекватная реализация с удобным и понятным API.
И наличие гуи в целом скорее минус в моём понимании. \о/
0
9
2 года назад
0
Пригодится
Этот комментарий удален
1
11
2 года назад
1
Знаменитый актуальный патч 1.26)
0
23
2 года назад
0
Ну эта тема пригодится на любом движке, хотя не на любом движке нужно такое писать самому...
0
37
2 года назад
Отредактирован ScorpioT1000
0
На правах рекламы: wGeometry
0
2
2 года назад
0
Сделайте пожалуйста, такую же подробную статью, по кэшу и синхронизации переменных
0
19
1 год назад
0
Извиняюсь за археологию, но твой выбор демонстрационного инструмента вызывает недоумение. Почему GUI? Гуишникам векторы не нужны. Да и кто будет использовать векторы на Гуях? Почему нельзя было просто использовать vJass и сделать боле углублённую статью с написанными структурами Vector2D и Vector3D?
1
29
1 год назад
1
KaneThaumaturge, согласен. И более подробно раскрыть векторное движение.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.