Вычисление прямоугольной 3D-координаты с координатой его тени?

Иногда возникала проблема в том, что это прямоугольник, повернутый в 3D и являющийся перспективным переходом (например, в CSS) рисовать как четырехугольник. Но мы хотим получить прямоугольник (ширина, длина, угол Эйлера, перспектива), преобразованный с помощью поворота и рисования перспективы в качестве четырехугольника.

2 ответа

Решение


Решать:
Система координат:
Начало системы координат совпадает с точкой пересечения диагоналей. Топор Z нормальный к четырехугольнику. Топор Х пересекает точку А
a,b,c,d;-;- прямоугольный с координатами
а (х 1, у 1, z 1); b (x 2, y 2, z 2); с (х 3, у 3, z 3); а (х 4, у 4, z 4);
А, В, С,D-тень. Угловые точки A (q 1, p 1, 0); B (q 2, p 2, 0); C (q 3, p 3, 0); D (q 4, p 4, 0);
к перспективе.
В этой системе координат y 1 = y 3 = 0.
Рисунок 1.
Из подобия преобразования треугольников есть:

x 1 = 1-z 1 / k q 1;
x 3 = 1-z 3 / k q 3
Из постановки задачи было то, что диагональный крест находится в начале координат таким образом:
z 3 = -z 1 и x 3 = -x 1
Подставляя в вышеприведенном выражении и приравнивая друг друга, было:
x 1 = 2 * q 1 * q 3 / (q 3 -q 1);
z 1 = (q 1 + q 3) / (q 1 -q 3) * k.

Чтобы упростить другие вычисления, представьте, что диагональ второго прямоугольника (bd) лежит в системе координат, в которой координата Y диагональных точек равна нулю. В этой системе координат точки координат b и d были такими же, как точки a и c, но мы должны изменить z 1 на z 2, z 3 на z 4, x 1 на x 2, x 3 на x 4, q 1 на q 2 q 3 до q 4.
Для перевода из системы воображения в реальную систему используйте формулу координат вращения (Z ax - то же самое, z-координата равна)
Рис.2

X = X '* соз (а); у = у '* Sin (а);
Результат был:
x 2 = -x 4 = 2 * q 2 * q 4 / (q 4 -q 2);
y 2 = -y 4 = x 2 * tan (a);
z 2 = -z 4 = (q 2 + q 4) / (q 2 -q 4) k; tan (a) = (p 2 -p 4) / (q 2 -q 4)

abcd был параллелограммом. Диагональная точка пересечения делит диагональ на половину. Нам нужно еще одно выражение сделать прямоугольным. Используйте угол, равный 90 градусам. Сделать скалярный вектор умножения двух сторон в abcd. По координатам это было:
(ab) (da) = y 4 y 2 + (x 1 -x 4) (x 1 -x 2) + (z 1 -z 4) * (z 1 -z 2) = 0;
f = (q 1 * q 2 -q 3 q 4) (q 1 * q 4 -q 2 * q 3)
g = -tan 2 (a) * q 4 2 q 2 2 (q 1 -q 3) 2 + (- q 1 q 2 (q 3 + q 4) + q 3 q 4 (q 1 + q 2)) * (q 1 q 2 (q 4 -q 3) + q 3 q 4 (q 1 -q 2))
Получаем уравнение к k(в перспективе): f * k 2 -g = 0, решаем его

к = SQRT (г / ж).


Собрав все формулы мы получим все координаты точки abcd.
Из координаты угла легко рассчитать сторону прямоугольника.

Расчет кватерниона, матрицы вращения, углов см. Расчет кватерниона по координатам 2 точки объекта в двух положениях.

Рисунок рис.1 точки a,c диагональный прямоугольник (желтый), точки A,C диагональный четырехугольник (тень) (красный)

рис.1 точки а, в диагональный четырехугольник (тень) (красный

рис.2 a,b,c,d точки прямоугольника (желтый) A,B,C,D тень (четырехугольник) (красный)

рис.2 a,b,c,d точки прямоугольника (желтый) A,B,C,D тень (четырехугольник) (красный

Другие вопросы по тегам