Если я вас правильно понимаю, у вас есть точка 2D в проекции прямоугольника, и вы знаете координаты 3D (мир) и 2D (изображение) всех четырех углов прямоугольника. Цель состоит в том, чтобы найти трехмерные координаты уникальной точки внутри прямоугольника (3D, мир), который выступает в данную точку.
(выполните шаги 1-3 ниже как для трехмерных (мировых) координат, так и для 2D (изображений) координат прямоугольника.)
- Определите (любой) один угол прямоугольника как его «источник» и назовите его «A», который мы будем рассматривать как вектор.
- Пометить остальные вершины B, C, D по порядку, так чтобы C была по диагонали напротив A.
- Рассчитать векторы v = AB и w = AD. Они формируют хорошие локальные координаты для точек в прямоугольнике. Точки в прямоугольнике будут иметь вид A + rv + sw, где r, s - действительные числа в диапазоне [0,1]. Этот факт верен в мировых координатах и в координатах изображения. В мировых координатах v и w ортогональны, а в координатах изображения - нет. Это нормально.
- Работая в координатах изображения, из точки (x, y) на изображении вашего прямоугольника вычислите значения r и s. Это можно сделать с помощью линейной алгебры на векторных уравнениях (x, y) = A + rv + sw, где только r и s неизвестны. Это будет сводиться к матричному уравнению 2x2, которое вы можете решить, как правило, в коде, используя правило Крамера. (Этот шаг будет нарушен, если определитель требуемой матрицы равен нулю. Это соответствует случаю, когда прямоугольник виден ребром. Решение в этом случае не уникально. Если это возможно, сделайте специальное исключение.)
- Используя значения r и s из 4, вычислите A + rv + sw, используя векторы A, v, w для world координат. Это точка мира на прямоугольнике.