Допустим, центр вашей бумаги x = 0, а ваш цилиндр расположен вертикально вдоль оси y. Ваша x-координата на бумаге может быть приравнена к длине дуги на поверхности цилиндра. Длина дуги (с) равна углу (в радианах), умноженному на радиус. Ваш радиус указан, так что вы можете вычислить угол по длине и радиусу дуги. Угол = длина дуги / радиус. Поскольку теперь у вас есть угол и радиус, вы можете вычислить новое смещение по оси X, которое будет (радиус * cos (угол)). Таким образом, ваши функции отображения будут:
- new_x = radius * cos (old_x / radius)
- new_y = old_y; // координата у не меняется
- new_z = радиус * sin (old_x / radius);
Вы должны будете установить границы (держите x на бумаге и убедитесь, что он не больше половины окружности (x должно быть меньше или равно PI * r). Кроме того, следите за знаками ... особенно z-координата, которая будет зависеть от того, правая или левая ваша система координат, или от того, где вы представляете себе бумагу, начинающуюся с цилиндра (сзади или спереди). Наконец, вы можете использовать стандартные матричные преобразования для перемещения и позиционирования бумага / цилиндр в трехмерном пространстве, если у вас есть деформированные координаты.