Grafika w Pascalu. Do tej pory, tworząc programy w Pascalu, wykorzystywaliśmy jedynie tryb tekstowy. Jednak Pascal, tak jak i inne języki programowania, umoŝliwia korzystanie równieŝ z trybu graficznego. W trybie tekstowym mieliśmy do dyspozycji jedynie moduł crt, który umoŝliwiał kolorowanie tła, znaków oraz czyszczenie ekranu. Dzisiaj poznamy moduł biblioteki graficznej o nazwie graph. Rysujemy prostokąt. Na początku tworzymy program grafika1.pas, który będzie działa w trybie graficznym. Program ten będzie rysował Ŝółtym kolorem prostokąt. (1) Chcąc korzystać z dobrodziejstw, jakie niesie za sobą biblioteka graph, musimy zastosować dyrektywę uses. UmoŜliwi nam to korzystanie ze wszystkich funkcji oraz procedur tego modułu. (2) Po zadeklarowaniu modułu graph w nagłówku programu dokonujemy deklaracji dwóch zmiennych typu całkowitego smallint ( 2-bajtowa liczba całkowita ze znakiem w kodzie U2 (16 bitów), zakres od -215 (-32768) do 215-1 (32767)). Oczywiście nazwy tych zmiennych mogą być dowolne. U nas będą nosiły nazwę sterownik i tryb. (3) W ciele programu, a więc w sekcji -end, wywołujemy procedurę detectgraph biblioteki graph, pobierając dwa argumenty w postaci liczb całkowitych. Przekazujemy do niej zmienne sterownik oraz tryb, zadeklarowane w nagłówku programu. (4) Wywołanie tej procedury spowoduje przypisanie zmiennej sterownik wartości wskazującej na sterownik określonej karty graficznej komputera, a zmiennej tryb wartości opisujących tryb graficzny, związany z rozdzielczością ekranu monitora oraz liczbą wyświetlanych kolorów, jaki ta karta graficzna obsługuje.
Po wyszukaniu przez procedurę detectgraph typu karty graficznej oraz odpowiadającego jej trybu graficznego ekranu przystępujemy do inicjalizacji trybu graficznego. W tym celu wywołujemy procedurę initgraph pobierającą trzy parametry: wartość zmiennej sterownik oraz zmiennej tryb, którym to wcześniej procedura detectgraph przypisała odpowiednie wartości, oraz wartość typu string przechowującą ścieŝkę dostępu (katalog) do sterownika karty graficznej, umieszczonego w katalogu Pascala. (5) Kolejnym krokiem jest ustawienie bieŝącego koloru. SłuŜy do tego procedura setcolor, w której przekazujemy jedną z wartości koloru. My wybierzemy liczbę 14 wskazująca kolor Ŝółty. (6) Aby narysować w ustawionym wcześniej kolorze prostokąt, wywołujemy procedurę rectangle. Pobiera ona cztery parametry w postaci liczb całkowitych. Pierwsze dwa z nich to współrzędne x i y (x to współrzędna pozioma jej wartość liczymy od lewej krawędzi okna, i y współrzędna pionowa jej wartość liczymy od górnej krawędzi okna) lewego górnego rogu prostokąta, a kolejne to współrzędne x i y prawego dolnego rogu prostokąta. Parametry te więc wyznaczają w postaci pikseli konkretne punkty w oknie, które muszą być ze sobą połączone tak, aby utworzyć prostokąt. Na koniec pozostaje nam wyłączyć tryb graficzny. SłuŜy do tego bezargumentowa procedura closegraph. ZauwaŜcie, Ŝe funkcja ta jest wywołana po funkcji readln, a nie przed nią, co daje gwarancję, Ŝe przełączenie na tryb tekstowy nastąpi dopiero po zakończeniu przez uŝytkownika. Zobaczcie co się stanie jak przesuniecie readln na koniec programu. program Grafika1; uses crt, graph; (1) var sterownik, tryb:smallint; (2) (3) clrscr; detectgraph(sterownik,tryb); (4) initgraph(sterownik,tryb,''); (5) rectangle(10,10,200,300); (6) readln; closegraph; (3) Kod źródłowy programu:
Wypełnianie figur W pierwszym programie narysowaliśmy Ŝółtym kolorem prostokąt. Tym razem prostokąt będzie wypełniony. Teraz zapiszemy go sobie w pliku o nazwie grafika2.pas. Do narysowania prostokąta słuŝy procedura rectangle. Natomiast do narysowania prostokąta wypełnionego kolorem jest wykorzystywana procedura bar. (1) Pobiera ona te same cztery parametry co procedura rectangle. Jednak wywołanie tylko samej procedury spowoduje namalowanie prostokąta, którego nie zobaczymy. Dzieje się tak dlatego, Ŝe domyślnie zostanie zastosowany kolor tła okna. Aby to zmienić, wywołujemy najpierw procedurę setfillstyle. Pobiera ona dwa parametry: pierwszy to sposób wypełnienia, a drugi to jego kolor. Jeśli ustawimy wypełnienie jako solidfill, to otrzymamy wypełnienie jednolite. W naszym przypadku będzie to kolor Ŝółty, podając liczbę 14.(2) program Grafika2; uses crt, graph; var sterownik, tryb:smallint; clrscr; detectgraph(sterownik,tryb); initgraph(sterownik,tryb,''); setfillstyle(solidfill,14);) (2) bar(50,50,200,300); (1) readln; closegraph; Kod źródłowy programu:
Rodzaje wypełnień: closedotfill wypełnienie kropkami hatchfill wypełnienie siatkowe linefill wypełnienie liniami interleavefill wypełnienie wzorkiem slashfill wypełnienie skośne Spróbujcie pozmieniać poszczególne wartości, aby sprawdzić działanie procedur. Inne figury geometryczne Jak do tej pory, nauczyliśmy się rysować wypełniony dowolnym wzorem prostokąt oraz rysować jedynie jego obrys. To oczywiście nie jedyna figura geometryczna, jaką Pascal dostarcza w module graph. Spróbujcie pobawić się parametrami poszczególnych figur, zmieniając je dowolnie, aby zrozumieć, który parametr za co odpowiada! OKRĄG aby narysować okrąg, wywołujemy procedurę circle. Procedura ta pobiera trzy parametry: współrzędną poziomą x oraz współrzędną pionową y środka okręgu, a takŝe długość promienia okręgu. circle(100,100,80); ŁUK aby narysować łuk, wywołujemy procedurę arc. Procedura ta pobiera pięć argumentów: współrzędną x i y środka okręgu, początek kąta w stopniach, koniec kąta w stopniach a takŝe długość promienia okręgu. Kąt w stopniach liczymy od zera(wskazówka na zegarze na godzinie 3) do 360, czyli tego samego miejsca, Stopnie są liczone przeciwnie do ruchu wskazówek zegara. arc(100,100,0,120,80);
WYCINEK KOŁA aby narysować wycinek koła, wywołujemy procedurę pieslice. Procedura ta pobiera pięć parametrów: współrzędną poziomą x oraz współrzędną pionową y środka koła, początek kąta w stopniach, koniec kąta w stopniach a takŝe długość promienia części koła. pieslice(100,100,0,120,80); ELIPSA aby narysować wycinek koła wywołujemy procedurę ellipse. Procedura ta pobiera sześć parametrów: współrzędną x i y, początek kąta w stopniach, koniec kąta w stopniach, a takŝe długość promienia elipsy w poziomie oraz długość elipsy w pionie. ellipse(60,110,0,360,50,100); WYPEŁNIONA ELIPSA aby narysować wypełnioną elipsę, wywołujemy procedurę fillellipse. Procedura ta pobiera cztery parametry: współrzędną poziomą x oraz współrzędną pionową y, długość promienia elipsy w poziomie oraz długość promienia elipsy w pionie. setfillstyle(solidfill,14); fillellipse(60,100,50,100); LINIA aby narysować linię, wywołujemy procedurę line. Procedura ta pobiera cztery parametry: współrzędną poziomą x i pionową y punktu początkowego linii oraz parę współrzędnych punktu końcowego linii. line(100,100,200,342); DOWOLNY OBIEKT aby narysować dowolny obiekt, wywołujemy procedurę drawpoly. Procedura ta pobiera dwa parametry: liczbę punktów, które będą do połączenia ze sobą, oraz tablicę tych punktów. Tablica jest zbiorem elementów typu pointtype, czyli współrzędnych punktów. KaŜdy punkt zapisujemy w nawiasach zwykłych. Wewnątrz nawiasów
podajemy x oraz po znaku dwukropka jego wartość. Podobnie postępujemy ze współrzędną y. Współrzędne oddzielamy od siebie znakiem średnika. const Punkty: array[1..6] of PointType = ((x: 50; y: 10), (x: 130; y: 10), (x: 200; y: 100), (x: 150; y: 200), (x: 50; y: 140), (x: 50; y: 10)); drawpoly(6,punkty); WYPEŁNIONY DOWOLNY OBIEKT aby narysować dowolny wypełniony obiekt wywołujemy procedurę fillpoly. Procedura ta pobiera dwa parametry: liczbę punktów, które będą do połączenia ze sobą, oraz tablicę tych punktów. const Punkty: array[1..6] of PointType = ((x: 50; y: 10), (x: 130; y: 10), (x: 200; y: 100), (x: 150; y: 200), (x: 50; y: 140), (x: 50; y: 10)); fillpoly(6,punkty);
FIGURY 3 D Oprócz rysunków figur płaskich za pomocą procedury bar3d mamy moŝliwość utworzenia sześcianu lub prostopadłościanu. Nazwij kolejny program grafika3.pas. Spróbujemy zmusić go, aby narysował nam sześcian. Na początek tak jak w poprzednich programach musimy pamiętać o ustawieniu koloru krawędzi. SłuŜy do tego procedura setcolor. Przekazując do niej liczbę 14, definiujemy kolor Ŝółty. Kolejny krok to ustawienie za pomocą procedury setfillstyle koloru i rodzaju wypełnienia. Do procedury tej przekazujemy parametr hatchfill wskazujący na wypełnienie siatkowe oraz liczbę 4 oznaczająca kolor czerwony. Ostatnim krokiem jest wywołanie procedury bar3d rysującej sześcian. Procedura ta pobiera sześć parametrów. Pierwsze dwa to współrzędne x i y lewego górnego naroŝnika frontowej ściany figury. Kolejne dwa parametry to współrzędne x i y prawego dolnego naroŝnika frontowej ściany figury. Piąty parametr wskazuje na głębokość sześcianu, a ostatni mówi nam o tym czy górna powierzchnia sześcianu jest widoczna (true) czy teŝ nie (false). program Grafika3; uses crt, graph; var sterownik, tryb:smallint; clrscr; detectgraph(sterownik,tryb); initgraph(sterownik,tryb,''); setfillstyle(hatchfill,4); bar3d(10,100,110,200,50,true); readln; closegraph; Zadanie do wykonania: Dzięki zdobytym wiadomością narysuj flagę Francji.