Перемещение начала координат в 2D векторном пространстве - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь узнать больше о Векторах в 2D-пространстве и о том, как использовать их в Gamedevelopment.

Я создал небольшой проект для визуализации «проекции» вектора A на вектор B в C # с использованием фреймворка Monogame.

projection example

Это все работает нормально, но теперь я хочу переместить источник (который в данный момент находится в верхнем левом углу) в произвольную позицию. Так, например, я могу нарисовать свои линии в середине экрана.

Сначала я хочу сделать это без помощи библиотеки, чтобы понять, что происходит.

Но я не могу понять, как это сделать, и если это на самом деле лучшая практика в векторных пространствах или что мне просто нужно «нарисовать» свои линии со смещением ..

Мое понимание символов и функций математики невелико, поэтому, если вы дадите мне математические ответы, объясните символы также.

EDIT:

Я создал другой проект для визуализации, если точка находится в пределах определенного угла, но на этот раз я попытался нарисовать все со смещением (справа) рядом с исходными векторами (слева).

projection2 example

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

EDIT2:

Давайте сделаем мою проблему немного яснее .. Если вы посмотрите на мой второй пример. Представьте себе источник права быть Агентом (NPC или Игрок или что-то еще), а сегмент BC (и BC2) - его поле зрения. Если я хочу вычислить то, что находится в его видении, я могу сделать это так же, как я сделал пример , но эта точка «начала» была бы в (0,0) (вверху слева) и это отстает от Агента.

Я, вероятно, упускаю что-то очевидное и слишком усердно думаю об этом ..

1 Ответ

0 голосов
/ 09 ноября 2018

Итак, я наконец выяснил, как это работает ..

Видимо, вы работаете с другими spaces или frames вместо перемещения origin (также называемого reference).

Пространство может жить внутри другого пространства, но давайте пока будем проще с двумя пробелами.
Первый пробел - это ваше «основное» пространство (большую часть времени называется world в Gamedevelopment)
Второе пространство - это ваше пространство просмотра (или camera)
(я использую world и view в этом ответе)

Я делал все свои вычисления вектора внутри своего мирового пространства. Таким образом, при отрисовке этих векторов на экране они рисуются в позициях относительно эталона мира (который находится в верхнем левом углу экрана).


Чтобы нарисовать мои векторы в другом месте, мне нужно translate их.
Перевод движущихся векторов вдоль оси.

Это действие «изменения» положения / масштаба / поворота вектора называется Transformation.

Мы можем видеть преобразования в векторном пространстве просто как переход из одного пространства в другое. цитата

Этот перевод выполняется с помощью Translation Matrix (подробнее см. В цитате).


Итак, зная эти пробелы и преобразование я исправил свою программу.

Все мои векторы инициализируются так же, как и раньше, но когда я рисую свои векторы на экране, я транслирую их в соответствии с заранее определенной матрицей перевода. Я называю эту матрицу моей viewMatrix, потому что она переводит векторы из пространства world в пространство view.

Но есть одна вещь, которую нужно исправить.

Вектор pointA определяется не в world пространстве, а в view пространстве. Это означает, что когда моя мышь находится в положении (20,20), эта позиция отличается от позиции (20,20) в моем world соке.

Чтобы это исправить, мне нужно translate мой pointA вектор с инвертированием из translation matrix. Это преобразует вектор в вектор внутри пространства world.


Так вот и все ... Мне понадобилось 2 дня, чтобы понять это ..

Вот исправленная версия второго примера.
Слева: мой world пробел
Справа: мой view пробел

Обратите внимание, что моя мышь теперь правильно выровнена в пространстве моего взгляда, а не в пространстве моего мира projection2_fixed


Вот некоторые ресурсы, которые я собрал по пути:
Статья - Матрицы преобразования мира, вида и проекции
Истинная сила матрицы (преобразования в графике) - Компьютерный файл
РБ Уитакер - Основные матрицы
Создание игрового движка: трансформации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...