В чем разница между точечным преобразованием и векторным преобразованием?

11

Вот что сказал мне лектор в курсовой работе:

Мы рассматриваем только 4 * 4 матрицы. Они используются для вращения, масштабирования или перемещения объектов (или любой комбинации этих операций). Матрицы также используются позже при реализации модели виртуальной камеры. Если вы не знаете разницу между векторным преобразованием и точечным преобразованием, найдите его.

Я не могу найти ответ и создал аккаунт для этого сайта только для этого вопроса.

SA
источник
1
В дополнение ко всем остальным ответам и потому, что другие люди уже давно ответили на этот вопрос в других местах, вы можете проверить: scratchapixel.com/lessons/…
user18490

Ответы:

9

Вот простой ответ.

В 4D, чтобы иметь возможность умножить их на матрицу 4x4, векторы представлены как (x, y, z, 0), а точки представлены как (x, y, z, 1).

Так как 4-я строка матрицы 4x4 представляет перевод матрицы, приведенные выше представления делают так, что точки влияют на перевод, а векторы - нет.

Хотя на векторы и точки влияет вращение, масштабирование и т. Д.

Предостережение:

Следует ожидать более глубокого обсуждения, если вы ожидаете, что векторы будут иметь определенные свойства. Например, если вы преобразуете нормаль треугольника по той же матрице, что и трансформируете его вершины, скорее всего, он больше не будет вектором нормали этого треугольника. Это потому, что нормальные векторы имеют своего рода обратную связь с вершинами, из которых они рассчитаны.

Алан Вульф
источник
Нормалы не работают, потому что они не векторы. Не знаю, хорошее введение в концепцию, хотя.
МБ Рейнольдс
@MBReynolds В математическом смысле нормали - это такие же векторы, как точки или направления. Проблема здесь заключается в том, что преобразования, которые мы применяем к точкам поверхности для их преобразования, не применяются к нормалям.
Nbro
2
Нормы поверхности - это бивекторы, а не векторы. Мы можем найти нормаль по перекрестному произведению двух векторов, результатом является бивектор. СМ. За Вогенсена: gist.github.com/pervognsen/c6b1d19754c2e8a38b10886b63d7bf2d
МБ Рейнольдс
4

Из того, что я узнал, так как я еще и учусь, то, что вы хотите работать с матрицами, чтобы обрабатывать повороты, масштабирование и переводы одинаково, то есть умножать на матрицу (т.е. , а матрицы).4×44×4

Помните, что без этих матриц переводы были бы представлены суммированием с вектором, тогда как вращения и масштабирование представлены с использованием умножений с вектором и скалярным коэффициентом соответственно.4×4

Теперь вопрос: как перейти от трехмерных систем координат к четырехмерным ? Ответ - " однородные координаты ".

Итак, что это значит? Мы строим матрицы × для представления поворотов, масштабирования и сдвига, поэтому мы используем только умножения матриц для представления преобразований (например, поворотов, масштабирования и т. Д.). Как мы их строим индивидуально, это более конкретно, но вы можете посмотреть его в Интернете.4×4

На данный момент у нас есть умножить на матрицы и трехмерные векторы, но пока это не полезно, потому что вы не можете умножить умножить на матрицы и векторы, поскольку размеры не совпадают. Вот почему, когда мы работаем с гомогенными координатами, нам также необходимо преобразовать наши заданные трехмерные точки в соответствующие четырехмерные.4×44×43D

Как мы делаем это?

Мы различаем векторы направления и положения . Векторы направления, как следует из названия, имеют направление, на которое они указывают; мы также заботимся об их длине, но на них не влияют переводы, так как нас не заботит их положение. Векторы положения (или просто «точки») могут быть переведены или перемещены; они обычно представлены относительно начала координат, то есть как вектор от начала координат до самой точки.

Мы преобразуем трехмерные векторы направления, добавляя в качестве й координаты соответствующего однородного вектора: мы добавляем ноль, потому что это в основном устраняет эффект трансляций. Мы делаем то же самое с векторами положения, но вместо мы добавляем по противоположной причине.0401

