Просмотров 79.6к. Обновлено 23 ноября 2020
После запуска PascalABC, по умолчанию, запускается текстовый режим. Для работы с графикой служит отдельное графическое окно.
Чтобы его открыть, необходимо подключить модуль GraphABC. В этом модуле содержится набор процедур и функций, предназначенных для работы с графическим экраном, а также некоторые встроенные константы и переменные, которые могут быть использованы в программах с графикой.
С их помощью можно создавать разнообразные графические изображения и сопровождать их текстовыми надписями.
Подключение осуществляется в разделе описаний.
Формат подключения модуля GraphABC:Uses GraphABC;
Графический экран PascalABC (по умолчанию) содержит 640 точек по горизонтали и 400 точек по вертикали. Начало отсчета – левый верхний угол экрана. Ось x направлена вправо, а ось y –вниз. Координаты исчисляются в пикселях.
Все команды библиотеки GraphABC являются подпрограммами и описаны в виде процедур и функций. Для того, что бы команда выполнилась необходимо указать команду и задать значения параметров.
Содержание
- Управление графическим окном
- Процедуры рисования графических примитивов
- Процедуры, используемые для работы с цветом
- Процедуры для работы с текстом
- Цвета в PascalABC
Управление графическим окном
После запуска PascalABC, по умолчанию, запускается текстовый режим. Для работы с графикой служит отдельное графическое окно.
Чтобы его открыть, необходимо подключить модуль GraphABC. В этом модуле содержится набор процедур и функций, предназначенных для работы с графическим экраном, а также некоторые встроенные константы и переменные, которые могут быть использованы в программах с графикой.
С их помощью можно создавать разнообразные графические изображения и сопровождать их текстовыми надписями.
Подключение осуществляется в разделе описаний.
Формат подключения модуля GraphABC:Uses GraphABC;
Графический экран PascalABC (по умолчанию) содержит 640 точек по горизонтали и 400 точек по вертикали. Начало отсчета – левый верхний угол экрана. Ось x направлена вправо, а ось y –вниз. Координаты исчисляются в пикселях.
Все команды библиотеки GraphABC являются подпрограммами и описаны в виде процедур и функций. Для того, что бы команда выполнилась необходимо указать команду и задать значения параметров.
Процедуры рисования графических примитивов
Процедуры, используемые для работы с цветом
Процедуры для работы с текстом
Цвета в PascalABC
Пример графической программы, рисующей изображение дома:
Program Domik; uses Graphabc; //подключение модуля GraphABC begin SetWindowWidth(800); //ширина окна программы SetWindowHeight(600); //высота окна программы SetPenWidth(3); //толщина пера SetFontSize(18); //размер шрифта SetFontColor(clRed); //цвет шрифта SetFontStyle(fsBold); //жирный стиль шрифта TextOut(100,100,'Домик'); //текст Rectangle(200, 300, 600,600); //дом Circle(400,225, 40); //круг SetBrushColor(clAqua); //цвет заливки окна FillRect(300, 400,500,500); //процедура заливки окна rectangle(300,400,500,500); //окно Line(400,400,400,500); // окно Line(300,450,500,450); //окно Line(200,300,400,150); //крыша Line(400,150,600,300); //крыша Line(480,210,480,160); //труба Line(480,160,520,160); //труба Line(520,160,520,240); //труба end.
Программа, рисующая фигурку:
Program Figurka; uses GraphABC; begin SetWindowSize(500, 500); //задаем размер графического окна SetPenWidth(3); //устанавливаем стиль пера SetBrushColor(clFuchsia); //устанавливаем цвет кисти Circle(225,160,50); //рисуем окружность Line(225,160,225,180); //рисуем линии Line( 210,190,240,190); Line( 225,210,225,250); Line( 100,100,200,260); Line( 200,260,400,260); Line( 210,350,200,480); Line(240,350,250,480); Rectangle(200,230,250,350); //рисуем прямоугольник SetBrushColor(clLime); FillRect(0, 480,500,500); //рисуем закрашенный прямоугольник SetBrushColor(clWhite); Circle(205,150,10); Circle(245,150,10); end.
Практическая работа за компьютером
Задание 1. Определите координаты и составьте программу, выводящую на экран рисунок дома и дерева.
Программа будет иметь вид:
Program domik_2; uses GraphABC; var i: integer; st:string; begin SetWindowSize(500, 500); {Коричневая стена} SetPenWidth(2); SetBrushColor(clBrown); FillRect(100,50,150,100); {Крыша желтого цвета} SetPenColor(clBrown); Line(125,25,80,75); Line(125,25,170,75); FloodFill(125, 30,clYellow); {Крона дерева} SetPenColor(clGreen); SetBrushColor(clGreen); Ellipse(100,150,150,200); {ствол дерева} SetBrushColor(clBrown); FillRect(120,200,130,230); end.
Задание 2. Используя оператор цикла и введя переменную для пересчета координат по оси x, постройте “поселок”, состоящий из 5 домов. Внесите соответствующие дополнения и изменения в предыдущую программу.
Весь наш «поселок» выстроился вдоль горизонтальной оси экрана — оси X. Построение рисунка начинается с левого верхнего угла стены первого дома — точки с координатами (100, 50). Координата Y не изменяется. Чтобы начать рисовать второй домик, нужно координату X увеличить на 150 (50 точек — ширина первого дома и 100 точек — расстояние между домиками).
Выберем в качестве параметра цикла целочисленную переменную X.
Для всех элементов нашего рисунка абсолютное значение координаты X заменим на относительное. Например, для стены дома процедура для рисования запишется следующим образом:
FillRect(x,50,x+50,100);
Сформулируем условие выполнения цыклических действий для нашей задачи.Какие координаты имеет левый верхний угол пятого дома? Конечное значение выбранного нами параметра цикла x = 700. Тогда условие выполнения цикла записывается так: x<=700.
Словесное описание алгоритма коротко можно записать так:
Переменной цикла x присвоить начальное значение 100. Пока x<=700 выполнять серию действий «Нарисуй дом и дерево», после каждого фрагмента рисунка увеличивать значение переменной цикла на 150.
Программа будет иметь вид:
Program Domik; uses GraphABC; var i: integer; st:string; x:integer; begin SetWindowSize(800, 500); x:=100; While x<=700 do begin {Коричневая стена} SetPenWidth(2); SetBrushColor(clBrown); FillRect(x,50,x+50,100); {Крыша желтого цвета} SetPenColor(clBrown); Line(x+25,25,x-20,75); Line(x+25,25,x+70,75); FloodFill(x+25, 30,clYellow); {Крона дерева} SetPenColor(clGreen); SetBrushColor(clGreen); Ellipse(x,150,x+50,200); {ствол дерева} SetBrushColor(clBrown); FillRect(x+20,200,x+30,230); x:=x+150; end; end.
Практическая работа № 7
Тема: Программная реализация вывода графических изображений на экран.
Цель: Научиться создавать программы для построения графических изображений на экране.
Оборудование: ПК, система программирования Qbasic.
Ход работы
1. Изучить основные сведения по теме.
Основные сведения
При запуске среды QBasic экран монитора автоматически устанавливается в текстовый режим. Чтобы переключить экран в графический режим используется оператор SCREEN.
Формат: SCREEN <номер графического режима>
Номер графического режима указывает, на какое количество пикселей будет разбит экран.В графическом режиме на экран монитора выводится изображение (рисунок).
Рисунок – это совокупность точек различного цвета. Эти точки называются пикселями. Экран монитора состоит из точек – пикселей.
В графическом режиме изображение на экране строится по точкам. Каждая точка имеет определенные координаты (х, у) и цвет. Начало координат находится в левом верхнем углу экрана.
Оператор SCREEN 9 включает графический режим работы экрана. В этом режиме экран разбивается на 640 точек по горизонтали (ось Х) и 340 точек по вертикали (ось У).
Для рисования точки определенного цвета используется оператор PSET
PSET – оператор построения точки (высвечивание экранной точки с заданными координатами и заданным цветом)
Формат: PSET (X,Y), N
(X,Y) – координаты экранной точки в пикселях
N – целое число, которое указывает номер цвета из активной палитры
Номер цвета можно не указывать, в этом случае изображение будет белым.
Для рисования прямых линий используется оператор LINE.
LINE – оператор построения отрезка.
Формат: LINE (X1,Y1) – (X2,Y2), N
(X1,Y1) – координаты начала отрезка
(X2,Y2) – координаты конца отрезка
N – номер цвета
Для рисования прямоугольников используется специальная форма оператора LINE. При этом задаются две противоположно лежащие точки и на них, как на диагонали, строится прямоугольник (например, координаты левого верхнего угла прямоугольника и координаты правого нижнего угла прямоугольника)
Формат: LINE (X1,Y1) – (X2,Y2), N, B
(X1,Y1) – координаты начала диагонали
(X2,Y2) – координаты конца диагонали
N – номер цвета
B – служебное слово, обозначающее прямоугольник (box)
Для рисования закрашенных прямоугольников вместо служебного слова В используется служебное слово BF
Формат: LINE (X1,Y1) – (X2,Y2), N, BF
N – номер цвета контура и заливки
Чтобы нарисовать окружность необходимо знать радиус и центр окружности. Для рисования окружностей используется оператор CIRCLE.
CIRCLE – оператор построения окружности
Формат: CIRCLE (X,Y), R, N
(X,Y) – координаты центра окружности
R – радиус окружности (длина радиуса в пикселях)
N – номер цвета
Для рисования овалов используется специальная форма оператора CIRCLE:
Формат: CIRCLE (X,Y), R, N, , , К (три запятые после номера цвета ОБЯЗАТЕЛЬНЫ)
К – коэффициент сжатия первоначальной окружности.
Если К>1, то сжатие по горизонтали
Если 0<К<1, то сжатие по вертикали
Для рисования дуги окружности используется специальная форма оператора CIRCLE:
Формат: CIRCLE (X,Y), R, N, a, b
a – угол, от которого начинается дуга (значение угла задается в радианах)
b – угол, где дуга заканчивается (значение угла задается в радианах)
Правило рисования дуг: дуга строится от угла a к углу b против часовой стрелки.
Формула перевода углов из градусной меры в радианы: 1° × 3,14/180 = 0,01745 рад
Бейсик позволяет использовать в качестве операндов в своих командах арифметические выражения. Поэтому, если вы затрудняетесь определить угол начала или окончания дуги на тригонометрической окружности (знаете, например, его значение в градусах 300, но не знаете значение в радианах), то можете в соответствующем месте оператора дуги написать 3,14*30/180 и пусть компьютер сам считает.
На рисунке можно закрашивать замкнутые области, ограниченные линиями одного цвета. Для закраски замкнутых областей применяется оператор PAINT. Закрашивать можно ТОЛЬКО замкнутые области.
PAINT – оператор заливки
Формат: PAINT (X,Y), N1, N2
(X,Y) – координаты точки внутри замкнутой области
N1 – цвет заливки
N2 – цвет контура (линии, ограничивающей область)
Для рисования некоторых фигур можно использовать ломаную линию.
DRAW – оператор построения ломаной линии.
Формат: DRAW “направления”
Возможные направления линий:
Примеры использования операторов:
2.Выполнить задания по теме.
Задание 1.
1. На рабочем столе найдите ярлык программы qbasic2. Запустите программу. Создайте новый файл.
2. Введите в программу примеры построчно. Вводите одну строку, запустите на выполнение (Run-Start или F5), посмотрите, что произошло на экране, введите вторую строку, запустите на выполнение и т.д.
SCREEN 9
PSET (240,180), 10
LINE (460,140) – (600,40), 5
LINE (200,40) – (360,100), 3,B
LINE (460,220) – (620,300), 3,BF
CIRCLE (80,60), 40, 14
CIRCLE (160,140), 30, 14, , , 3
CIRCLE (240,160), 25, 14, , , 0.5
CIRCLE (60,200), 60, 6, , , 2
PAINT (62,203), 2, 6
PAINT (84,65), 14, 3
Удалите последнюю строчку, посмотрите на изменения
PAINT (84,65), 14, 14
PSET (220,200), 12
DRAW “F40 E40 F40”
3. Сохраните программу под именем grafika.bas
Задание 2.
1. Начертите в тетради систему координат XY, выбрав начало координат в верхнем левом углу страницы, горизонтальная ось Х, единичный отрезок 1 клеточка – 20пт, вертикальная ось Y, единичный отрезок 1 клеточка – 10пт.
2. Нарисуйте в этой системе координат (В ТЕТРАДИ) рисунок с домиком строго по клеточкам:
3. Составить программу после выполнения которой на экране появится это изображение.
4. Изменить программу, добавив новые элементы в рисунок и раскрасить его различными цветами.
Задание 3.
1. Используя оператор DRAW нарисуйте на экране свое имя.
3. Работа над контрольными вопросами.
Контрольные вопросы
- Как включить графический режим работы экрана?
- Какой оператор используется для построения отрезка? Какие точки нужно указывать при построении отрезка?
- Какой оператор используется для построения прямоугольника? Какие точки нужно указывать при построении прямоугольника?
- Какой оператор используется для построения окружности, овала? Что нужно задать, чтобы построить окружность?
- Какой оператор используется для построения закрашенного прямоугольника?
- Какой оператор используется для построения ломаной линии?
- Какой оператор используется для окрашивания фигур? Какие области нельзя окрасить с помощью этого оператора?
Презентация к уроку “Программная реализация вывода графических изображений на экран”
[Unnamed] |
|
1 |
|
Написать программу, которая выводит на экран изображение27.12.2009, 13:08. Показов 10166. Ответов 6
Need help!!!! Кликните здесь для просмотра всего текста [IMG]http://s43.***********/i099/0912/73/1ad82a4c22cf.jpg[/IMG] 2) Кликните здесь для просмотра всего текста [IMG]http://s43.***********/i099/0912/7a/7e91706c7c87.jpg[/IMG] 3) Кликните здесь для просмотра всего текста [IMG]http://s07.***********/i180/0912/ff/da372ed5ab2b.jpg[/IMG]
Задачи нужно решить через функции… |
firefox1913 28 / 28 / 6 Регистрация: 01.07.2009 Сообщений: 58 |
||||||||
27.12.2009, 18:19 |
2 |
|||||||
решение 1 задачи
Добавлено через 4 часа 26 минут
1 |
odip 7175 / 3234 / 81 Регистрация: 17.06.2009 Сообщений: 14,164 |
||||||||||||
27.12.2009, 22:46 |
3 |
|||||||||||
Задача 0.2
Добавлено через 11 минут
Добавлено через 16 минут
Пример Код > thread80649_s0_t5.exe 1 20 11 2
1 |
0 / 0 / 0 Регистрация: 07.07.2015 Сообщений: 5 |
|
07.07.2015, 17:02 |
4 |
У меня какие-то проблемы с ссылками на изображение,нет отображения половины символов в ссылках да и самих изображений нет.
0 |
rikimaru2013 |
07.07.2015, 17:23
|
Не по теме: Некрофили́я (от др.-греч. νεκρός — «мёртвый» и φιλία — «любовь») — любовь ко всему мёртвому, в многочисленной литературе выраженная как сексуальная девиация, являющейся половым влечением к трупам, что является только частным случаем. Может рассматриваться в том числе как разновидность фетишизма или как самостоятельное расстройство полового предпочтения.
0 |
Неэпический 17813 / 10585 / 2043 Регистрация: 27.09.2012 Сообщений: 26,625 Записей в блоге: 1 |
|
07.07.2015, 17:29 |
6 |
У меня какие-то проблемы с ссылками на изображение,нет отображения половины символов в ссылках да и самих изображений нет. Потому что они на стороннем хостинге, доступ к которому отсюда закрыт. Не зря же в правилах написали Картинки и любые другие файлы загружайте на форум, во избежание их удаления или потери на сторонних ресурсах.
0 |
0 / 0 / 0 Регистрация: 07.07.2015 Сообщений: 5 |
|
07.07.2015, 22:56 |
7 |
Тогда ещё вопрос,не по теме.Мою старую,трёхлетнюю, учётку удалили,хотя напоминалки приходят регулярно.Можно её восстановить? Есть ли смысл писать в техподдержку? Добавлено через 1 минуту
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
07.07.2015, 22:56 |
7 |
“Использование растровых изображений. Построение графиков и диаграмм“
1. Составить программу, которая загружает из файлов и выводит на экран портреты ученых.
Program m;
uses GraphABC;
var pic:integer;
begin
SetWindowSize (1000, 1000);
pic:=LoadPicture (‘Leonardo.jpg’);
DrawPicture (pic, 270, 5, 200, 250);
pic:=LoadPicture (‘Newton.jpg’);
DrawPicture (pic, 470, 250, 200, 250);
pic:=LoadPicture (‘Einstein.jpg’);
DrawPicture (pic, 270, 500, 200, 250);
pic:=LoadPicture (‘Galileo.jpg’);
DrawPicture (pic, 670, 450, 200, 250);
pic:=LoadPicture (‘bohr.jpg’);
DrawPicture (pic, 670, 50, 200, 250);
end.
1. Составить программу, которая загружает из файла и выводит на экран изображение одной из планет Солнечной системы на фоне звёздного неба.
program n;
uses GraphABC;
var nebo, zem, luna, x0, y0, R, x, y, u:integer;
begin
SetWindowSize(600,400);
x0:=300; y0:=200;
R:=160;
nebo:=LoadPicture(‘sky.gif’);
zem:=LoadPicture(‘earth.gif’);
luna:=LoadPicture(‘luna3.gif’);
DrawPicture(nebo, 0,0,600,400);
DrawPicture(zem,200,120,200,200);
end.
2. Составьте программу, которая демонстрирует:
program jjgg;
uses crt,GraphABC;
var nebo,zemlya,sputnik,x:integer;
begin
SetWindowSize(500,500);
nebo:=LoadPicture(‘Sky.jpg’);
zemlya:=LoadPicture(‘earth.gif’);
SetPictureTransparent (zemlya, true);
sputnik:=LoadPicture(‘sputnik.jpg’);
SetPictureTransparent (sputnik, true);
x:=0;
while x<400 do
begin
ClearWindow;
DrawPicture(nebo,0,0);
SetPictureTransparent (zemlya, true);
DrawPicture(zemlya,200,150,250,250);
DrawPicture(sputnik,x,40,50,40);
x:=x+1;
sleep(20);
Redraw;
end;
end.
б) движение планет вокруг Солнца по круговым орбитам.
Program mvchxf;
uses crt, GraphABC;
Var fon,a,b,c,x0,y0,x,y,u,R:integer;
Begin
SetWindowSize(170,150);
fon:=LoadPicture(‘sky.gif’);
a:=LoadPicture(‘sun4.jpg’);
b:=LoadPicture(‘earth.gif’);
c:=LoadPicture(‘mars.jpg’);
x0:=75; y0:=55;
R:=50; u:=1;
while u<=360 do
begin
ClearWindow;
DrawPicture(fon,0,0);
DrawPicture(a,70,60,30,30);
x:=round(x0+R*cos(pi*u/180));
y:=round(y0-R*sin(pi*u/180));
DrawPicture(b,x,y,10,10);
x:=round(x0+R*0.8*cos(pi*u/180));
y:=round(y0-R*0.8*sin(pi*u/180));
DrawPicture(c,y,x,10,10);
U:=u+1;
sleep(30);
Redraw;
end;
End.
География
1. Вывести карту Беларуси и построить таблицу с данными о площади и глубине озёр, столбчатую и линейную диаграмму этих данных.
Program qwerty;
Uses GraphAbc;
Var karta, A : integer;
Begin
setWindowSize(520,480);
karta := LoadPicture(‘belarus.gif’); DrawPicture(karta,10,10);
setBrushColor(clBlue);
rectangle(60,320,75,335);
rectangle(190,130,205,145);
rectangle(210,50,225,65);
rectangle(250,370,265,385);
rectangle(270,140,285,155);
rectangle(360,395,375,410);
End.
б) Вывести карту Беларуси, построить таблицу с данными о площади и глубине озер, столбчатую, линейчатую диаграмму (столбчатая и линейная диаграммы в разных программах).
program jyflkufl;
uses crt,GraphABC;
const A: array[1..10] of real=(79.6,52.8,40.3,37.71,36.1,26.0,24.6,22.3,22.0,16.2);
B:array[1..10] of real=(24.8,7.5,2.9,11.5,12.0,2.3,8.1,8.7,16.5,24.6);
C:array[1..10] of string
(‘Нарочь’,’Освейское’,’Червоное’,’Лукомльское’,’Дривяты’,’Выгонощанское’,’Нещердо’,’Свирь’,’Снуды’,’Мядель’);
var karta,i,S:integer;
begin
SetWindowSize(600,600);
writeln(‘Площадь и глубина озер Беларуси:’);
karta:=LoadPicture(‘karta.gif’);
DrawPicture(karta,340,0,250,200);
writeln(‘Озеро’:15,’Площадь’:13,’Глубина’:9);
for i:=1 to 10 do
writeln(i,C[i]:15,’ ‘,A[i]:7:2,’ км.кв’,B[i]:7:2,’м’);
writeln;writeln;
writeln(‘Выберите вариант диаграммы:1-столбчатая,2-линейная’);
read(S);
writeln;
SetPenWidth(5);
case S of
1:begin writeln(‘Столбчатая диаграмма’);
for i:=1 to 10 do
begin
write(‘ ‘,i);
SetPenColor(clRed);
Line(5+25*i,420-round(2*A[i]),5+25*i,420);
SetPenColor(clGreen);
Line(10+25*i,420-round(2*B[i]),10+25*i,420);
end;
end;
2:begin writeln(‘Линейчатая диаграмма’);
for i:=1 to 10 do
begin
writeln(C[i]:15,’ ‘);
SetPenColor(clBlue);
Line(160,250+15*i,160+round(5*A[i]),250+15*i);
SetPenColor(clPurple);
Line(160,255+15*i,160+round(5*B[i]),255+15*i);
end;
end;
в) выводит карту Европы и помечает страны (столицы 7 государств) символами, размеры которых пропорциональны численности населения.
program juyflk;
uses crt,GraphABC;
const A: array[1..7] of real=(37.7,22.0,21.1,17.7,16.2,11.6,7.4);
B:array[1..7] of string=(‘Берлин’,’Варшава’,’Париж’,’Минск’,’Стокгольм’,’Хельсинки’,’Амстердам’);
var karta,i,R:integer;beginSetWindowSize(700,700);
writeln(‘численность населения столиц государств’);
karta:=LoadPicture(‘karta.gif’);
DrawPicture(karta,0,200,700,500);
writeln(‘Столица’:15,’Численность населения’:13);
for i:=1 to 7 dowriteln(i,B[i]:15,’ ‘,A[i]:7:1,’ тыс.чел’);
SetBrushColor(clBlue);
R:=round(sqrt(A[1]/pi));
circle(405,470,R);
R:=round(sqrt(A[2]/pi));
circle(510,465,R);
R:=round(sqrt(A[3]/pi));
circle(250,520,R);
R:=round(sqrt(A[4]/pi));
circle(580,440,R);
R:=round(sqrt(A[5]/pi));
circle(455,373,R);
R:=round(sqrt(A[6]/pi));
circle(530,350,R);
R:=round(sqrt(A[7]/pi));
circle(290,475,R);
end.
Биология
1. а) Через сколько дней уровень загрязнения воды уменьшится в N раз, если каждый день он уменьшается на P % (значения N и P вводятся с клавиатуры).
program kjbh;
var N,P,i,t,u0:integer;
u:real;
begin
write(‘Введите уровень загрязнения воды’);
readln(u0);
write(‘Введите значение уменьшения загрязнения воды’);
readln(P);
write (‘Введите коэффициент уменьшения загрязнения воды’);
readln(N);
write(‘Через’,t,’дней’);
t:=0; u:=u0;
while u>=u0 div N do
begin
t:=t+1;
u:=u-u*p/100;
end;
end.
б) Через сколько дней количество атомов радиоактивного изотопа Иод-131 уменьшится в 100 раз, если период полураспада составляет 8,14 дня.
program mhfv;
var k0:integer; k,t:real;
begin
write(‘Введите количество атомов радиоактивного изотопа Иод-131’);
readln(k0);
t:=0; k:=k0;
while k>=k0 div 100 do
begin
k:=k/2;t:=t+8.14;
end;
write(‘Через’,t,’дней’);
end.
в) Через сколько дней выздоровеет больной, т.е. через сколько дней концентрация болезнетворных бактерий в крови уменьшится с 50 до 12 единиц. В результате применения лекарства концентрация бактерий ежедневно уменьшается на 20% по сравнению с предыдущим днем.
program poiu;
var t:integer; k:real;
begin
t:=0; k:=50;
while k>=12 do
begin
k:=k-k*20/100;
t:=t+1;
end;
write(‘Через’,t,’дней’);
end.
Физика
Составьте программу, которая:
а) строит изображения предмета в плоском зеркале (расстояние от предмета до зеркала вводится с клавиатуры):
write(‘Ââåäèòå óãîë ïàäåíèÿ ëó÷à (5-100):’);
pic:=LoadPicture(‘robot.jpg’);
DrawPicture(pic,320+R,100,200,290);
DrawPicture(pic,320-R,100,-200,290);
line(trunc(120+R/2),100,trunc(520-R/2),100);
end.
б) демонстрирует отражение и преломление света на плоской поверхности (угол падения вводится с клавиатуры):
program hjkfgu;
uses crt, GraphABC;
var u,x,y:integer;
begin
SetWindowSize (400,400);
write(‘ââåäèòå óãîë ïàäåíèÿ ëó÷à(0-90):’);
readln(u);
SetPenColor(clBrown);
SetPenWidth(4);
line(150,50,150,350);
SetPenColor(clblue);
line(0,200,300,200);
FloodFill(50,250,clwhite);
SetPenColor(clGreen);
x:=abs(round(150*sin(pi/180*(180-u))));
y:=abs(round(150*cos(pi/180*(180-u))));
line(150,200,150-x,200-y);
x:=round(150*sin(pi/180*u));
y:=round( 150*cos(pi/180*u));
line(150,200,150+x,200-y);
SetPenColor(clpurple);
x:=abs(round(150*sin(pi/180*(270+u))));
y:=abs(round(150*cos(pi/180*(270+u))));
line(150,200,150+ x,200+y);
end.
Текст задания
Написать программу, которая выводит на экран изображение заданного графического объекта (с соблюдением заданной цветовой гаммы).
Исходный код программы
Program Lab4; Uses crt, graph; var xc, yc, gd, gm,r: integer; begin Write ('PA3MEP PucyHKA:'); Readln(r); gd:=detect; initgraph (gd, gm, 'c:Tp7bgi'); if Graphresult<>0 then begin write ('Graphic Error:',grapherrormsg (graphresult)); halt; end; xc:=getmaxx div 2; yc:=getmaxy div 2; setfillstyle(1,6); Bar (xc-3*r, yc-3*r, xc+3*r,yc+3*r); setcolor(0); moveto(xc+3*r,yc+3*r); lineto(xc+3*r,yc-3*r); lineto(xc-3*r,yc-3*r); lineto(xc-3*r,yc+3*r); lineto(xc+3*r,yc+3*r); moveto(xc+r,yc-2*r); lineto(xc+r,yc+2*r); lineto(xc-r,yc+2*r); lineto(xc-r,yc-2*r); lineto(xc+r,yc-2*r); line (xc,yc-2*r,xc,yc+2*r); line (xc,yc-r,xc+r,yc-r); setcolor(green); line(xc-4*r,yc-2*r,xc,yc-6*r); line(xc,yc-6*r,xc+4*r,yc-2*r); readln; closegraph; end.