Grafika
Grafika
komputerowa
komputerowa
(
0
,
0
)
(
639
,
479
)
Układ współrzędnych w trybie
graficznym
Strony karty graficznej
Strony karty graficznej
VGA
VGA
:
VGALO
-
640200
pkt.,
16
kolorów,
4
strony
graficzne;
VGAMED
-
640350
pkt.,
16
kolorów,
2
strony
graficzne;
VGAHI
-
640480
pkt.,
16
kolorów,
1
strona
graficzna.
Stałe oznaczania kolorów:
nazwa
kod
BLACK
= 0;
// czarny
BLUE
= 1;
// niebieski
GREEN
= 2;
// zielony
CYAN
= 3;
// turkusowy
RED
= 4;
// czerwony
MAGENTA
= 5;
// karmazynowy
BROWN
= 6;
// brązowy
LIGHTGRAY = 7;
// jasnoszary
DARKGRAY = 8;
// ciemnoszary
LIGHTBLUE = 9;
// jasnoniebieski
LIGHTGREEN= 10;
// jasnozielony
LIGHTCYAN = 11;
// jasnoturkusowy
LIGHTRED
= 12;
// jasnoczerwony
LIGHTMAGENTA
=
13;
//
jasnokarmazynowy
YELLOW
= 14;
// żółty
WHITE
= 15;
// biały
Stałe
oznaczania
kolorów
mogą
być
wykorzystane np. w procedurach ustalających
kolor pierwszoplanowy
i
kolor tła
:
setcolor
(YELLOW);
// kolor
pierwszoplanowy - żółty
setbkcolor
(BLUE);
// kolor tła - niebieski
Stałe określania rodzaju i
grubości linii:
nazwa
kod
SOLID_LINE
= 0;
// linia ciągła
DOTTED _LINE = 1;
// linia kropkowana
CENTER _LINE = 2;
// linia symetrii
DASHED _LINE = 3;
// linia przerywana
USERBIT _LINE = 4;
// linia def. przez
programistę
NORM_WIDTH = 1;
// linia o grubości
pojedynczej
THICK_WIDTH = 3;
// linia o potrójnej
grubości
Stałe te są używane w procedurze
setlinestyle
określającej sposób rysowania linii.
Stałe wzorów wypełniających kontury:
nazwa
kod
EMPTY_FILL
= 0;
// wypełnianie w
kolorze tła
SOLID _FILL
= 1;
// wypełnianie w kol.
pierwszopl.
LINE _FILL
= 2;
// linie poziome
LTSLASH _FILL =3;
// linie ukośne cienkie
SLASH _FILL
= 4;
// linie ukośne pogrubione
BKSLASH _FILL = 5;
// linie ukośne prawostr.
pogrub.
LTBKSLASH _FILL = 6;
// linie ukośne prawe;
ciemne tło
HATCH _FILL
= 7;
// siatka prostokątna
XHATCH _FILL = 8;
// siatka ukośna
INTERLEAVE _FILL = 9;
// linie pionowe; ciemne
tło
WIDEDOT _FILL
= 10;
// kropki rzadkie
CLOSEDOT _FILL
= 11;
// kropki gęste
USER _FILL
= 12;
// wzór def. przez
programistę
Stałe wzorów wypełniających kontury
służą do określania sposobu wypełniania
konturów. Są one wykorzystywane w
procedurze
setfillstyle.
Stała
USER_FILL
oznacza wypełnienie
konturów wzorem definiowanym przez
programistę za pomocą procedury
setfillpattern
.
Stałe krojów pisma:
nazwa
kod
DEFAULF_FONT
=
0
;
TRIPLEX _FONT
=
1
;
SMALL _FONT
=
2
;
SANSSERIF _FONT =
3
;
GOTHIC _FONT
=
4
;
SCRIPT_FONT
=
5
;
SIMPLEX_FONT
=
6
;
TRIPLEX_SCR_FONT
=
7
;
COMPLEX_FONT
=
8
;
EUROPEAN_FONT =
9
;
BOLD_FONT
=
10
;
Podane stałe są wykorzystywane w
procedurze
settextstyle
.
Stałe kierunku wyprowadzania
tekstów
:
nazwa kod
HORIZ_DIR
=
0
;
// poziomo od strony
// lewej do prawej
VERT_DIR
=
1
;
// pionowo z góry na
dół
Dozwolone są kroje o rozmiarach od
1
do
10
.
Stałe justowania tekstu w poziomie i
pionie:
nazwa
kod
CENTER_TEXT
= 1;
// centrowanie tekstu
LEFT _TEXT
= 0;
// równanie w poziomie do
lewej
RIGTH _TEXT = 2;
// równ. w poziomie do prawej
BOTTOM _TEXT = 0;
// wyrównanie w pionie do
dołu
TOP _TEXT
= 2;
// wyrównanie w pionie do
góry
Stałe te są wykorzystywane w procedurze
settextjustify
.
Domyślnie
wyprowadzany
tekst
jest
wyrównywany w
poziomie do lewej
i w
pionie
do dołu
.
Wybrane procedury i funkcje pliku
Wybrane procedury i funkcje pliku
graphics.h
:
1.
Rozdzielczość
karty
graficznej:
getmaxx
( )
-
funkcja zwraca rozdzielczość
karty graficznej względem
osi X
;
getmaxy
( )
-
funkcja zwraca rozdzielczość
karty graficznej względem
osi Y
.
getx
( )
-
funkcja zwraca aktualną
współrzędną X
kursora;
gety
( )
-
funkcja zwraca aktualną
współrzędną Y
kursora;
moveto (X,Y)
-
procedura przesuwa kursor do
punktu ekranu
o współrzędnych (
X,Y
);
moverel (dX, dY)
-
procedura przesuwa kursor
graficzny do
punktu ekranu o współrzędnych
zmienionych w
stosunku do aktualnych
odpowiednio o
dX
i
dY
.
2. Kursor
graficzny:
Przykład:
moveto (50, 130);
// ustawienie kursora graficznego w
// punkcie o współrzędnych (
50, 130
)
moverel (60, 25);
// przesunięcie kursora graficznego z
// punktu o współrzędnych (
50, 130
)
// do punktu o współrzędnych (
110, 155
)
3. Teksty w trybie
graficznym.
settextstyle
(
czcionka,
kierunek,
rozmiar
) -
styl tekstu
;
settextjustify
(
poziom, pion
) -
wyrównanie
tekstu
;
outtext
(
łańcuch_znaków
) -
wyprowadzenie
podanego ciągu znaków
poczynając od aktualnej pozycji kursora
;
outtextxy
(
X, Y, łańcuch_znaków
) -
wyprowadzenie
podanego łańcucha
znaków poczynając od punktu (
X, Y
).
Przykła
dy:
settextstyle
(
SANSSERIF_FONT, HORIZ_DIR,
5
)
settextjustify
(
CENTER_TEXT,
TOP_TEXT
)
Przykłady:
outtextxy
(
320, 160,
"Ala ma kota "
);
Ala ma kota
320
160
settextjustify
(
RIGHT_TEXT
,
TOP_TEXT
);
outtextxy
(
320
,
160
,
" Ala ma kota "
);
Ala ma kota
320
160
settextjustify
(
CENTER_TEXT
,
CENTER_TEXT
);
outtextxy
(
320
,
160
,
" Ala ma kota "
);
Ala ma kota
320
160
4. Struktura linii
setlinestyle
(
rodzaj_linii
,
wzór
,
grubość
)
Procedura określa rodzaj linii i jej grubość.
Wszystkie parametry muszą być typu całkowitego.
Parametr
wzór
jest istotny tylko w przypadku, gdy
rozdaj linii jest określony przez stałą
USERBIT_LINE
. W przeciwnym przypadku może
przyjmować dowolną wartość typu całkowitego.
Jeżeli linia jest definiowana przez programistę
(parametr
wzór
jest równy stałej
USERBIT_LINE
),
to na ekranie będą wyświetlone tylko te punkty
linii, które odpowiadają bitom o wartości
1
.
5. Kreślenie figur
linerel
(
dX
,
dY
);
// kreślenie linii prostej
łączącej
// punkt o aktualnych
//
współrzędnych
z
punktem,
// którego współrzędne
różnią się od
// aktualnych o
dX
i
dY
a). Linia prosta
line
(
x1
,
y1
,
x2
,
y2
)
// kreślenie linii
prostej łączącej
// punkty o współrzędnych
(
x1, y1
)
// i (
x2, y2
)
lineto
(
x
,
y
);
// kreślenie linii prostej
łączącej
// punkt o aktualnych
współrzędnych
// z punktem (
x, y
)
Współrzędne punktów muszą być sekwencją par
liczb całkowitych odpowiadających współrzędnym
x
oraz
y
kolejnych wierzchołków wieloboku.
b). Prostokąt
rectangle
(
x1, y1, x2, y2
);
// (
x1, y1
) -
współrzędne
// lewego górnego
narożnika
// prostokąta, natomiast
(
x2, y2
)
// są to współrzędne
prawego
// dolnego narożnika
prostokąta
c). Wielobok
drawpoly
(
Liczba_Punktów
,
Współrzędne_Punktów
);
// liczba punktów musi być o
1
większa
// od liczby wierzchołków wieloboku
arc
(x, y, , , r);
// rysowanie łuku okręgu o
promieniu
r
,
// którego środek znajduje się w
punkcie
//
(x, y)
;
- kąt początkowy
łuku;
- kąt
// końcowy łuku.
d). Okrąg
circle
(
x, y, r
);
// rysowanie okręgu o promieniu
r
,
// którego środek znajduje
się w punkcie
//
(x,y)
e). Łuk okręgu
setfillpattern
(
Wzór_Definiowany,
Kolor_Wzoru
);
// wzór definiowany jest
wzorcem 88 piks.
Wyspecyfikowanym wzorem wypełnia się figury
zamknięte:
f). Wypełnianie konturów
zamkniętych
setfillstyle
(
wzór
,
kolor
)
// określenie wzoru wypełniającego kontur;
kolor
- jest
// kolorem wzorca
C++
oferuje
12
wzorów standardowych (patrz
stałe wypełnień) oraz wzór programisty
USER_FILL
. Użycie wzoru
USER_FILL
wymaga zdefiniowania wzoru za pomocą
procedury:
bar3d
(
x1
,
y1
,
x2
,
y2
,
h
,
góra
);
// słupek trójwymiarowy;
//
x1
,
y1
- współrzędne lewego
górnego
// narożnika płaszczyzny czołowej
słupka;
//
x2
,
y2
- współrzędne prawego
dolnego
// narożnika płaszczyzny czołowej
słupka;
//
h
- głębokość;
góra
- parametr typu
//
int
; wartość niezerowa parametru
powoduje
// zaznaczenie płaszczyzny górnej
bar
(
x1
,
y1
,
x2
,
y2
);
// prostokąt wypełniony;
//
x1
,
y1
- współrzędne lewego
górnego
// narożnika;
x2
,
y2
- współrzędne
// prawego dolnego narożnika
fillellipse
(
x
,
y
,
półośX
,
półośY
)
// wypełniona elipsa ze środkiem
// w punkcie
x,y
;
fillpoly
(
Liczba_Punktów
,
Współrzędne_Punktów
)
// wielobok wypełniony
pieslice
(
x
,
y
,
,
,
r
)
// wypełniony wycinek kołowy
6. Okna w trybie graficznym
setviewport
(
x1
,
y1
,
x2
,
y2
,
obcięcie
)
// otwarcie okna graficznego;
//
x1
,
y1
- współrzędne lewego górnego
// narożnika okna;
x2
,
y2
- współrzędne
// prawego dolnego narożnika okna;
//
obcięcie
- parametr typu
int
- jeśli jest
// niezerowe, to rysunek jest przycinany
// do rozmiarów okna
clearviewport
( )
//
czyszczenie
aktualnego
okna
graficznego
cleardevice
( )
// czyszczenie urządzenia graficznego
7. Przełączanie stron graficznych
setactivepage
(
Strona
)
//
uczynienie
strony
podanej
jako
parametr
// stroną aktywną
setvisualpage
(
Strona
)
//
uczynienie
strony
podanej
jako
parametr
// stroną widoczną;
// parametr
Strona
jest typu
int
8. Przełączanie trybów pracy monitora
restorecrtmode
()
// przełączenie się z trybu graficznego
// na tryb tekstowy
setgraphmode
(
Tryb
)
//
powrót
do
podanego
trybu
graficznego
9. Działania na obrazach
a). Określenie rozmiarów obrazu:
imagesize
(
x1
,
y1
,
x2
,
y2
)
// określenie rozmiarów obrazu
// prostokątnego;
x1
,
y1
- współrzędne
// lewego górnego narożnika;
//
x2
,
y2
- współrzędne prawego dolnego
// narożnika
b). Zapamiętanie obrazu:
getimage
(
x1
,
y1
,
x2
,
y2
,
obraz
)
//
x1
,
y1
,
x2
,
y2
- parametry muszą być
// takie same jak w
imagesize
;
//
obraz
- wskaźnik do obszaru pamięci,
// w którym przechowywany jest obraz
c). Wywołanie obrazu na ekranie
putimage
(
x
,
y
,
obraz
,
operacja
)
//
x
,
y
- współrzędne lewego górnego
// narożnika obrazu na ekranie;
//
obraz
- wskaźnik;
//
operacja
- działanie wykonywane na
// odpowiadających sobie punktach
// ekranu oraz wyprowadzanego na ten
// ekran obrazu
Parametr
operacja
może przyjmować wartość
jednej ze stałych:
COPY_PUT
(0)
XOR _PUT
(1)
OR _PUT
(2)
AND _PUT
(3)
NOT _PUT
(4)
10. Otwieranie i zamykanie trybu graficznego
detectgraph
(
Sterownik
,
Tryb
)
// określenie sterownika karty graficznej
// i trybu pracy tej karty;
//
Sterownik
i
Tryb
- zmienne typu
int
initgraph
(
Sterownik
,
Tryb
,
Ścieżka
)
// zainicjowanie trybu graficznego;
//
Ścieżka
- jest łańcuchem znaków,
// który określa ścieżkę dostępu do
// sterownika karty graficznej (plik typu
//
.BGI
)
closegraph
( )
// zamknięcie trybu graficznego
Jeszcze raz o myśleniu
Jeszcze raz o myśleniu
rekurencyjnym
rekurencyjnym
Narysuj spiralę:
delta
delta
dl
(x, y)
(x’, y’)
idea rysowania rekurencyjnego:
idea rysowania rekurencyjnego:
(prog.
SPIRALA.CPP
)