3D-эффект для искажения бумаги - PullRequest
2 голосов
/ 06 апреля 2010

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

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

Кто-нибудь может направить меня в хорошую библиотеку или ресурс в Интернете, где можно найти такие функции?

1 Ответ

2 голосов
/ 06 апреля 2010

Допустим, центр вашей бумаги 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-координата, которая будет зависеть от того, правая или левая ваша система координат, или от того, где вы представляете себе бумагу, начинающуюся с цилиндра (сзади или спереди). Наконец, вы можете использовать стандартные матричные преобразования для перемещения и позиционирования бумага / цилиндр в трехмерном пространстве, если у вас есть деформированные координаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...