close

Вход

Забыли?

вход по аккаунту

?

KG-kr

код для вставкиСкачать
Московский авиационный институт
(Национальный исследовательский университет)
Факультет прикладной математики и физики
Отчет по курсовой работе
По курсу "Компьютерная графика"
тема "Кубическая поверхность Безье"
Студент: Жданов С.В,
Группа: 8О-304Б
Руководитель: Сластушенский Ю.В.
Оценка:
Дата:
Москва, 2013
Задание:
Составить и отладить программу, обеспечивающую визуализацию порции поверхности заданного типа. Исходные данные готовятся самостоятельно и вводятся из файла или в панели ввода данных. Должна быть обеспечена возможность тестирования программы на различных наборах исходных данных. Программа должна обеспечивать выполнение аффинных преобразований для заданной порции поверхности, а так же возможность управлять количеством изображаемых параметрических линий. Для визуализации параметрических линий поверхности разрешается использовать только функции отрисовки отрезков в экранных координатах.
Вариант:
Линейная поверхность ( направляющие - кубические кривые Безье 3D)
Метод решение:
Создаём 16 точек, и записываем их в двоичный массив (4х4), для каждых 4 точек создать кривую Безье и записываем их в двоичный массив (4хn, где n аппроксимация программы), затем для точек massive[i][j] (где i= 0,1,2,3) создать кривые Безье, в итоги получится массив nxn.
Описание программы:
Программа состоит из одной формы, и класса Plane4x4.
В классе Plane4x4 записываются массивы с координатами вершин, и считаются кривые Безье и записываются в массивы координат.
class Plane4x4
{
public List<Vertex> vertexes; (массив 4х4)
public List<List<Vertex>> Bvertexes; (массив 4х approximation)
public List<List<Vertex>> BOvertexes;( массив approximation х approximation)
int approximation;
public void BezierCurve(int approximation); (считает Bvertexes и BOvertexes)
}
В форме задается объект класс Plane4x4, перед каждой прорисовкой заново считает координаты вершин.
Для изменения координат вершин используется панели в которых можно выбирать вершины и с помощью изменением локации мышки меняеть координаты вершин.
private void PanelTopMouseDown(object sender, MouseEventArgs e) (событие при MouseDown панели)
{
lastMea = e;
if (cbSelect.Checked == true)
{
foreach (Vertex p in plane.vertexes)
{
if (p.x + 5 >= e.X - panelTop.Width / 2 && p.x - 5 <= e.X - panelTop.Width / 2 && p.z + 5 >= e.Y - panelTop.Height / 2 && p.z - 5 <= e.Y - panelTop.Height / 2)
{
selected = p;
break;
}
}
}
}
private void PanelTopMouseUp(object sender, MouseEventArgs e) (событие при панели)
{
try
{
if (cbMove.Checked == true)
{
selected.x += e.X - lastMea.X;
selected.z += e.Y - lastMea.Y;
}
}
catch (Exception) { };
}
Документ
Категория
Рефераты
Просмотров
12
Размер файла
94 Кб
Теги
1/--страниц
Пожаловаться на содержимое документа