Допустим, у вас есть прямоугольник с длиной: 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. х 'и у'?
Я проецирую каждую строку моего изображения в круг. параметрический
Уравнение окружности равно (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 и вам нужно выразить модуль как положительное значение)
Если вы можете применить это к своему цилиндрическому изображению, вы получите, как раскрутить свою фотографию.