Рисование прямых по шаблону
Может потребоваться рисовать прямые с помощью некоторого шаблона из точек или черточек. Как уже упоминалось в главе 2, штриховой шаблон хранится в виде последовательности битов, например 0011111100111111.
Такие шаблоны нетрудно встроить в алгоритм Брезенхема. Для этого во время каждого приращения х на единицу необходимо также увеличивать на единицу указатель в шаблоне, причем соответствующее значение бита следует использовать для установки текущего цвета рисования в подпрограмме зе1Р1хе10. Для длинных прямых шаблон используется многократно посредством циклического приращения на единицу от конца шаблона к его началу.
Когда пунктиром должна быть нарисована ломаная линия, то желательно, чтобы шаблон оставался непрерывным от отрезка к отрезку. Для этого сам шаблон и указатель на него делаются глобально доступными для алгоритма Брезенхема, так чтобы доступ к ним мог осуществляться во время последовательных вызовов алгоритма. (В упражнениях рассматриваются и другие проблемы, связанные с рисованием шаблонов.)
Практические упражнения
10.4.2. Снятие ограничений в алгоритме Брезенхема Разработайте варианты алгоритма Брезенхема для следующих случаев: О а > Ъ ;
X X1
О прямые с наклонами, большими единицы; О прямые с отрицательными наклонами,
Средства для растровой графики
и объедините свои решения для указанных частных случаев в единый алгоритм, работающий для любого отрезка прямой. Постарайтесь сделать вашу подпрограмму возможно более эффективной. Проверьте ее, по крайней мере, вручную.
10.4.3. Численный пример
Покажите для концевых точек (8,23) и (21,11) последовательности х, у, получающиеся в результате применения алгоритма Брезенхема. Продемонстрируйте, что при начале работы алгоритма с противоположной концевой точки будут высвечиваться те же пикселы.
10.4.4. Алгоритм Брезенхема на ассемблере Реализуйте полный алгоритм Брезенхема на ассемблере доступного вам графического хост-дисплея. Сделайте код самых внутренних циклов сколь возможно эффективным. Сравните скорость версии на ассемблере с версией на С++. Кроме того, проверьте, увеличивает ли скорость работы алгоритма специальный код для горизонтальных и вертикальных прямых.