Насколько ошибочна моя идея для вычисления 2D координат из данных 3D пространственных координат - PullRequest
0 голосов
/ 06 февраля 2019

Я пытался написать программу в Processing 3, которая будет отображать точки из трехмерного пространства в окне просмотра.Я пока не буду показывать код, потому что смысл этого вопроса в том, есть ли какие-либо недостатки в моем методе отображения пространства в перспективе.

Relationships between vectors and points in relation to the camera's direction

Идея, лежащая в основе моегоФормула для расчета координат экрана X и Y для точки в трехмерном пространстве состоит в сравнении альфа- и бета-углов (углы на картинке, значения не имеют значения прямо сейчас).Поскольку координаты 0,0 на экране начинаются в верхнем левом углу, вот что я нашел для X и Y:

где:

  • γ - это угол между правым краем поля зрения и CP ИЛИ просто α + β
  • β - это половинный угол поля зрения
  • α - угол между вектором прямого изображения камеры и вектором CP.
  • ? такой же, как γ, но в плоскости XZ (взгляд вверх и вниз)

Таким образом, когда:

  • α = 0, X - ширина, и это ставит точку у правого края экрана
  • α = β, X - середина экрана (ширина /2) и
  • α = 2β, X равен 0, и это левый край экрана.

Я рассчитал углы, используя функции acos () и asin () иони были правы.Первой проблемой был угол α;оно никогда не было отрицательным, означая, что γ никогда не опустится ниже β, так как

β + α = β + 0.

Мне удалось исправить это, умножив α на перекрестное произведение векторов CP и направления (на изображении), чтобы определить, является ли α положительным или отрицательным.

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

Есть ли у вас идеи, есть ли недостатки в моих формулах?Спасибо за помощь!

...