Как подсчитать на четырех пальцах до пятнадцати

Кисть левой руки

В этом нам поможет двоичная система счисления.

Берем левую руку (изображение скелета из википедии) и сжимаем в кулак. Это ноль. Поднимаем указательный палец, это единица. Сжимаем в кулак — опять ноль. Поднимаем средний палец (многие делают это не задумываясь) — это двойка. Сжимаем кулак и (внезапно!) снова ноль. Указательный и средний (типа V) — это три. И так далее…

…l 00012=110
..l. 00102=210
..ll 00112=310
.l.. 01002=410
.l.l 01012=510
.ll. 01102=610
.lll 01112=710
l… 10002=810
l..l 10012=910
l.l. 10102=1010
l.ll 10112=1110
ll.. 11002=1210
ll.l 11012=1310
lll. 11102=1410
llll 11112=1510

Что такое матрица 4×4 в трехмерных играх?

Когда я впервые столкнулся с преобразованием координат в программировании игр — это был, мягко говоря, шок. Высшую математику в техникуме я усердно прогуливал, а если присутствовал, то только для галочки. Потому что мне неинтересно вручную рисовать матрицы, потом их умножать, транспонировать, инвертировать и находить детерминант или определитель.

Ну согласитесь — нормального человека нельзя заставить умножать и складывать 32 числа непонятно для какой цели.. Тупо делать это только ради оценки в журнале. Я так не умею, а Вы?

Итак, что же такое матрица 4×4? Какую роль она играет в трехмерных играх? Зачем эти 16 чисел складывать и умножать? СКАНДАЛЫ, ИНТРИГИ, РАССЛЕДОВАНИЯ.. Читайте дальше в моем журнале после короткой рекламы.

Рассмотрим абстрактную матрицу, в которой злой гений зашифровал положение объекта в трехмерном мире:

M=\begin{bmatrix}A&E&I&M\\B&F&J&N\\C&G&K&O\\D&H&L&P\end{bmatrix}

Начнем расшифровку.. В матрице присутствуют три вектора, вот они перед Вами:

\vec{X}=(A, B, C)
\vec{Y}=(E, F, G)
\vec{Z}=(I, J, K)

Как нетрудно догадаться, это вектора осей системы координат. Длина этих векторов — это масштаб объект вдоль каждого вектора.

Рассмотрим такую матрицу:

M=\begin{bmatrix}2&0&0&M\\0&3&0&N\\0&0&0.5&O\\D&H&L&P\end{bmatrix}

Что следует из этой матрицы? Во-первых, по X объект увеличен в два раза, по Y в три раза, по Z уменьшен в два раза.

Смотрим дальше. Числа M, N и O — это смещение объекта вдоль этих векторов (по X, Y и Z соответственно).

С остальными числами я пока не разобрался. Число P практически всегда равно единице, остальные — нулю. Есть подозрение, что они имеют отношение к проецированию трехмерного объекта на двухмерный экран.

Ссылка на подробный обзор матриц и операций на ними из комментариев: http://www.opengl-tutorial.org/ru/beginners-tutorials/tutorial-3-matrices/

Что такое кватернион — объяснение человеческим языком

Для закончивших ВУЗ данный вопрос не представляет проблемы, а для нас, учащихся ПТУ и техникумов, это тайна за семью замками. Особенно если вы, как и я, постоянно прогуливали высшую математику.

Цитата из википедии: Кватернио́ны (от лат. quaterni, по четыре) — система гиперкомплексных чисел, предложенная Гамильтоном в 1843 году.. Вы что-нибудь поняли? Значит дальше вам читать не надо, до свидания! Заходите еще..

Кватернион — это ось, относительно которой будем вращать объект и угол, на который мы будем вращать объект относительно этой оси. Всего у кватерниона четыре компоненты: X, Y, Z и W. XYZ — та самая ось поворота (нормализуем и каждый компонент умножаем на синус половины угла), W — угол поворота (который задается через косинус половины угла).

Псевдокод получения кватерниона из угла и оси:

def quatFromAngleAxis(self, a, x, y, z):
    # Длина вектора xyz
    l = sqrt(x * x + y * y + z * z)
    # Нормализуем вектор xyz
    x = x / l
    y = y / l
    z = z / l
    # Синус половины угла (a - угол в радианах)
    hSin = sin(a / 2)
    # Заполняем xyz
    self.x = x * hSin
    self.y = y * hSin
    self.z = z * hSin
    # Косинус половины угла
    hCos = cos(a / 2)
    # Заполняем w
    self.w = hCos

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

Ещё более простым языком: представьте, что у вас есть некий объект, допустим яблоко, вы протыкаете его спицей и вращаете. Так вот спица — это ось вращения, её направление — наш вектор (x, y, z), а угол вращения — это наш угол a, который означает насколько вы повернули яблоко на спице по часовой стрелке или против.

Если вас приводит в недоумение термин «матрица», рекомендую почитать заметку: Что такое матрица 4×4 в трехмерных играх?

Блог Евгения Жирнова