Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > цилиндр - как лучше хранить и отрисовывать?


Автор: kosmonaFFFt 22.9.2008, 18:19
Доброговсем времени суток.

Надобно мне реализовать различные операции типа вращения, масштабирования и т. д. над 3D фигурами.
С фигурами из прямых линий все просто - конверт в матрицу, умножить на матрицу преобразования и обратно в линию,
и так со всеми линиями в цикле. Но по заданию надо чтобы в фигуре была криволинейная поверхность (мну надо цилиндр).
В связи с этим возникают вопросы - в каком виде его лучше всего хранить и можно ли его как нибудь преобразовать
в массив линий (с  определенной долей потери качесва, например эллипс основания заменить на 10 - 15тиугольник), чтобы можно было применить уже готовые для линий методы преобразования.
Порылся в гугле на тему уравнения эллиптического цилиндра, но картинка с формулой упорно не отображалась, + не знаю
как его можно ограничить по длине (насколько я помню из математики, он бесконечный в длину).

Заранее спасибо.

Автор: dereyly 22.9.2008, 21:54
Цитата

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

Ну линия вообщем говоря тоже бесконечна  smile 

Цитата

С фигурами из прямых линий все просто - конверт в матрицу, умножить на матрицу преобразования и обратно в линию,
и так со всеми линиями в цикле. Но по заданию надо чтобы в фигуре была криволинейная поверхность (мну надо цилиндр).
В связи с этим возникают вопросы - в каком виде его лучше всего хранить и можно ли его как нибудь преобразовать
в массив линий (с  определенной долей потери качесва, например эллипс основания заменить на 10 - 15тиугольник), чтобы можно было применить уже готовые для линий методы преобразования.

А что тебе мешает так сделать? Цилиндров  не существует (так же как и тортов, но торт сложная фигура и ее рассматривать не будем)... есть его только аппроксимации... 
Для единообразия можно триангулировать основание и стороны...

PS С этим вопросом лучше в соседнюю тему по графике

Автор: Rickert 23.9.2008, 01:46
kosmonaFFFt
0) Аналитически, цилиндр построить проще пареной репы: берём уравнение окружности: x = cos(a), y = sin(a). Теперь производим его несколько раз, увеличивая, уменьшая z координату - получаем набор точек, который и будет цилиндром. Я так понял что проблема в его получении у вас есть.
1) Как ханить? Да просто набор точек, плевать на линии.
2) Как поворачивать/перемещать? Через матрицу преобразований 4x4, путём умножения её на вершину. См. разработку игр, тему "Скелетная анимация", можете на gamedev.ru

Автор: kosmonaFFFt 23.9.2008, 05:52
Цитата(Rickert @  23.9.2008,  01:46 Найти цитируемый пост)
1) Как ханить? Да просто набор точек, плевать на линии.

Спасибо, попробую. Хотя линии все равно нужн; ну да если точки есть, то и линии думаю проведу.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)