Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3-D моделирование инженерных конструкций.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.43 Mб
Скачать

(Трехмерных)

Путем объединения элементарных трехмерных преобразований можно получить другие преобразования.

Пример. Преобразовать из начальной позиции в конечную точку переносится в начало координат, — располагается вдоль отрицательной полуоси .

На длины отрезков преобразование не воздействует.

Для выполнения этой задачи рассмотрим четыре шага:

  1. Перенос точки в начало координат.

  2. Поворот вокруг оси до совмещения с плоскостью .

  3. Поворот вокруг оси до совмещения с отрицательной полуосью .

    1. Шаг 1

Применим к :

    1. Шаг 2

Поворот вокруг оси на угол (угол положительный)

Подставляя эти выражения в матрицу поворота, находим:

    1. Шаг 3

Поворот вокруг оси (угол отрицательный)

,

где

.

Результат поворота:

,

теперь совпадает с осью .

  1. Преобразование отрезков в растровую форму. Простой, пошаговый алгоритмы, алгоритм Брезенхема.

Растеризация, растрирование — процессы, конечным результатом которых являются растровые изображения.

Растеризация — это перевод изображения, описанного векторным форматом в пиксели или точки, для вывода на дисплей или принтер.

Простой алгоритм растеризации

Равенство должно выполняться

Δy Δx

=

y2 - y1 x2 - x1

Поэтому dx приравниваем к 1.

Δy

=

y2 - y1 x2 - x1

Теперь xi = xi+1 + dx, а yi = yi+1 + dy. Округляем до целого – получаем координаты, зарисовываем пиксел (сами значения x и y НЕ округляются, округляем только для получения координаты пиксела)

Пошаговый алгоритм растеризации

Допустим, нам даны координаты начала (x, y) и конца (x, y) отрезка, тогда уравнение прямой, содержащей отрезок, может быть, записано в виде y = y+k(x-x), где k = (y-y)/(x-x), а x пробегает значения от x до x. Поскольку растровое изображение отрезка содержит только точки с целочисленными координатами, то x будет пробегать только целые значения из отрезка (x, x). И в случае |k| < 1 все прекрасно: изменяем значение x, по уравнению прямой, высчитываем значение y, "закрашиваем" точку с координатами (x, y), переходим к началу цикла. Но не трудно заметить, что в случае когда |k| > 1, наше представление отрезка будет иметь пробелы, так как изменение x на единицу приведет к изменению y более чем на единицу. Поэтому в случае |k| > 1 переменные x и y надо поменять ролями.

Алгоритм Брезенхема

Большее из приращений, либо Δx, либо Δy, выбирается в качестве единицы растра.В процессе работы одна из координат (в зависимости от углового коэффициента) изменяется на единицу. Изменение другой координаты (на 0 или 1) зависит от расстояния между действительным положением отрезка и ближайшими координатами сетки. Такое расстояние мы назовем ошибкой. Алгоритм построен так, что требуется проверять лишь знак этой ошибки. На рис. это иллюстрируется для отрезка в первом октанте, т.е. для отрезка с угловым коэффициентом, лежащим в диапазоне от 0 до 1. Из рисунка можно заметить, что если угловой коэффициент отрезка из точки (0, 0) больше чем ½,то его пересечение с прямой х = 1 будет расположено ближе к прямой y = 1, чем к прямой y = 0. Следовательно, точка растра (1, 1) лучше аппроксимирует ход отрезка, чем точка (1, 0). Если угловой коэффициент меньше ½, то верно обратное. Для углового коэффициента, равного ½, нет какого-либо предпочтительного выбора. В данном случае алгоритм выбирает точку (1, 1). Т ак как желательно проверять только знак ошибки, то она первоначально устанавливается равной -½. Таким образом, если угловой коэффициент отрезка больше или равен ½, то величина ошибки в следующей точке растра может быть вычислена как е = -½ + Δy/Δx. Быстродействие алгоритма можно увеличить, если использовать только целочисленную арифметику и исключить деление. Простое преобразование ē = (-½ + Δy/Δx) · 2Δx = 2Δy - Δx превратит предыдущие вычисления в целочисленные и позволит эффективно реализовать их на аппаратном или микропрограммном уровне.