- •Программирование на языке Си
- •Программирование на языке Си
- •Управление клавишами
- •Программирование на языке Си
- •Программирование на языке Си
- •Программирование на языке Си
- •Программирование на языке Си
- •Программирование на языке Си
- •Программа
- •Программирование на языке Си
- •Программа
- •Программирование на языке Си
- •Программирование на языке Си
- •Программирование на языке Си
- •Цвета
- •Программирование на языке Си
- •Преобразование координат
- •Программирование на языке Си
- •Программирование на языке Си
- •Управление клавишами
- •Программирование на языке Си
- •Программирование на языке Си
Программирование на языке Си
Тема 10. Графика
© К.Ю. Поляков, 2007
108
Система координат
(0,0) |
|
|
640 |
(639,0) |
X |
|
|
|
|
|
y |
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x (x,y)
480
(0,479) |
|
|
|
Y |
(639,479) |
109
Принцип сэндвича
включить графический режим
рисование в графическом
режиме
выключить графический режим
110
Структура графической программы
#include <graphics. #include <conio.h>
библиотека для работы с графикой
void |
вспомогательные |
||
переменные d, m |
|||
|
|||
{ |
|
путь к файлу |
|
|
|
||
int d = DETECT, m; |
egavga.bgi |
включить
initgraph(&d, &m, графический "c:\\borlandc\\bgi"); режим
... // getch();
closegraph();
}
чтобы посмотреть результат
выключить графический режим
Цвета |
|
111 |
||
|
|
|
||
|
|
|
|
|
Код |
Название |
Код |
Название |
|
0 |
BLACK |
8 |
DARKGRAY |
|
1 |
BLUE |
9 |
LIGHTBLUE |
|
2 |
GREEN |
10 |
LIGHTGREEN |
|
3 |
CYAN |
11 |
LIGHTCYAN |
|
4 |
RED |
12 |
LIGHTRED |
|
5 |
MAGENTA |
13 |
LIGHTMAGENTA |
|
6 |
BROWN |
14 |
YELLOW |
|
7 |
LIGHTGRAY |
15 |
WHITE |
112
Управление цветом
Цвет линий:
set color = установить цвет
setcolor ( цвет );
Цвет и стиль заливки:
set fill style = установить стиль заливки
setfillstyle ( стиль, цвет );
0 |
– выключить |
3..6 наклонные линии |
|
1 |
– сплошная |
7..8 сетка |
9..11 точечная |
Цвет текста:
setcolor ( цвет );
113
Точки, отрезки и ломаные
(x, y)
(x1, y1)
(x2, y2)
(x1, y1) (x2, y2)
(x5, y5) (x3, y3)
(x4, y4)
цвет (номер или название)
putpixel (x, y, 9);
setcolor ( 10 );
line (x1, y1, x2, y2);
setcolor ( 12 ); moveto (x1, y1); lineto (x2, y2); lineto (x3, y3); lineto (x4, y4); lineto (x5, y5);
114
Прямоугольники
(x1, y1)
(x2, y2) (x1, y1)
(x2, y2)
(x1, y1)
(x2, y2)
setcolor ( 9 );
rectangle (x1, y1, x2, y2);
стиль
(1 - сплошная) цвет
setfillstyle ( 1, 12 ); bar (x1, y1, x2, y2);
setfillstyle ( 1, 12 ); bar (x1, y1, x2, y2); setcolor ( 9 );
rectangle (x1, y1, x2, y2);
115
Окружность, заливка, текст
|
R |
|
setcolor ( LIGHTRED ); |
(x, y) |
circle ( x, y, R ); |
|
стиль |
цвет |
(1 - сплошная) |
заливки |
(x, y) |
setfillstyle ( |
1, |
LIGHTCYAN ); |
|
floodfill ( x, |
y, |
BLACK ); |
цвет границы
(x, y) |
setcolor ( 9 ); |
Вася |
outtextxy ( x, y, "Вася" ); |
116
Пример
(200, 50)
(100, 100)
(300, 200)
Sharik's house
setfillstyle(1,9);
bar(100,100,300,200);
setcolor(13);
rectangle(100,100,300,200);
moveto(100,100); lineto(200, 50); lineto(300,100); setfillstyle(1,14); floodfill(200, 75, 13); setcolor(15); circle(200, 150,50); setfillstyle(1, 10); floodfill(200,150, 15); setcolor(12); outtextxy(100, 230,
"Sharik's house.");
117
Задания
"4":
"5":
"Лягушка"
"Корона"
118
Штриховка
(x1, y1) |
|
N линий (N=5) |
h |
|
|
x2 x1 |
|
||||||||
|
|
|
|
|
|
N 1 |
|||||||||
|
|
|
|
|
|
|
|
|
rectangle (x1, y1, x2, y2); |
||||||
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
line( x1+h, |
|
|
|
y1, x1+h, y2); |
||
|
|
|
|
|
|
|
|
|
line( x1+2*h, y1, x1+2*h, y2); |
||||||
|
|
|
|
|
|
|
|
|
line( x1+3*h, y1, x1+3*h, y2); |
||||||
|
|
|
|
h |
|
|
|
|
|||||||
|
|
|
|
|
|
(x2, y2) ... |
|
x |
|
|
x |
||||
|
|
|
|
|
|
|
|
||||||||
h = (x2 – x1) / (N + 1. |
|
|
|
|
результат – с |
||||||||||
|
|
|
|
дробной частью |
|||||||||||
rectangle (x1, y1, x2, y2); |
|
! |
|
|
|||||||||||
for (x = x1+h; x < x2; x += h) |
|
float x, h; |
line(x, y1, x, y2);
119
Как менять цвет?
цвет заливки |
цвет |
|
границы |
(x1, y1) x
(x-1, y1+1)
(x2, y2)
?В чем может быть проблема?
setfillstyle ( 1, c ); floodfill( ???, ???, 15 );
изменение c: 1, 2, 3, ...
c = 1;
for (x = x1+h; x <= x2; x += h)
{
line (x, y1, x, y2); setfillstyle ( 1, c ); floodfill (x-1, y1+1, 15); c ++;
}
120
Штриховка
(x2, y2) |
a
(x1, y1)
h
(x3+a, y1) |
a x x |
|
h |
x3 x2 |
|
N 1 |
|||
1 |
2 |
|
||
|
|
|
|
line( x1+h, |
y1, |
x1+h-a, |
y2); |
(x3, y2) |
line( x1+2*h, |
y1, |
x1+2*h-a, y2); |
|
line( x1+3*h, y1, x1+3*h-a, y2); |
||||
|
... |
|
|
|
|
x |
|
x-a |
|
h = |
(x3 – x2) / (N + 1.); |
после каждого шага |
|||
a |
= |
x2 |
– |
x1; |
выполняются две команды |
|
|||||
x |
= |
x1 |
+ |
h; |
|
for (i = 1; i <= N; i ++, x += h ) |
? Плюсы и минусы? |
line(x, y1, x-a, y2); |
|
|
121
Штриховка
(x1, y1)
hx
hy
(x2, y2)
h |
x2 x1 |
h |
y |
|
y2 y1 |
|
|
||||
x |
N 1 |
|
|
N 1 |
|
|
|
|
|
line( x1, y1+hy, |
x1+hx, |
|
|
y1+hy) ; |
|
|
|
line( x1, y1+2*hy, x1+2*hx, |
|
||
y1+2*hy); |
|
|
|
line( x1, |
y1+3*hy, |
x1+3*hx, |
y |
y1+3*hy); |
x |
||
|
|
|
hx = (x2 – x1) / (N + 1.); hy = (y2 – y1) / (N + 1.); x = x1 + hx; y = y1 + hy; for (i=1; i<=N; i++) {
line ( x1, y, x, y ); x += hx; y += hy;
}
122
Задания
"4":
"5":
Ввести с клавиатуры число линий и построить фигуру:
Ввести с клавиатуры число линий и построить фигуру:
123
Задания
"4": Ввести с клавиатуры число линий штриховки и построить фигуру, залив все области разным цветом.
"5": Ввести с клавиатуры число окружностей и построить фигуру, залив области разным цветом.