Drayverlar .bgi fayllarida saqlanadi. Ko’pincha gd = 0 (yoki gd = DETECT) deb olinadi. Grafik rejimidan yana matn rejimiga
1.15M
Category: programmingprogramming

C++ tilining grafik imkoniyatlari. Inisializasiyallash. Ekrandan foydalanish. Grafik holat. Funksiya grafiklarini qurish

1.

2.12-Ma’ruza
C++ tilining grafik
imkoniyatlari. Inisializasiyallash.
Ekrandan foydalanish. Grafik holat.
Funksiya grafiklarini qurish
HTTP://ACM.TUIT.UZ/FORUM

2.

Koordinatalar sistemasi
(0,0)
X( 640)
y
x
Y (480)
(x,y)
http://acm.tuit.uz/forum

3.

“ Sendvich” prinsipi
Grafika uchun oyna ochish
Grafik rejimida ishlash
Grafika oynasini yopish
http://acm.tuit.uz/forum

4.

Borland C++ da grafika
C/C++ tilining grafik imkoniyatlarini ishga tushirish
uchun quyidagi direktiva ulanishi kerak:
# include <graphics.h>
Matn rejimidan grafik rejimiga o’tish uchun maxsus
proseduradan foydalaniladi:
initgraph (&gd, &gm, “ path “);
bu erda:
gd – drayver nomi
gm – rejim nomi
path – yo’l
http://acm.tuit.uz/forum

5. Drayverlar .bgi fayllarida saqlanadi. Ko’pincha gd = 0 (yoki gd = DETECT) deb olinadi. Grafik rejimidan yana matn rejimiga

Grafik dasturning strukturasi (Borland C++)
#include <graphics.h>
Kerakli
fayllarni ulash
#include <conio.h>
void main( )
{
int gd=0, gm ;
initgraph (&gd, &gm, “ c:\bc\bin “);
Grafik rejimni
o’rnatish
funksiyasi
... // dastur
getch( );
closegraph();
Grafik rejimni
yopish funksiyasi
}
http://acm.tuit.uz/forum

6.

Grafik dasturning strukturasi (Dev-C++)
#include <graphics.h>
int main( )
{
initwindow(640, 480);
... // dastur
getch( );
closegraph();
return 0;
}
http://acm.tuit.uz/forum
Kerakli
fayllarni ulash

7.

Dev-C++ da grafika va uni sozlash
Dev-C++ da grafika bilan ishlash uchun quyidagi sozlashlarni
bajarish lozim:
graphics.h va libbgi.a (biblioteka) fayllarni yuklab oling.
1. graphics.h faylni C:\Dev-Cpp\include papkaga nusxa
ko’chiring.
2. libbgi.a faylni C:\Dev-Cpp\lib papkaga nusxa ko’chiring.
Dev-C++ ni ishga tushiring va Tools Compiler options
menyusiga kiring.
Compiler bo’limiga o’ting va Add these commands to the linker
command line ga ptichka qo’ying va uning oynasiga satrni
qo’shing
-lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32
Quyida rasmda ko’rsatilgan:
http://acm.tuit.uz/forum

8.

Dev-C++ da grafika va uni sozlash
http://acm.tuit.uz/forum

9.

Ranglar kodi
Nomi
Kod
Коd
Nomi
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
http://acm.tuit.uz/forum

10.

Ranglar politrasi
rang = R + G + B
Red
qizil
0..255
Green
yashil
0..255
Blue
Ko’k
0..255
R = 218
G = 164
B = 32
?
R = 135
G = 206
B = 250
Ranglar soni qancha?
256·256·256 = 16 777 216 (True Color)
http://acm.tuit.uz/forum

11.

Ranglarni boshqarish
Chiziq va matn rangi:
Rang №
set color = rangini o’rnat
R
G
B
setcolor ( 12 );
setcolor ( COLOR(255,255,0) );
Rang to’kish usuli:
set fill style = rang to’kish usulini o’rnat
setfillstyle ( usul, rang );
0 – usulsiz; 1 – uzluksiz; 2 – gorizontal chiziq;
3..6 – turli og’ma chiziqlar;
7..8 – setkali chiziqlar; 9..11 – nuqtali;
http://acm.tuit.uz/forum

