Скачать программы Все программы автора1. 15. 3. 2. Работа с линиямиВ графическом режиме курсор невидим, его положение можно определить функциями, возвращающими значения координат: GetX; - по оси "Х", GetY; - по оси "Y". Следующие процедуры перемещают курсор без рисования: MoveTo(x, y); - переместить курсор в точку с координатами (x, y), MoveRel(dx,dy); - сместить курсор на расстояние dx, dy от текущего положения. Для построения многоугольников и ломаных линий удобно использовать процедуры: LineTo(x, y); - провести отрезок прямой линии от текущего положения курсора до точки с координатами X, Y. LineRel(dX, dY); - провести отрезок прямой линии от текущего положения курсора до точки, смещенной на расстояние dX, dY по соответствующим осям. В отличие от процедуры Line(x1, y1, x2, y2); процедуры LineTo(x, y); и LineRel(dX, dY); при своем исполнении перемещают текущий указатель.
Пример операторов для построения восьмиугольника:
R:=100; { расстояние от вершин до центра xc, yc } xc:= GetMaxX div 2; yc:= GetMaxY div 2; for i:= 1 to 8 do begin alfa:= i * pi/4; { значение угла в рад . } x[i]:= xc + round(R * cos(alfa)); { координаты вершин } y[i]:= yc + round(R * sin(alfa)) end; MoveTo(x[8], y[8]); { исходная позиция для рисования } for i:= 1 to 8 do LineTo(x[i], y[i]); { рисование линий } Для отрезков прямых линий и процедур с их использованием можно задать режимы построения прямых линий оператором: SetWriteMode(N); N=0 - замещение линией изображения на экране ( режим CopyPut ) используется по умолчанию, N=1 - изображение комбинируется ( режим XorPut ). Работа функции состоит в изменении согласно логической операции "исключающее ИЛИ" исходного значения цвета пиксела (числа "1" или "0"). Логическая функция Xor, примененная к одной переменной дважды, восстанавливает ее исходное значение: ( J xor I ) xor I = J . Следовательно при повторном проведении линии в режиме XorPut изображение этой линии уничтожается, а цвет пикселов экрана становится исходным. На этом правиле основаны некоторые программы построения движущихся изображений. Пример операторов для рисования движущегося прямоугольника: SetWriteMode(1); a:= 100; b:= 50; { стороны прямоугольника } x1:= 0; y1:= GetMaxY div 2; N:= GetMaxX - x1 - a; { N - число перемещений } for i:= 0 to N do begin Rectangle(x1+i, y1, x1+a+i, y1+b); { рисование прямоугольника } delay(10); Rectangle(x1+i,y1,x1+a+i,y1+b); { стирание прямоугольника } end;
Практическое задание N 1. 55
1. Составить процедуру рисования N - угольной звезды. В параметры процедуры включить число лучей звезды, радиусы вписанной и описанной окружностей, цвет линий и координаты центра звезды. Перемещать две звезды разного цвета в пределах экрана случайным образом.
2. Составить процедуру рисования N - угольной звезды, где N= 3, 5, 7, ... Операторы рисования имеют вид:
M:=N div 2; Moveto(x[1],y[1]); For i:=1 to N do begin j:=(M * i) mod N + 1; LineTo(x[j],y[j]) end;
Перемещать две звезды разного цвета в пределах экрана. Толщину и форму (стиль) линий отрезков прямых, прямоугольников, окружностей, эллипсов можно задать оператором SetLineStyle(F, P, T); Здесь F - форма линии из стандартного набора BGI: F=0 - сплошная, F=1 - пунктирная, F=2 - штрих - пунктирная, F=3 - штриховая. F=4 - форма линии задается параметром Р. При F<4 значение Р игнорируется. Параметры F, P, T типа Word. Стиль линии Р - число, двоичное представление которого отображает заполнение линии длиной 16 пикселов. Если разряд числа равен 1, то пиксел высвечивается, 0 - не высвечивается. Удобно использовать шестнадцатеричные числа. Например: P = $35F1 = 0 0 1 1 0 1 0 1 1 1 1 1 0 0 0 1 ( двоичное )
Можно использовать десятичную форму записи значения параметра "Р", где 0<= P <= 65535= 216 - 1 . T - толщина линии может принимать два значения: T= 1 - тонкая (1 пиксел), T= 3 - толстая (3 пиксела). Например, операторы: SetLineStyle(4, $5555, 3); Line(x1, y1, x2, y2); определяют толстую мелким пунктиром линию.
Практическое задание N 1. 55
Вывести на экран горизонтальные толстые линии с двоичным представлением:
2. Вывести на экран вертикальные толстые линии с двоичным представлением:
3. Вывести на экран линии разных форм, заданных параметром Р N = P N - 1 + 2 * N , где P 0 = 1; N= 1, . . , 150 . Линии располагать вертикально. 4. Вывода на экран линий разных форм, заданных параметром Р N = P N - 1 + 2 N , где P 0 = 1; N= 1, . . , 15 . Линии располагать горизонтально. 5. Нарисовать расходящийся из центра экрана по спирали ромбический лабиринт шириной 6 пикселов из отрезков наклонных прямых. Очищать экран и менять толщину и форму линии F= 0, . . , 3. 6. Нарисовать расходящийся из центра экрана по спирали прямоугольный лабиринт шириной 5 пикселов из отрезков вертикальных и горизонтальных прямых. Очищать экран и менять толщину и форму линии.
Применяя к исходным стилям линий пользователя логические операции, можно получать новые стили линий. Например: P3 = P1 and P2 - линии из совпадающих единичных битов. P3 = P1 or P2 - добавление единичных битов. P3 = P1 xor P2 - обнуление совпадающих значений битов. P3 = not P2 - изменение значений битов на противоположные.
Таблица результатов выполнения логической операции "xor" над битами. ( Таблица результатов выполнения бит "A" операция бит "B" результат логических операций "or" и "and" над битами приведена на стр. . ) единице при различных значениях битов "A" и "B", иначе результат равен нулю.
Практическое задание N 1. 56
1. Создать эффект "бегущих огней" перемещением на один пиксел набора из трех касающихся толстых пунктирных линий ( перерисовка в режиме XorPut ). Крайние линии стиля "Р", средняя - стиля "not P". 2. Создать штриховые стили "Р1", "Р2" и рассчитать с использованием всех логические операций приведенные выше стили Р3. Вывести на экран исходные и расчетные линии. |