Отличается ли трехмерный вектор от трехмерного точечного набора (x, y, z) в контексте математики 3D-игр?
Если они различны, то как вычислить вектор, заданный трехмерную точку?
Отличается ли трехмерный вектор от трехмерного точечного набора (x, y, z) в контексте математики 3D-игр?
Если они различны, то как вычислить вектор, заданный трехмерную точку?
Разница в том, что вектор является алгебраическим объектом, который может или не может быть задан как набор координат в некотором пространстве. (спасибо bungalobill за исправление моей неряшливости).
Точка - это просто точка, заданная координатами. Как правило, можно объединить два. Если вам задан набор координат и сказано, что они составляют "точку" без дополнительной информации (выбор основы и т.д.), Вы можете просто передать этот набор чисел обратно и законно заявить, что создали вектор.
Самое большое различие между ними состоит в том, что нет смысла делать то, что вы можете сделать с другим. Например,
Вы можете умножить (или масштабировать) вектор на число (обычно называемое скаляром) 2 * < 1 1 1 >= < 2 2 2 >
Вы можете спросить, насколько далеки друг от друга две точки: d ((1, 2, 3), (3, 2, 1) = sqrt ((1 - 3) 2 + (2 - 2) 2 + (3 - 1) 2) = sqrt (8) ~ = 2.82
Хороший интуитивный способ думать об ассоциации между вектором и точкой состоит в том, что вектор сообщает вам, как получить из начала координат (то есть одну точку в пространстве, которой мы назначаем координаты (0, 0, 0)) к его связанной точке.
Если вы переводите свою систему координат, вы получите новый вектор для той же точки. Хотя координаты, составляющие эту точку, будут проходить один и тот же перевод, поэтому между ними должно быть довольно простое соединение.
Аналогично, если повернуть систему координат или применить какое-то другое преобразование (например, сдвиг), то также будут меняться координаты и вектор, связанные с точкой.
Также возможно, что вектор является чем-то другим целиком, например ограниченная функция на интервале [0, 1] является вектором, потому что вы можете умножить его на действительное число и добавить его к другой функции на интервале и он удовлетворяет определенным требованиям (а именно аксиомы вектора пространства). В этом случае мы думаем о наличии одной координаты для каждого действительного числа x в [0, 1], где значение этой координаты равно f (x). Итак, это самый простой пример бесконечномерного векторного пространства.
Существуют всевозможные векторные пространства и понятие о том, что вектор является "точкой и направлением" (или тем, что он должен быть) на самом деле довольно пустым.
Вектор представляет собой переход из одного состояния в другое. Чтобы создать один, вам нужно два состояния (в данном случае, точки), а затем вычесть начальное состояние из конечного состояния, чтобы получить результирующий вектор.
Векторы - это более общая идея о том, что точка в трехмерном пространстве.
Векторы могут иметь 2, 3 или n измерения. Они представляют собой множество величин в физическом мире (например, скорость, сила, ускорение), кроме положения.
Математик скажет, что вектор является тензором первого порядка, который преобразуется согласно этому правилу:
u(i) = A(i, j)v(j)
Вам нужны как точка, так и вектор, потому что они разные. Точка в трехмерном пространстве, обозначающая положение, является вектором, но каждый вектор не является точкой в трехмерном пространстве.
Тогда есть представление об информационном значении вектора как контейнера - это абстракция для массива значений или ссылок. Это другое понятие из математической идеи вектора, поскольку каждый векторный контейнер не должен подчиняться закону тензорного преобразования первого порядка (например, Vector of OrderItems). Это еще одна отдельная идея.
Важно помнить об этом, когда речь идет о векторах и точках.
Отличается ли трехмерный вектор от трехмерного точечного набора (x, y, z) в контексте математики 3D-игр?
Традиционный вектор означает направление и скорость. Точку можно считать вектором из мира оргина одного временного шага. (хотя он не может считаться математически чистым)
Если они различны, то как вычислить вектор, заданный трехмерную точку?
target-tower - общая мнемоника.
Осторожно по поводу этого. Результирующий вектор является действительно нормальной * скоростью. Если вы хотите изменить его на что-то полезное в игровом приложении: сначала вам нужно сначала нормализовать вектор.
Пример: Джо находится в (10,0,0), и он хочет пойти (10,10,0)
Целевая башня: (10,10,0) - (10,0,0) = (0,10,0)
Нормализовать полученный вектор: (0,1,0)
Применить "физику": (0,1,0) * скорость * elapsed_time < speed = 3, и мы скажем, что компьютер застыл целых 2 секунды между последним шагом и этим для удобства вычислений >= (0,6,0)
Добавьте результирующий вектор в текущую точку Джоса в пространстве, чтобы получить следующую точку в пространстве:... = (10,6,0)
Normal = vector/(sqrt (x * x + y * y + z * z))
... Я думаю, у меня есть все здесь.
Вектор - это изменение состояний. Точка - статическая точка. Два вектора могут быть параллельными или перпендикулярными. Вы можете получить произведение двух векторов, которое является третьим вектором. Вы можете умножить вектор на константу. Вы можете добавить два вектора.
Все эти операции не допускаются. Таким образом, программный мудрый, если вы считаете, что и как класс С++, в векторном классе будет много таких методов, но, вероятно, только Get и Set for point.
Вектор - это строка, то есть последовательность точек, но она может быть представлена двумя точками, начальной и конечной точками.
Если вы берете начало координат в качестве начальной точки, то вы можете описать свой вектор, дающий только конечную точку.
В контексте игровой математики разницы нет.
Точки - это элементы аффинного пространства. † Векторы - это элементы векторного (линейного) пространства. Когда вы выбираете источник в аффинном пространстве, он автоматически создает линейную структуру в этом аффинном пространстве. обратное также верно: если у вас есть векторное пространство, оно уже удовлетворяет всем аксиомам аффинного пространства.
Дело в том, что когда дело доходит до вычислений, единственным способом численного представления аффинного пространства является использование кортежей чисел, которые также образуют векторное пространство.
Каждый объект в игре всегда имеет происхождение, и очень важно знать, где он находится. Этот источник установлен относительно происхождения мира, который установлен относительно источника камеры/области просмотра. Вершины объекта представлены в виде векторов - смещений от начала координат объекта. Вы используете матричное умножение для преобразования объектов - это слишком чисто операция векторного пространства (вы не можете умножить аффинную точку на матрицу, не указав вначале источник). И т.д., И т.д. Как мы видим, все эти тройки чисел, которые мы можем считать "точками", на самом деле являются векторами в локальной системе координат.
Так есть ли какая-либо причина отличать эти два от изучения алгебры? Это ненужная абстракция, а ненужные абстракции вредны (KISS). Так что мой ответ - нет, просто выберите один векторный тип.
† Или любое топологическое пространство вне контекста разработки игр.