Проекция плоскости на цилиндр

У меня есть простой растровый рисунок, и я хочу сделать проекцию на цилиндр.

Это означает, что я хочу преобразовать изображение таким образом, чтобы, если я его распечатаю и обернусь вокруг столбчатого цилиндра и сфотографирую его с определенной позиции, результирующее изображение будет выглядеть как оригинал.

Тем не менее, я полностью потерял во всех проекционных алгоритмах (которые часто связаны с проекциями земли).

Поэтому я был бы благодарен за подсказки, какой может быть правильный алгоритм, и какие инструменты я мог бы использовать, чтобы применить его к моему изображению.

Ответ 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 как положительное значение)

Если вы можете применить это к своему цилиндрическому изображению, вы получите способ развернуть свою картинку.