Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
21
Добавлен:
20.05.2015
Размер:
2.45 Mб
Скачать

Программирование на языке Си

Тема 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":

"Лягушка"

"Корона"

дробная часть x отбрасывается

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": Ввести с клавиатуры число окружностей и построить фигуру, залив области разным цветом.

Соседние файлы в папке ПОЛЯКОВ_ПРЕЗЕНТАЦИИ_С++