Similar presentations:
C++ tilining grafik imkoniyatlari. Inisializasiyallash. Ekrandan foydalanish. Grafik holat. Funksiya grafiklarini qurish
1.
2.12-Ma’ruzaC++ 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” prinsipiGrafika uchun oyna ochish
Grafik rejimida ishlash
Grafika oynasini yopish
http://acm.tuit.uz/forum
4.
Borland C++ da grafikaC/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 sozlashDev-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 sozlashhttp://acm.tuit.uz/forum
9.
Ranglar kodiNomi
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 politrasirang = 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 boshqarishChiziq 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 chiziqRangi
(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 yozishR
(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.
Topshiriq1: “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 funksiyalargetmaxx - жорий режим ва драйверлар учун
горизонтал нуқталар сонини аниқлаш;
getmaxy - жорий режим ва драйверлар учун
вертикал нуқталар сонини аниқлаш.
bar3D (x1, y1, x2, y2, h, top) параллелопипед чизади. Бу ерда h параллелопипеднинг узунлиги;
top - юқори
қисмини чизиш учун керак. Агар topоn - бўлса
томи бор, агар topoff - бўлса томи йўк.
setbkcolor (R); -
Орқа
фонга ранг бериш
http://acm.tuit.uz/forum
28.
Grafik funksiyalararc (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 funksiyalarsetlinestyle (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э,yэ)
X
k – масштаб (тасвирнинг
экрандаги бирлик қисмининг
узунлиги)
http://acm.tuit.uz/forum
xэ = a + kx
yэ = b - ky
33.
Дастур2π
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