Поэкспериментируйте со своей подпрограммой, нанизывая на хребет полигоны из примера 3.6.3, содержащие внутри себя линию, скачущую взад-вперед между двумя концентрическими окружностями. В качестве хребтовых кривых испытайте по меньшей .мере спираль и фигуру Лиссажу.

6.7. Тематические задания Тематическое задание 6.6. Построение поверхностей вращения с дискретными шагами Уровень сложности III.

Напишите приложение, которое позволит пользователю задавать мышью «профиль» объекта, как показано на рис. 6.73. Затем эта программа должна создавать сетку для поверхности вращения и рисовать эту сетку. Кроме того, программа должна записывать данные по сетке в файл в формате, описанном в тематическом задании 6.1.

Рис. 6.73. Проектирование профиля для поверхности вращения На рис. 6.73 показана «область рисования» пользователя, представляющая собой квадрат на экране. Пользователь отмечает мышью последовательность точек внутри этого квадрата. В трехмерном пространстве этому квадрату соответствует единичный квадрат, лежащий в плоскости ху. Это устанавливает размер профиля в трехмерном «мире». Поверхность вращения формируется при поворачивании профиля вокруг оси z с числом шагов, определяемым пользователем.

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

Тематическое задание 6.7. Списки ребер и каркасные модели Уровень сложности И.

Каркасный вариант сетки можно визуализировать, проводя прямую линию на месте каждого ребра сетки. Напишите подпрограмму void Mesh:: drawEdges(void), которая осуществляет это для любой заданной сетки. Подпрограмма должна обходить каждую грань, соединяя прямой линией соседние вершины. При этом каждая прямая рисуется дважды. (Почему?) В условиях дефицита времени подобная неэффективность может оказаться неприемлемой. В этом случае можно построить список ребер (edge list), содержащий каждую вершину сетки только один раз. Такой список ребер представляет собой массив из пар индексов, где два индекса обозначают две концевые точки каждого ребра. Опишите алгоритм построения списка ребер для произвольной сетки. Такой алгоритм обходит каждую грань сетки, отмечая каждое проходимое ребро, однако в список ребер оно будет добавлено только в том случае, если его там еще нет.


⇐ Предыдущая| |Следующая ⇒