12.

Nuqta, kesma, siniq chiziq
Rangi
(x, y)
(x1, y1)
(x1, y1)
(x5, y5)
putpixel (x, y, 9);
setcolor ( 10 );
(x2, y2) line(x1, y1, x2, y2);
(x2, y2)
setcolor ( 12 );
moveto (x1, y1);
(x3, y3) lineto (x2, y2);
lineto (x3, y3);
lineto (x4, y4);
(x4, y4)
lineto (x5, y5);

13.

To’g’ri to’rtburchaklar
(x1, y1)
(x2, y2)
setcolor ( 9 );
rectangle (x1, y1, x2, y2);
uzluksiz
(x1, y1)
12-rang
setfillstyle ( 1, 12 );
(x2, y2) bar (x1, y1, x2, y2);
(x1, y1)
(x2, y2)
setfillstyle ( 1, 12 );
bar (x1, y1, x2, y2);
setcolor ( 9 );
rectangle (x1, y1, x2, y2);
http://acm.tuit.uz/forum

14.

Aylana, rang to’kish, matn yozish
R
(x, y)
setcolor (4);
circle ( x, y, R );
setfillstyle ( 1, 11 );
floodfill ( x, y, 0);
(x, y)
Chegara rangi
nomeri
(x, y)
setcolor ( 9 );
Eng zo’r dastur outtextxy(10,10,“Eng zo’r dastur”);
http://acm.tuit.uz/forum

15.

Masalan:
setfillstyle (1, 9);
bar (100,100,300,200);
setcolor (13);
rectangle (100,100,300,200);
(200, 50)
moveto (100,100);
(300, 100)
(100, 100)
lineto (200, 50);
lineto (300,100);
setfillstyle (1, 14);
floodfill (200, 75, 13);
setcolor (15);
(300, 200)
circle (200, 150,50);
Sharik's house setfillstyle (1, 10);
floodfill (200,150, 15);
setcolor (12);
outtextxy (100, 230,
"Sharik's house.");

16.

Topshiriq
1: “Qurbaqa"
2: “Toj"
http://acm.tuit.uz/forum

17.

18
Штрихлаш
N та чизиқ (N=5)
(x1, y1)
h
(x2, y2)
x2 x1
h
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);
...
x
x
Каср қисмидаги
натижа
h = (x2 – x1) / (N + 1.);
rectangle (x1, y1, x2, y2);
float x, h;
for (x = x1+h; x < x2; x += h)
line(x, y1, x, y2);
x нинг каср қисми
!
ташланиб юборилади

18.

19
Ранг қандай ўзгартирилади?
заливка ранги
(x1, y1)
чегара
ранги
setfillstyle ( 1, c );
floodfill( ???, ???, 15 );
x
(x-1, y1+1)
(x2, y2)
Нимада муаммо
? бўлиши
мумкин?
с ни ўзгартириш: 1, 2, 3,
...
c = 1;
<= x2; x += h)
for (x = x1+h; x <=
{
line (x, y1, x, y2);
setfillstyle ( 1, c );
floodfill (x-1, y1+1, 15);
c ++;
}

19.

20
Штрихлаш
a
(x1, y1)
(x2, y2)
(x3+a, y1)
(x3, y2)
h
a x1 x2
x3 x2
h
N 1
line( x1+h,
y1, x1+h-a,
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);
Плюс ва минуслар?
?

20.

21
Штрихлаш
hx
(x1, y1)
hx
hy
(x2, y2)
x2 x1
N 1
hy
y2 y1
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, y1+3*hy);
...
y
x
y
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;
}

21.

22
Топшириқ
3. Клавиатурадан чизиқлар сонини киритиш ва фигурани
ясаш:
4. Клавиатурадан чизиқлар сонини киритиш ва фигурани ясаш:

