Практика программирования (Бейсик, Си, Паскаль)



         

Отрезки прямых и прямоугольники - часть 3


USERBIT_LINE userBitLn 4 — маска пользователя

Если ни одна из четырех системных масок вас не устраивает, то при style = 4 в качестве маски используется значение параметра mask, подбираемое экспериментальным путем.

Последний параметр t может принимать только два значения 1 или 3, он задает толщину линии в пикселах. Две соответствующие" мнемонические константы дляСи — N0RM_WIDTH и THICK_WIDTH, для паскаля— NormWidth И ThickWidth.

В составе BGI-пакета присутствует еще одна функция, не имеющая аналога в QBasic. 0на позволяет обвести границы многоугольника, заданного координатами точек его вершин:

drawpoly(k,xy);

Здесь k — количество точек, координаты которых хранятся в целочисленном массиве ху — x1, y1, х2, у2, ... . Дополнительное удобство этой процедуры заключается в том, что, в случае необходимости, она сама осуществляет замыкание контура, соединяя последнюю точку массива с первой. В эту же точку перемещается и СР после построения многоугольника.

В системах программирования фирмы Borland некоторые трудности возникают при желании нарисовать черную линию на белом фоне. Дело в том, что черный цвет по умолчанию имеет нулевой программный код, и такой же нулевой код рассматривается в BGI-пакете как цвет фона. Поэтому попытка проделать нечто вроде:

setcolor(0);

setbkcolor(15);

line{0,0,100,100);

ни к какому результату не приводит. На белом фоне линия "рисуется" белым же цветом и поэтому не видна. В системе QBasic таких проблем просто не возникает. Попробуйте запустить программу:

Программа 8_05.bas

SCREEN 12

VIEW (0,0)-(100,100) ,15

LINE (0,0)-(100,100) ,0

END

В программах на Паскале или на Си приходится "обманывать" графическую систему следующим образом. Код нулевого цвета заносится в регистр палитры с номером, отличным от нуля. Затем содержимое этого регистра назначается в качестве цвета переднего плана.

Программа 8_05.pas

program black_white;

{ Построение черных линий на белом фоне }

uses graph;

var

gd,gm,x,у:integer; begin




Содержание  Назад  Вперед