- •Оглавление
- •1.Аксонометрическая проекция. Виды аксонометрических проекций.
- •2.Алгоритм Брезенхейма для развертки отрезка
- •5.Косоугольные проекции Косоугольная фронтальная изометрия
- •Косоугольная горизонтальная изометрия
- •Косоугольная фронтальная диметрия
- •6.Кривые Безье (https://learn.Javascript.Ru/bezier)
- •7.Кубический сплайн
- •8.Матрицы аффинных преобразований в пространстве.
- •9.Матрицы аффинных преобразований на плоскости.
- •10.Метод z-буфера
- •12.Методы количественной невидимости
- •Алгоритм Аппеля.
- •Методы двоичного разбиения пространства.
- •13.Методы решения задач загораживания
- •1.Метод переборного типа.(«грубой силы»).
- •18. Метод z-буфера.
- •14.Особенности проекций гладких отображений
- •16.Растровая развертка отрезка
- •17.Растровое представление геометрических объектов
- •18.Тест принадлежности точки многоугольнику
- •19.Фракталы
- •20.Фрактальное сжатие
- •21.Заполнение многоугольников
- •23.Алгоритм Варнака
- •26.Методы приоритетов, метод художника
- •27.Алгоритм Ву
27.Алгоритм Ву
Горизонтальные и вертикальные линии не требуют никакого сглаживания, поэтому их рисование выполняется отдельно. Для остальных линий алгоритм Ву проходит их вдоль основной оси, подбирая координаты по неосновной оси аналогично алгоритму Брезенхема. Отличие состоит в том, что в алгоритме Ву на каждом шаге устанавливается не одна, а две точки. Например, если основной осью является Х, то рассматриваются точки с координатами (х, у) и (х, у+1).
Теперь про алгоритм, для рисования сглаженных линий. Он отличается тем, что на каждом шаге ведётся расчёт для двух ближайших к прямой пикселей, и они закрашиваются с разной интенсивностью, в зависимости от удаленности. Точное пересечение середины пикселя даёт 100% интенсивности, если пиксель находится на расстоянии в 0.9 пикселя, то интенсивность будет 10%. Иными словами, сто процентов интенсивности делится между пикселями, которые ограничивают векторную линию с двух сторон.
На картинке выше красным и зелёным цветом показаны расстояния до двух соседних пикселей. Для расчёта ошибки можно использовать переменную с плавающей запятой и брать значение ошибки из дробной части.