22.

23
Топшириқ
5. Клавиатурадан штрихлаш чизиқлари сонини киритиш ва
барча соҳаларини турли ранглар билан бўяб фигурани
ясаш.
6. Клавиатурадан айланалар сонини киритиш ва сохаларни
турли ранглар билан бўяб фигурани ясаш.

23.

24
Процедуралар
Ишлаб чиқиш тартиби:
• Бир хил ёки ўхшаш харакатларни ажратиш (учта фигура)
• Уларда умумийлик (ўлчови, форма, бурилиш бурчаги) ва
фарқни (координаталар, ранг) топиш
• Фарқни номаълум ўзгарувчи кўринишида ёзиб олиш, улар
процедура параметрлари бўлади
процедура
номи
(x, y-60)
60
(x+100, y)
(x, y)
int
{
формаль
параметрлар
Tr( int x, int y, int c )
moveto ( x, y );
ранг
lineto ( x, y-60 );
lineto ( x+100, y );
координаталар
lineto ( x, y );
setfillstyle ( 1, c );
floodfill ( x+20, y-20, 15);
100
процедура танаси
}

24.

25
Дастур
формаль параметрлар
60
int Tr( int x, int y, int c)
{
...
}
(100,100)
100
процедурани
чақириш
int main()
{
...
Tr(100, 100, LIGHTBLUE);
Tr(200, 100, LIGHTGREEN);
Tr(200, 160, LIGHTRED);
...
}
процедура
маълум параметрлар

25.

26
Процедуралар
Хусусияти:
• Одатда процедуралар асосий дастурдан
юқорида жойлашади
• Процедура номида формаль параметрлар санаб
ўтилади, уларнинг номлари кўрсатилади, чунки
ўзгариши мумкин
int Tr( int x, int y, int c )
• Процедурани чақирганда қавс ичида маълум
параметрлар кўрсатилади (сон ёки арифметик
ифода) худди шу тартибда
Tr ( 200, 100, LIGHTGREEN );
x
y
c

26.

27
Процедуралар
Хусусияти:
• Процедура номида хар бир формаль
параметрларнинг типи кўрсатилади
int A ( int x, float y, char z ) { ... }
• Процедура ичида параметрлар ўзгарувчи сифатида
фойдаланилади
• Процедурада қўшимча локал ўзгарувчиларни о
эълон қилиш мумкин, лекин уларга бошқа
процедуралар мурожат эта олмайди
int A ( int x, float y, char z )
{
Локал
int a2, bbc = 345;
ўзгарувчилар
...
}

27.

Grafik funksiyalar
getmaxx - жорий режим ва драйверлар учун
горизонтал нуқталар сонини аниқлаш;
getmaxy - жорий режим ва драйверлар учун
вертикал нуқталар сонини аниқлаш.
bar3D (x1, y1, x2, y2, h, top) параллелопипед чизади. Бу ерда h параллелопипеднинг узунлиги;
top - юқори
қисмини чизиш учун керак. Агар topоn - бўлса
томи бор, агар topoff - бўлса томи йўк.
setbkcolor (R); -
Орқа
фонга ранг бериш
http://acm.tuit.uz/forum

28.

Grafik funksiyalar
arc (x, y, a, b, r) - ёй чизиш учун. Бу ерда
x ва y - марказнинг координаталари, a - бош
бурчак, b - охириги бурчак,
r - ёй радиуси.
Бурчаклар градусда кабул килинади.
ellipse (x, y, a, b, xr, yr) - худди шу
тартибда эллипс ёйини чизади.
drawpoly (n, p) - купбурчак чизиш учун. Бу
ерда n - купбурчакнинг учлари сони; p Купбурчак учларининг координаталари.
floodfill (x, y, color) - жорий ранг ва
усулдан фойдаланган холда чегараланган сохани
буяш. Бу ерда x ва y - шу сохага тегишли
булган нукта координатаси
http://acm.tuit.uz/forum

