Похоже, что вы находитесь в следующей ситуации: у вас есть фиксированная вертикальная линия с именем axis
, которая является вертикальной осью вращения, вокруг которой вы вращаете поверхность. Кроме того, у вас есть самолет S
, представляющий экран вашей камеры. Плоскость экрана S
также является вертикальной, что эквивалентно тому, что она параллельна повороту axis
. Затем нормальный вектор N
плоскости экрана S
указывает на axis
.
Мы вводим фиксированную систему координат (она называется системой камер, мы видим мир с точки зрения камеры, и она фиксируется, потому что ваша камера зафиксирована) следующим образом: мы выбираем фиксированную точку. O
на плоскости экрана S
и нарисуйте ось O ---> y
на S
как уникальную линию на S
, параллельную axis
и проходящую через O
. Ось O ---> x
является уникальной линией, перпендикулярной оси O ---> y
и, следовательно, является горизонтальной. Вектор нормали N
выровнен с осью O ---> z
, которая также горизонтальна, начиная с камеры и проходя через axis
, пересекая последнюю ортогонально.
Система координат на плоскости экрана, назовите ее системой экрана, - это просто система, полученная как z = 0
(ортогональная проекция точек 3D на экран 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
.