Похоже, вы находитесь в следующей ситуации: у вас есть фиксированная вертикальная линия с именем axis
, которая является вертикальной осью вращения, вокруг которой вы вращаете поверхность. Кроме того, у вас есть плоскость S
, представляющая собой экран вашей камеры. Экранная плоскость S
также вертикальна, что эквивалентно тому факту, что она параллельна вращению axis
. Затем вектор нормали N
плоскости экрана S
указывает на axis
.
Вводим фиксированную систему координат (она называется камерой-системой, мы видим мир с точки зрения камеры и она неподвижна, потому что ваша камера неподвижна) следующим образом: выбираем неподвижную точку O
на screen-plane S
и нарисуйте ось O ---> y
на S
как уникальную линию на S
, параллельную axis
и проходящую через O
. Ось O ---> x
является уникальной линией, перпендикулярной оси O ---> y
и, следовательно, горизонтальной. Вектор нормали N
выровнен с осью O ---> z
, которая также является горизонтальной, начиная с камеры и проходя через axis
, пересекая последнюю ортогонально.
Система координат на плоскости экрана, назовем ее системой-экраном, это просто система, полученная как z = 0
(ортогональная проекция трехмерных точек на экран S
), т.е. это двумерная система O x y
, где O--->x
и O--->y
оси системы экрана также являются осями системы камеры, определенной выше.
Насколько я понимаю, вы дважды фотографируете поверхность, один раз в одном положении, второй раз после поворота вокруг axis
на угол a
. Возьмите одну из отмеченных точек P
на поверхности перед вращением. Тогда его ортогональная проекция p1
на экран S
имеет координаты [x1,y1]
в системе screen0. После поворота на угол a
поверхности вокруг axis
точка P
теперь имеет ортогональную проекцию p2
на экран S
с новыми координатами [x2,y2]
в экранной системе. Я предполагаю, что вы можете определить координаты любой точки на экране относительно системы экрана. Если не ошибаюсь, цель эквивалентна определению координат P
до и после поворота в трехмерном пространстве O x y z
. Однако, поскольку ваша проекция на экране S
ортогональна, вам просто нужно определить z
координаты точки P
до и после поворота. Отсюда вы можете найти криволинейные координаты P
на поверхности, которые могут быть просто координатами экрана, спроецированного на поверхность, поэтому параметризация поверхности может быть, например:
X = x1
Y = y1
Z = z1(x1, y1)
Предположим также, что вы знаете расстояние l
между экраном камеры S
и осью вращения axis
. Я считаю, что все эти предположения, сделанные до сих пор, очень разумны, поскольку вы можете контролировать настройку камеры (то есть плоскость экрана S
вместе с ее системой координат, что довольно естественно) и ось вращения axis
. Ситуация как на картинке ниже:
Как видите, мы выбрали горизонтальный срез y = y1
и из-за всего расположения систем координат экрана и камеры имеем y = y1 = y2
. Обратите внимание, что из-за вращения axis
у нас есть dist(P0, axis) = dist(Pa, axis)
. Следовательно, треугольник P0 Pa axis
равнобедренный с углом a
при вершине axis
. Итак, если вы проведете ось отражательной симметрии этого треугольника через вершину axis
, вы получите две копии одного и того же прямоугольного треугольника, в котором у вас есть уравнение
dist(P0, Pa)/(2*dist(axis, P0)) = sin(a/2)
Объедините это последнее уравнение с уравнением
dist(P0, axis) = dist(Pa, axis)
Если возвести оба уравнения в квадрат и составить из них одну систему, то получится система двух уравнений
dist(P0, Pa)^2 = 4*(dist(axis, P0))^2*(sin(a/2))^2
dist(P0, axis)^2 = dist(Pa, axis)^2
Если вы посмотрите на три (прямоугольных) трапеции O p1 P0 axis
, затем O p2 Pa axis
и, наконец, P0 p1 p2 Pa
, получите систему двух квадратных уравнений, двумя неизвестными которой являются координаты z z1
и z2
. Остальные параметры даны: x1, x2, l, a
. Вы должны решить для z1
и z2
. Будет четыре пары решений, вы должны выбрать те, которые соответствуют реальной ситуации. Однако точное решение системы может быть затруднено, поэтому вы можете просто использовать метод Ньютона, чтобы найти очень хорошее приближенное решение.
Я написал систему на картинке, вы можете увидеть ее в формулах. Угол a
- это ваш theta
.
person
Futurologist
schedule
15.05.2019