29.

Grafik funksiyalar
Аввал ранг, стили кейин чизмалар курсатилади.
Масалан:
setcolor (4);
// чегара ранги
setfillstyle (1, 2); // 1-стиль ва яшил ранг
circle (50, 50, 35);
floodfill (50, 50, 4); /*айлана ичига ранг
тўкиш, бўяладиган чегара ранги рангли қалам
билан бир хил бўлиши керак*/
http://acm.tuit.uz/forum

30.

Grafik funksiyalar
setlinestyle (s, a, b) – турли стилдаги
чизиқларни чизиш учун; Бу ерда
s - style номери;
a –фойдаланувчи стилини яратиши мумкин бўлган
параметр, одатда а=1 деб олинади;
b- чизиқнинг қалинлигини кўрсатадиган
параметр
0 – оддий чизиқ;
1,2 ,3 - турли пунктир чизиқлар
4 – сийрак нуктали чизиқ.
http://acm.tuit.uz/forum

31.

Функция графикларини қуриш
Топшириқ: y = 3 sin(x) функция графигини 0 ва 2π
интервалида қуриш.
Таҳлил:
Максимал қиймат x = π/2 да ymax = 3
Минимал қиймат x = 3π/2 да ymin = -3
Муаммо:функция
математик
система
координаталарида берилган, лекин координаталарни
пикселларда кўрсатган холда экранда қуриш керак.
http://acm.tuit.uz/forum

32.

Координаталарни алмаштириш
Координаталарни
математик
системаси
Y
(0,0)
x
(0,0)
(x,y)
y
b
Координаталарни
(пикселларда) экран
системаси
a


(xэ,yэ)
X
k – масштаб (тасвирнинг
экрандаги бирлик қисмининг
узунлиги)
http://acm.tuit.uz/forum
xэ = a + kx
yэ = b - ky

33.

Дастур

const a = 50, b = 200, k = 50;
const float xmin = 0, xmax =2*M_PI;
float x, y, h = 0.01;
h – x қадамнинг ўзгариши
int
xe, ye, w;
w –ОХ ўқининг пикселдаги узунлиги
w = (xmax - xmin)*k;
ўқларнинг
line(a-10, b, a+w, b);
координаталари
line(a, 0, a, 2*b);
албатта
for (x = xmin; x < xmax; x += h)
#include <math.h>
{
y = 3*sin(x);
Графикни
қуриш цикли
xe = a + k*x;
ye = b - k*y;
putpixel (xe, ye, 12);
Нуқтанинг экрандаги
координаталари
}

34.

Дастур
#include <graphics.h>
#include <math.h>
int main()
{
initwindow(640,480);
const int a = 50, b = 200, k = 50;
const float xmin = 0, xmax =4*M_PI;
float x, y, h = 0.01;
float
xe, ye, w;
w = (xmax - xmin)*k;
line(a-10, b, a+w, b);
line(a, 0, a, 2*b);
for (x = xmin; x < xmax; x += h)
{
y = 3*sin(x);
xe = a + k*x;
ye = b - k*y;
putpixel (xe, ye, 12);
}
getch();
return 0; }

35.

Нуқталар қандай бирлаштирилади?
Алгоритм:
Агар биринчи нуқта
(xэ,yэ)нуқтага ўтиш
акс ҳолда
(xэ,yэ) нуқтада қисм
Харакат
вариантини
танлаш
Программа:
ўзгарувчи-флаг
(фақат 1 ёки 0)
int first;
...
Бошланғич қиймат
first = 1;
for (x = xmin; x < xmax; x += h)
{
...
if ( first ) {
moveto(xe, ye);
first = 0;
}
else lineto(xe, ye);
...
}
http://acm.tuit.uz/forum

36.

Топшириқ
3: y = x2 функция графигини [3,3] интервалида қуриш.
4: Функция (эллипс)
графигини қуриш
x2 y2
1
16 9
http://acm.tuit.uz/forum
English     Русский Rules