Основы программирования графики
Опубликовано: 05.06.2021
Экран компьютера состоит из пикселей, упорядоченных в декартовой системе координат. Это принято называть растровым отображением пикселей. Алгоритмы компьютерной графики https://buy.fineproxy.org/ меняют цвет наборов пикселей. Современные компьютеры, и даже мобильные телефоны, пользуются специализированной аппаратной высокопроизводительной реализацией графических алгоритмов, которая на несколько порядков превосходит все, что может быть достигнуто программными средствами процессора. Теперь при реальной разработке крайне важно оптимально задействовать аппаратное обеспечение для работы с графикой.
Зачастую основой алгоритмов генерации растровых пиксельных изображений является геометрическое уравнение. Однако количество пикселей на экране компьютера ограничено, поэтому переход от уравнения к изображению порой представляет собой нетривиальную задачу. Обычно решение геометрического уравнения выражается вещественным числом, в то время как пиксели находятся на фиксированных и расположенных на равном расстоянии друг от друга местах. Следовательно, любая вычисленная точка должна быть подогнана к координате пикселей. Значит, требуется округлить ответ, но округление до координаты ближайшего пикселя не всегда дает верное решение. Часто приходится округлять числа необычными способами или вводить поправки. Небрежность округления часто приводит к разрывам там, где должны находиться непрерывные линии. Обязательно проверяйте графические алгоритмы на искажения и разрывы, обусловленные недостатками округления или коррекцией ошибок.
Рассмотрим такую простую процедуру, как рисование отрезка прямой. Предположим, вы пытаетесь реализовать функцию, которая получает координаты двух точек и рисует между ними линию. Вспомнив школьный курс математики, вы легко напишете уравнение этой линии: у = mх + b. После этого остается вычислить значения у для диапазона значений х и нарисовать образующие линию точки. Задача кажется тривиальной.
Но дьявол, как всегда, кроется в деталях. Во-первых, вам нужно учесть случай, когда линия вертикальна. При этом параметр m равен бесконечности, и наша простая процедура нарисовать линию уже не позволяет. Теперь представим, что линия не вертикальна, но близка к этому.
Но даже сейчас задачу нельзя назвать до конца решенной. Предположим, нам нужно нарисовать линию с угловым коэффициентом 1, например у = х. В этом случае, каким бы вариантом уравнения мы ни пользовались, мы будем рисовать пиксели 1, 2, и т. д. С математической точки зрения все верно, но на экране такая линия выглядит слишком тонкой. Ведь в ней пиксели будут отстоять друг от друга на намного большее расстояние, чем при рисовании других линий. Для построения диагональной линии длиной 100 нам потребуется меньше пикселей, чем для горизонтальной линии длиной 80. Идеальный алгоритм рисования линий должен быть снабжен механизмом, гарантирующим во всех случаях примерно равную плотность пикселей.
Другая проблема касается округления. Если для точки с координатами воспользоваться приведением типов и преобразовать это значение в целое – вещественная часть будет отброшена и новый пиксел получит координаты. Чтобы нарисовать эту точку с координатами, округлять значения нужно явным образом