Для создания широких ломаных линий необходимы дополнительные действия. В общем случае, с помощью рассмотренных нами методов для построения отдельного отрезка прямой нельзя построить серию прямолинейных отрезков, непрерывно соединяющихся друг с другом. При изображении широких ломаных линий с помощью горизонтальных и вертикальных полос пикселей, например, остаются промежутки на границах между двумя отрезками с различными углами наклона, особенно в местах перехода от горизонтальных полос пикселей к вертикальным. Широкую ломаную линию, части которой непрерывно соединяются друг с другом, можно построить за счет дополнительной обработки концов отдельных отрезков. На рис. 4.5 показаны три возможных способа непрерывного соединения двух прямолинейных отрезков. Угловое соединение выполняется путем продолжения внешних границ каждого из двух прямолинейных отрезков до тех пор, пока они не пересекутся друг с другом. Скругленное соединение получается, если место соединения двух отрезков перекрывается кругом, диаметр которого равен ширине линии. А косое соединение получается при изображении прямолинейных отрезков со стыковыми перекрытиями и закрашивании треугольного промежутка в том месте, где пересекаются эти отрезки. Если угол между двумя соединяющимися отрезками очень мал, угловое соединение может привести к появлению очень длинного острия, которое испортит внешний вид ломаной линии. В графических пакетах этого эффекта можно избежать путем перехода от углового соединения к косому в том случае, например, когда угол между двумя соседними отрезками очень мал.
СТИЛЬ ЛИНИИ
К возможным вариантам выбора атрибута стиля прямой линии можно отнести сплошные линии и различные виды пунктира. Алгоритм построения прямой линии можно изменить таким образом, чтобы с его помощью можно было создавать линии, задавая длину изображаемых сплошных участков, расположенных на траектории прямой линии, и расстояние между ними. Во многих графических пакетах можно выбирать как длину самих штрихов пунктира, так и расстояние между ними.
В растровых алгоритмах изображения прямых линий атрибуты стиля линии изображаются путем нанесения полос пикселей. Для создания штрихованных, пунктирных и штрихпунктирных узоров процедура построения прямой линии выдает участки следующих друг за другом пикселей, расположенных на прямой линии, перескакивая через несколько промежуточных пикселей между сплошными полосами. Количество пикселей, определяющее длину полосы и расстояние между отдельными полосами, задается с помощью пиксельной маски, которая представляет собой узор из двоичных чисел, сообщающий, какие точки, лежащие на прямой, следует изображать. Линейная маска 11111000, например, может быть использована для изображения пунктирной линии с длиной штриха в пять пикселей и расстоянием между штрихами в три пикселя. Пиксели, координатам которых соответствуют биты со значением 1, изображаются в текущем цвете, а пиксели, координатам которых соответствуют биты со значением
0, изображаются цветом фона.
Построение штрихов с помощью фиксированного количества пикселей приводит к разной длине штрихов при различных ориентациях прямой линии (рис. 4.6). Оба штриха, показанные на этом рисунке, состоят из четырех пикселей, но диагональный пиксель длиннее в \/2 раза. Для точных чертежей длина штрихов должна оставаться приблизительно постоянной для любой ориентации прямой. Чтобы выполнялось это условие, количество пикселей в сплошных полосах и в промежутках между полосами нужно подбирать в соответствии с углом наклона прямой. Можно сделать так, чтобы два штриха, изображенные на рис. 4.6, были приблизительно одинаковой длины, уменьшив длину диагонального штриха до трех пикселей. Еще один способ сохранить длину штриха - это рассматривать штрихи как отдельные прямолинейные отрезки. Для этого координаты концов каждого штриха используются в процедуре построения прямой линии, с помощью которой и находятся положения пикселей на траектории прямой линии.