Проекция плоскости на цилиндр - PullRequest
11 голосов
/ 02 ноября 2011

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

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

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

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

1 Ответ

13 голосов
/ 02 ноября 2011

Допустим, у вас есть прямоугольник с длиной: 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 и вам нужно выразить модуль как положительное значение)

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

...