Например, если у нас есть вектор направления , мы преобразуем его, выполнив . Аналогично, если бы у нас был точечный вектор мы бы преобразовали его в3Dv=(v1v2v3)v=(v1v2v30)u=(u1u2u3)u=(u1u2u31)

Примечание: чтобы преобразовать из однородных координат обратно в соответствующие , вы не можете просто удалить координату, если она по- прежнему не равна (или соответственно).3D4th10

nbro
источник
Ответ на этот вопрос будет более полным , если вы заметили , что в реальных однородных координатах , для любого также является правильным представление точки . При преобразовании из обычных 3D-координат в 4D-проективные координаты удобно выбирать , но разрешение других значений в обратном преобразовании позволяет нам также представлять перспективные преобразования с использованием умножения матрицы 4D. (wx,wy,wz,w)w0(x,y,z)w=1w
Ильмари Каронен
2

Если вы посмотрите определение вектора и точки, то вектор:

Величина, такая как скорость, полностью определяется величиной и направлением. http://www.thefreedictionary.com/vector

И дело в том:

Безразмерный геометрический объект, не имеющий свойств, кроме местоположения. http://www.thefreedictionary.com/point

Таким образом, вы можете сказать, что вектор - это направление с масштабом, а точка - это местоположение.

Итак, если вы преобразуете вектор, вы просто вращаете и масштабируете его. С помощью точки вы также переводите ее (вращение и масштабирование точки происходит вокруг начала координат, поскольку это просто место, в котором сама точка не может быть повернута).

В большинстве случаев вектор и точка помещаются в один контейнер, вектор с 4 компонентами. Единственная разница - это компонент w. Если компонент w равен 0, то это направление. Если это 1, то вектор является точкой.

Причину этого можно найти в самой матрице. Он использует способ умножения вектора на 4 компонента с матрицей 4x4. Если вы не знаете, как это работает, я бы предложил быстрый Google.

В большинстве случаев вы используете матрицу 4х4. Обычная матрица преобразования может выглядеть следующим образом: (вращение Вы можете сказать, что масштаб и масштаб находятся в области 3x3, так что для поворота и масштабирования можно также использовать матрицу 3x3, но когда приходит перевод, нам нужен этот 4-й столбец.)

[rot+scalerot+scalerot+scaletranslationrot+scalerot+scalerot+scaletranslationrot+scalerot+scalerot+scaletranslation0001]

Как вы можете видеть, если последний компонент равен 0, то у вас есть умножение с 0, и, следовательно, результат равен 0, и нет перевода.

Это облегчает работу в компьютерной графике с полигональными объектами. У вас есть та же матрица преобразования для преобразования позиций, но и нормали. Поскольку для нормали их компонент w установлен на 0, а для компонента w позиций - 1, нормали просто поворачиваются (и также масштабируются, что может привести к некоторым странным вещам, поэтому в большинстве случаев нормализация нормализуется после. Это не ' На самом деле рекомендуется использовать одну и ту же матрицу для позиций и поворотов из-за странных вещей! Посмотрите на комментарий @JarkkoL.) и позиции будут переведены (и повернуты и масштабированы вокруг начала координат).

Надеюсь, я не ошибся: P, и это помогло вам!

bram0101
источник
2
Нормалы не преобразуются с той же матрицей преобразования, что и позиции. Вам необходимо вычислить обратное значение транспонирования подматрицы 3x3, чтобы правильно преобразовать нормали для преобразований с неравномерным масштабированием и / или перекосом.
JarkkoL
@JarkkoL да, это правда, вы правы с этим. Лучше не использовать одну и ту же матрицу, но в зависимости от реализации это делается. В большинстве случаев люди не слишком заботятся о перекосе нормалей, потому что они либо вообще не используют неравномерное масштабирование, либо масштабирование. Та часть о преобразовании позиций и нормалей была больше о том, что было бы полезно использовать один контейнер.
bram0101