VII. WYKRESY 7.1. Wprowadzenie Wykres jest graficznym przedstawieniem (w pewnym układzie współrzędnych) zależności pomiędzy określonymi wielkościami. Ułatwia on interpretację informacji (danych) liczbowych. Z uwagi na liczbę wymiarów użytych do reprezentacji na ekranie wykresy dzielimy na:! dwuwymiarowe (płaskie),! trójwymiarowe. Wykres trójwymiarowy może przedstawiać zarówno zależności pomiędzy trzema wielkościami, jak i pomiędzy dwiema (trzeci wymiar jest wówczas użyty wyłącznie do utworzenia głębi obrazu). Ze względu na kształt wykresy można podzielić na:! liniowe (powierzchniowe),! słupkowe, zwane też histogramami,! kołowe. Wymieniliśmy tu tylko podstawowe kształty wykresów. Wyobraźnia i zmysł plastyczny grafika komputerowego może wykresom nadać najróżniejsze kształty. Konstruując wykres należy jednak pamiętać, aby wymyślny kształt nie zamazywał jego czytelności. 7.2. Wykresy dwuwymiarowe Przez pojęcie wykresu dwuwymiarowego rozumiemy wykres płaski (bez głębi obrazu). Wykresy takie wykorzystuje się m. in. do przedstawiania zależności funkcyjnych jednej zmiennej od drugiej (na przykład za pomocą wykresów liniowych), zobrazowania różnych wartości pewnej wielkości i procentowego przedstawiania zależności. 7.2.1. Wykresy liniowe Wykresy liniowe konstruuje się w układzie współrzędnych prostokątnych Oxy, przyjmując najczęściej kierunek osi y przeciwny do kierunku odpowiedniej współrzędnej ekranu graficznego. Ponadto przy konstrukcji wykresu (nie tylko liniowego) zachodzi zwykle konieczność przeskalowania danych. Dane liczbowe do konstrukcji wykresu mogą być podane w postaci tabelarycznej lub za pomocą funkcji (podającej zależność zmiennej y od zmiennej x). Dla danych w postaci tabelarycznej zaznaczone na ekranie punkty łączy się zwykle odcinkami, otrzymując w ten sposób bardziej czytelny obraz tendencji zmian. Jeszcze lepszym rozwiązaniem jest narysowanie wielomianu
136 VII. Wykresy interpolacyjnego (lub innej funkcji interpolującej), przechodzącego przez te punkty, co sprowadza problem konstrukcji wykresu do przypadku drugiego (zależności funkcyjnej). Dla danych liczbowych podanych w postaci tabelarycznej: x x 0 x 1 x 2... x n&1 x n y y 0 y 1 y 2... y n&1 y n gdzie x 0 # x 1 #... # x n, najpierw określamy najmniejszą i największą wartość y. Oznaczmy je odpowiednio przez y min i y max. Ponieważ w graficznym trybie pracy ekran ma k punktów w kierunku osi x i l punktów w kierunku osi y, ponumerowanych od zera, więc należy odpowiednio przeskalować dane. Przyjmujemy, że współrzędna x ekranu o wartości 0 odpowiada wartości x 0, k odpowiada wartości x n, współrzędna y ekranu o wartości 0 odpowiada wartości y max, a l odpowiada wartości y min (spowoduje to odwrócenie kierunku osi y ekranu). Przy tych założeniach parze (x i, y i ) odpowiada punkt ekranu o współrzędnych określonych wzorami: gdzie i ' 0, 1,..., n. (7.1) Przed zaznaczeniem punktów na ekranie wartości i powinny być zaokrąglone do liczb całkowitych. Dodatkowo można na ekranie narysować układ współrzędnych (przyjmując odpowiednie skalowanie). Osie liczbowe rysuje się zwykle z lewej strony ekranu (oś y) i u jego dołu (oś x), zaznaczając na nich wybrane punkty. Dla danych tabelarycznych można także skonstruować wielomian interpolacyjny i nanieść jego wykres na ekran. Jeśli danych jest n%1 par liczb (x i, y i ) (i ' 0, 1,..., n), przy czym x i x j dla i j, to wielomian interpolacyjny stopnia n ma postać (7.2) Wzór (7.2) nosi nazwę wzoru interpolacyjnego Lagrange'a. W praktyce częściej korzysta się (z uwagi na znacznie mniejszą liczbę działań) ze wzoru interpolacyjnego Newtona postaci (7.3) gdzie f 01...i (i ' 0, 1,..., n) oznaczają tzw. ilorazy różnicowe, określone następującymi wzorami rekurencyjnymi: (7.4) Narysowanie wykresu wielomianu interpolacyjnego sprowadza się do zadania narysowania wykresu funkcji y ' y(x).
7.2. Wykresy dwuwymiarowe 137 W celu narysowania wykresu funkcji y ' y(x) należy najpierw określić interesujący nas przedział [a, b] zmiennej x. Przyjmując, że maksymalnej współrzędnej x ekranu odpowiada wartość b, a współrzędnej x ekranu o wartości 0 wartość a, znajdujemy najmniejszą i największą wartość funkcji w przedziale [a, b]. Wartości te wyznaczamy obliczając wartość funkcji od x ' a do x ' b z krokiem odpowiadającym jednemu punktowi ekranu w kierunku osi x, tj. dla (7.5) przy czym i ' 0, 1,..., k. Otrzymamy w ten sposób wartości y i. Korzystając następnie z wzorów (7.1) wyznaczamy odpowiednie punkty ekranu, które zaznaczamy jako piksele lub łączymy odcinkami. Gdy danych jest wiele punktów (x i, y i ) (i ' 0, 1,..., n), to wielomian interpolacyjny Lagrange'a może być wysokiego stopnia i co jest z tym związane silnie oscylujący. W takim przypadku stosuje się zwykle interpolacje funkcjami sklejanymi. Poniżej przedstawiamy algorytm konstrukcji funkcji sklejanej, którą w każdym z przedziałów [x i, x i%1 ) określa inny wielomian stopnia trzeciego. Funkcję sklejaną stopnia trzeciego można w każdym z przedziałów [x i, x i%1 ) przedstawić w postaci (7.6) gdzie t ' x & x i dla x 0 [x i, x i%1 ), i ' 0, 1,..., n&1. W celu określenia tej funkcji należy zatem wyznaczyć 4N współczynników. Z warunku interpolacji S(x i ) ' y i (i ' 0, 1,..., n) wynika, że (7.7) a więc pozostaje do wyznaczenia 3N współczynników (b i, c i oraz d i dla i ' 0, 1,..., n&1). Z warunku ciągłości funkcji S(x) i jej pochodnych rzędu pierwszego i drugiego w węzłach x i dla i ' 1, 2,..., n&1 otrzymamy 3N&3 równań. Z zależności (7.6) mamy Jeśli funkcja ta ma być ciągła w węzłach x i, czyli to Stąd (7.8) Z warunku i zależności (7.6) otrzymujemy równania
138 VII. Wykresy (7.9) Z kolei z ciągłości samej funkcji sklejanej w węzłach x i (i ' 1, 2,..., n&1) wynikają równania (7.10) Podstawiając d i&1 określone wzorem (7.8) do wzorów (7.9) i (7.10), po uwzględnieniu zależności (7.7), mamy Z drugiego równania możemy obliczyć b i&1 : (7.12) a następnie podstawić tę wartość do równania pierwszego. Otrzymamy (7.13) Z zależności (7.12) i (7.13) wynika, że dla i ' 1, 2,..., n&2 mamy czyli (7.14) Jest to układ n&2 równań z n niewiadomymi c 0, c 1,..., c n&1. Warunek ciągłości pochodnej rzędu drugiego funkcji sklejanej w węzłach musi także zachodzić w punkcie x n, a stąd wynika, że Rozumując jak poprzednio, otrzymamy a więc układ równań (7.14) zachodzi dla i ' 1, 2,..., n&1, czyli jest układem n&1 równań z n%1 niewiadomymi c 0, c 1,..., c n.
7.2. Wykresy dwuwymiarowe 139 Brakujące dwa równania określa się z tzw. warunków brzegowych. Jeśli przyjmiemy, że poza przedziałem [x 0, x n ] funkcja sklejana ma być wielomianem stopnia pierwszego (taką funkcję nazywa się naturalną funkcją sklejaną stopnia trzeciego), to Z drugiej strony pochodna ta musi być ciągła w punktach x 0 i x n, a stąd czyli c 0 ' 0, bo oraz c n ' 0, co wynika z warunku Zatem dla naturalnej funkcji sklejanej konieczny do rozwiązania układ równań możemy zapisać w postaci gdzie M 0 ' M n ' 0 oraz (7.15) przy czym h i%1 ' x i%1 & x i. Układ równań liniowych (7.15) jest układem trójdiagonalnym i do jego rozwiązania można zastosować metodę Crouta (zob. podręczniki dotyczące metod numerycznych). Po rozwiązaniu tego układu współczynniki funkcji sklejanej wyznaczamy z następujących wzorów:
140 VII. Wykresy Dla okresowej funkcji sklejanej stopnia trzeciego warunki brzegowe są następujące: a stąd otrzymujemy równania Uwzględniając poprzednio otrzymane wzory na współczynniki b n&1 i d n&1, z drugiego oraz trzeciego z powyższych równań otrzymamy (po prostych przekształceniach) następującą zależność: Zależność ta wraz z równaniami (7.14) dla i ' 1, 2,..., n&1 tworzy układ n równań liniowych z n niewiadomymi c 1, c 2,..., c n. Układ ten można zapisać w postaci (7.16) gdzie przy czym h i%1 ' x i%1 & x i. Po rozwiązaniu układu (7.16) współczynniki okresowej funkcji sklejanej wyznacza się na podstawie następujących wzorów:
7.2. Wykresy dwuwymiarowe 141 Układ równań liniowych (7.16) można rozwiązać przez rozkład jego macierzy A na iloczyn LU, gdzie Elementy macierzy L i U wyznacza się na podstawie następujących wzorów rekurencyjnych: W celu rozwiązania układu (7.16), tj. Am ' d, gdzie m ' (M 1,..., M n ) T i d ' (* 1,..., * n ) T, wystarczy rozwiązać kolejno dwa układy równań Ly ' d i Um ' d według wzorów:
142 VII. Wykresy Jeśli oprócz par wartości (x i, y i ) dane są wartości sklejaną stopnia trzeciego spełniającą warunki brzegowe, to możemy wyznaczyć funkcję Analiza, podobna do poprzedniej, prowadzi w tym przypadku do konieczności rozwiązania układu równań liniowych postaci (7.17) w którym współczynniki 8 i (i ' 0, 1,..., n&1), : i (i ' 1, 2,..., n) i * i (i ' 0, 1,..., n) są określone następującymi wzorami: przy czym h i%1 ' x i%1 & x i. Po rozwiązaniu układu równań (7.17) współczynniki funkcji sklejanej wyznacza się z następujących zależności:
7.2. Wykresy dwuwymiarowe 143 Układ równań liniowych (7.17) można rozwiązać, podobnie jak w przypadku naturalnej funkcji sklejanej, metodą Crouta. 7.2.2. Wykresy słupkowe i kołowe Do tworzenia dwuwymiarowych wykresów słupkowych wykorzystuje się zwykle procedury lub funkcje dostępne w języku programowania (używanym przez Czytelnika), które służą do rysowania prostokątów. Przed utworzeniem wykresu należy zdecydować, czy pomiędzy słupkami mają wystąpić przerwy, czy też mogą się one stykać, a następnie ustalić ich szerokość (jednakową dla wszystkich słupków). Wysokość słupków oblicza się na podstawie danych wartości y i, gdzie i ' 1, 2,..., n (n oznacza liczbę słupków). Efekt graficzny wykresu słupkowego można znacznie polepszyć przez uwzględnienie kolorów i różnych znaków wypełniających kontury słupków. Wykresy kołowe służą do procentowego przedstawiania zależności. Konstruuje się je zwykle za pomocą procedur lub funkcji standardowych dostępnych w danym języku programowania, które powodują rysowanie wycinków kołowych, przyjmując całe koło za 100%. Załóżmy, że dla i ' 1, 2,..., n dane są wartości y i. Liczba n powinna być rzędu kilku lub co najwyżej kilkunastu, gdyż przy większej liczbie wartości y i wykres jest zazwyczaj mało czytelny. W celu utworzenia wykresu kołowego należy najpierw zsumować wartości y i. Niech Procent wartości y i w stosunku do Y obliczamy z zależności W celu określenia kątów " i (kąt początkowy promienia wodzącego) i $ i (kąt końcowy) wycinka kołowego odpowiadającego wartości stosujemy następujący algorytm:
144 VII. Wykresy Środki i promienie wszystkich wycinków kół powinny być identyczne. Wspólny promień powinien być przy tym dobrany tak, aby na ekranie pozostało miejsce na część opisową wykresu. Należy dodać, że wykresy kołowe sporządza się w przypadku, gdy dane wartości y i są dodatnie. 7.3. Wykresy trójwymiarowe Odpowiednikami wykresów liniowych w przestrzeni dwuwymiarowej są w trzech wymiarach wykresy powierzchniowe. Są one wykorzystywane m. in. do graficznego przedstawienia funkcji dwu zmiennych, tj. różnego rodzaju powierzchni. Zagadnienie interpolacji powierzchni zostało już opisane w p. 6.4.2. W tym punkcie zajmiemy się przedstawieniem na ekranie wykresu funkcji dwu zmiennych danej w postaci analitycznej. Przy tworzeniu wykresu powierzchniowego przyjmuje się najczęściej układ współrzędnych, w którym oś y jest skierowana tak samo, jak oś x ekranu, oś z jest równoległa do osi y ekranu, ale skierowana przeciwnie, oś x zaś jest wybrana tak, że układ Oxyz jest układem prawoskrętnym. Punkt o współrzędnych (x, y, z) w tym układzie będzie posiadał współrzędne ekranowe, gdzie (7.18) przy czym we wzorach tych założono, że oś x układu Oxyz jest widoczna na ekranie w taki sposób, że z osią z tworzy kąt 45. Współczynnik 6 jest stosunkiem szerokości do wysokości obrazu (najczęściej przyjmujemy 6 ' 1). Wzory (7.18) wynikają z zastosowania dwu przekształceń:! rzutu skośnego na płaszczyznę yz przy skrócie f ' 1 i kącie 2 ' 135 pomiędzy rzutem na tę płaszczyznę prostej do niej prostopadłej i osią y (zob. p. 4.3.2), w wyniku czego otrzymujemy współrzędne, i, przy czym! zamianie osi układu współrzędnych zgodnie z zależnościami Współrzędne i mogą nie być współrzędnymi żadnego punktu na ekranie. Aby punkt był widoczny na ekranie, muszą być spełnione warunki gdzie GetMaxX i GetMaxY oznaczają największą wartość odpowiednio odciętej i rzędnej ekranu. W celu narysowania wykresu funkcji obliczamy najpierw z wzorów (7.18) (przy 6 ' 1) wartości i dla i ' 0, 1,..., k; j ' 0, 1,..., l oraz
7.3. Wykresy trójwymiarowe 145 Następnie wyznaczamy po czym skalujemy wszystkie wartości i zgodnie z następującymi wzorami Punkty o współrzędnych są punktami szukanej powierzchni i wszystkie będą widoczne na ekranie. W praktyce nie wykonujemy obliczeń dla wszystkich wartości wskaźników i oraz j (i ' 0, 1,..., k; j ' 0, 1,..., l). Na ekran nie nanosimy bowiem wszystkich punktów powierzchni, lecz jedynie linie łączące punkty o wybranych wartościach wskaźników i (dla wszystkich wartości wskaźników j) oraz linie łączące punkty o wybranych wartościach wskaźników j (dla wszystkich wartości wskaźników i). W pierwszym przypadku otrzymujemy linie wzdłuż osi y, a w drugim wzdłuż osi x. Te przecinające się linie tworzą siatkę dającą efekt trójwymiarowości. Zwiększenie tego efektu można osiągnąć przez usunięcie linii niewidocznych (zob. p. 8.6).