Ответ 1
Скажем, у вас есть прямоугольное изображение длины: L и высота: H.
и цилиндр радиуса: R и высота H '
Пусть A (x, z) - точка на картинке,
Тогда A '(x', y ', z') = (R * cos (x * (2Pi/L)), R * sin (x * (2Pi/L)), z * (H '/H)) будет проекцией вашей точки A на ваш цилиндр.
Доказательство.
1. z '= z * (H'/H)
Я сначала подбираю цилиндр к размеру изображения, поэтому я умножаю его на: (H '/H), и я сохраняю одну и ту же ось z. (если вы его нарисуете, вы сразу увидите его)
2. x 'и y'?
Я проецирую каждую строку своего изображения в круг. параметрическое уравнение круга есть (Rcos (t), Rsin (t)) для t в [0,2PI], параметрическое уравнение отображает отрезок (t в [0,2PI]) в круг. Это именно то, что мы пытаемся сделать.
то если x описывает линию длины L, x * (2pi)/L, описывающая линию длины 2pi, и я могу использовать параметрическое уравнение для сопоставления каждой точки этой линии с кружком.
Надеюсь, поможет
Предыдущая функция дала функцию "надавить" плоскость на цилиндр.
Это биекция, поэтому из данной точки в цилиндре вы можете легко получить исходное изображение.
A (x, y, z) из цилиндра
A '(x', z ') в изображении:
z '= z * (H/H')
и x '= L/(2Pi) * {arccos (x/R) * (знак (y)) (mod (2Pi))}
(это довольно уродливая формула, но что она: D, и вам нужно выразить modulo как положительное значение)
Если вы можете применить это к своему цилиндрическому изображению, вы получите способ развернуть свою картинку.