Interactive Data Language - Programming and Data Visualization



Podobne dokumenty
1. Wprowadzenie do C/C++

Lekcja 9 - LICZBY LOSOWE, ZMIENNE

1. Wprowadzenie do C/C++

1 Podstawy c++ w pigułce.

Bash i algorytmy. Elwira Wachowicz. 20 lutego

ANALIZA NUMERYCZNA. Grzegorz Szkibiel. Wiosna 2014/15

Wska¹niki, tablice dynamiczne wielowymiarowe

Przetwarzanie sygnaªów

Lekcja 9 Liczby losowe, zmienne, staªe

Lekcja 12 - POMOCNICY

Vincent Van GOGH: M»czyzna pij cy li»ank kawy. Radosªaw Klimek. J zyk programowania Java

Lekcja 6 Programowanie - Zaawansowane

Opis programu do wizualizacji algorytmów z zakresu arytmetyki komputerowej

Lekcja 8 - ANIMACJA. 1 Polecenia. 2 Typy animacji. 3 Pierwsza animacja - Mrugaj ca twarz

1 Podstawy c++ w pigułce.

Listy Inne przykªady Rozwi zywanie problemów. Listy w Mathematice. Marcin Karcz. Wydziaª Matematyki, Fizyki i Informatyki.

1 Klasy. 1.1 Denicja klasy. 1.2 Skªadniki klasy.

wiczenie 1 Podstawy j zyka Java. Instrukcje warunkowe

P tle. Rozdziaª Wst p. 4.2 P tle P tla for(...);

Programowanie i struktury danych 1 / 44

1 Bª dy i arytmetyka zmiennopozycyjna

Rzut oka na zagadnienia zwi zane z projektowaniem list rozkazów

1. Odcienie szaro±ci. Materiaªy na wiczenia z Wprowadzenia do graki maszynowej dla kierunku Informatyka, rok III, sem. 5, rok akadem.

Lekcja 3 Banki i nowe przedmioty

Relacj binarn okre±lon w zbiorze X nazywamy podzbiór ϱ X X.

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Baza danych - Access. 2 Budowa bazy danych

Programowanie i struktury danych

Metodydowodzenia twierdzeń

Podstawy Programowania C++

Ukªady równa«liniowych

Wst p do informatyki. Systemy liczbowe. Piotr Fulma«ski. 21 pa¹dziernika Wydziaª Matematyki i Informatyki, Uniwersytet Šódzki, Polska

Liczby zmiennoprzecinkowe

Listy i operacje pytania

WYKŁAD 8. Postacie obrazów na różnych etapach procesu przetwarzania

Programowanie w języku Python. Grażyna Koba

Wstawianie gotowych rysunków w texu - informacje podstawowe.

Metody dowodzenia twierdze«

JAO - J zyki, Automaty i Obliczenia - Wykªad 1. JAO - J zyki, Automaty i Obliczenia - Wykªad 1

Edyta Juszczyk. Akademia im. Jana Dªugosza w Cz stochowie. Lekcja 1Wst p

Lekcja 5 Programowanie - Nowicjusz

x y x y x y x + y x y

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

19. Obiektowo± 1 Kacze typowanie. 2 Klasy

Wykªad 7. Ekstrema lokalne funkcji dwóch zmiennych.

Lekcja 3 - BANKI I NOWE PRZEDMIOTY

Ćwiczenie 1. Wprowadzenie do programu Octave

Ćwiczenie 1. Wprowadzenie do programu Octave

Technologie Informacyjne

2 Liczby rzeczywiste - cz. 2

Systemy mikroprocesorowe - projekt

Matematyka wykªad 1. Macierze (1) Andrzej Torój. 17 wrze±nia Wy»sza Szkoªa Zarz dzania i Prawa im. H. Chodkowskiej

i, lub, nie Cegieªki buduj ce wspóªczesne procesory. Piotr Fulma«ski 5 kwietnia 2017

SVN - wprowadzenie. 1 Wprowadzenie do SVN. 2 U»ywanie SVN. Adam Krechowicz. 16 lutego Podstawowe funkcje. 2.1 Windows

Caªkowanie numeryczne - porównanie skuteczno±ci metody prostokatów, metody trapezów oraz metody Simpsona

Macierze i Wyznaczniki

Pascal - wprowadzenie

Dyskretyzacja i kwantyzacja obrazów

Przetwarzanie sygnałów

Podziaª pracy. Cz ± II. 1 Tablica sortuj ca. Rozwi zanie

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

WYMAGANIA EDUKACYJNE I KRYTERIA OCENIANIA Z PRZEDMIOTU PROGRAMOWANIE APLIKACJI INTERNETOWYCH

MiASI. Modelowanie systemów informatycznych. Piotr Fulma«ski. 18 stycznia Wydziaª Matematyki i Informatyki, Uniwersytet Šódzki, Polska

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Lab. 02: Algorytm Schrage

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Podstawy programowania skrót z wykładów:

Ekonometria. wiczenia 1 Regresja liniowa i MNK. Andrzej Torój. Instytut Ekonometrii Zakªad Ekonometrii Stosowanej

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

Proces tworzenia programu:

Instrukcja obsługi Norton Commander (NC) wersja 4.0. Autor: mgr inż. Tomasz Staniszewski

Podstawy Informatyki. Kompilacja. Historia. Metalurgia, I rok. Kompilatory C++ Pierwszy program. Dyrektywy preprocesora. Darmowe:

Programowanie wspóªbie»ne

System operacyjny Linux

1 Wskaźniki. 1.1 Główne zastosowania wskaźników

OptiMore Importer Rejestru VAT. Instrukcja obsługi programu

G PROGRAMMING. Part #4

Programowanie w języku C++ Grażyna Koba

Aproksymacja funkcji metod najmniejszych kwadratów

Wojewódzki Konkurs Matematyczny

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Matlab Składnia + podstawy programowania

1 Strumienie. 2 Pliki. 2.1 Zapis do pliku tekstowego. Programowanie w j zyku C - Adam Krechowicz, Daniel Kaczmarski

Mathematica - podstawy

WST P DO TEORII INFORMACJI I KODOWANIA. Grzegorz Szkibiel. Wiosna 2013/14

Podstawy Informatyki. Metalurgia, I rok. Wykład 6 Krótki kurs C++

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Język ludzki kod maszynowy

Podstawy Informatyki. Metalurgia, I rok. Wykład 3 Liczby w komputerze

Zestaw 1 ZESTAWY A. a 1 a 2 + a 3 ± a n, gdzie skªadnik a n jest odejmowany, gdy n jest liczb parzyst oraz dodawany w przeciwnym.

Arytmetyka zmiennopozycyjna

Bazy danych. Andrzej Łachwa, UJ, /15

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

Macierze i Wyznaczniki

Wybrane poj cia i twierdzenia z wykªadu z teorii liczb

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

Macierze. 1 Podstawowe denicje. 2 Rodzaje macierzy. Denicja

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Transkrypt:

Uniwersytet Marii Curie Skªodowskiej w Lublinie Wydziaª Matematyki, Fizyki i Informatyki Šukasz Wiadrowski nr albumu 1570076 Interactive Data Language - Programming and Data Visualization Praca magisterska powstaªa pod kierunkiem prof. dr hab. Krzysztofa Murawskiego

SPIS TRE CI 2 Spis tre±ci 1 Wst p 4 1.1 Historia j zyka IDL........................ 4 1.2 Zastosowanie j zyka IDL..................... 4 1.3 Popularyzacja j zyka IDL.................... 5 1.4 Cel i zakres pracy......................... 6 2 Wprowadzenie do skladni 7 2.1 Nazwy zmiennych......................... 7 2.2 Typy i rozmiary danych..................... 7 2.2.1 Typy podstawowe..................... 7 2.2.2 Tablice........................... 8 2.2.3 Struktury......................... 10 2.2.4 Wska¹niki......................... 11 2.2.5 Konwersja mi dzy typami................ 12 2.3 Operatory............................. 14 2.3.1 Operatory logiczne.................... 14 2.3.2 Operatory arytmetyczne................. 15 2.3.3 Operatory relacji..................... 15 2.4 Instrukcje............................. 16 2.4.1 Instrukcja IF...THEN................... 16 2.4.2 Instrukcja WHILE...DO................. 17 2.4.3 Instrukcja REPEAT...UNTIL.............. 18 2.4.4 Instrukcja FOR...................... 19 2.4.5 Instrukcja CASE...OF.................. 20 2.4.6 Instrukcja BREAK.................... 22 2.5 Procedury, funkcje, program glówny............... 22 2.5.1 Procedury......................... 22 2.5.2 Funkcje.......................... 23 2.5.3 Program gªówny..................... 24 2.5.4 Kompilacja........................ 25 2.5.5 Edytor dla wersji 6.2................... 25 3 Praca z danymi 27 3.1 Tworzenie danych......................... 27 3.2 Operacje na wektorach i macierzach............... 28 3.3 Odczyt danych.......................... 31 3.3.1 Pliki ASCII........................ 31 3.3.2 Pliki binarne....................... 34 3.3.3 Pliki graczne....................... 36

SPIS TRE CI 3 4 Dwuwymiarowe rysunki i wykresy 39 4.1 Procedura PLOT......................... 39 4.2 Procedura OPLOT........................ 42 4.3 Metoda LIVE_PLOT...................... 45 5 Obróbka sygnaªu 46 5.1 Tworzenie danych......................... 46 5.2 Wygªadzanie sygnaªu metod SMOOTH............ 48 5.3 Filtracja sygnaªu......................... 48 6 Obróbka plików gracznych 52 6.1 Podstawowe operacje na obrazach................ 52 6.2 Histogram obrazu......................... 56 6.3 Filtrowanie obrazu........................ 57 6.3.1 Obrazy monochromatyczne................ 57 6.3.2 Obrazy kolorowe..................... 60 7 Trójwymiarowe techniki wizualizacji 61 7.1 Metoda SURFACE........................ 61 7.2 Metoda SHADE_SURF..................... 62 7.3 Metoda SHOW3......................... 63 7.4 Metoda XINTERANIMATE................... 64 8 Cz ± programistyczna 67 8.1 Podstawy programowania.................... 67 8.2 Techniki zaawansowane...................... 70 9 Podsumowanie 75 Bibliograa 76

1 Wst p 4 1 Wst p 1.1 Historia j zyka IDL J zyk IDL powstaª pod koniec lat 70-tych, a jego powstanie wi»e si z uniwersytetem w Boulder w stanie Kolorado, ±ci±lej z LASP 1 oraz osob Davida Sterna, ktory napisaª tam pierwsze linie kodu, dajace podwaliny dla Interactive Data Language. Jednym z pierwszych programow napisanych przez Sterna byª program Rufus, b d cy w skrocie kalkulatorem. Ulepszona wersja tego programu zostaªa u»yta jako interpreter danych z marsja«skich sond Mariner 7 i Mariner 9. W 1977 roku Stern opu±ciª LASP i zalo»yª RSI, czyli Research System Institute, który to instytut do dzi± zajmuje si rozwijaniem i dystrybucj opisywanego w tej pracy j zyka. Dwa lata po zaªo»eniu instytutu, sprzedal pierwsze licencje j zyka IDL dla NASA, a dokªadniej dla Centrum Lotow Kosmicznych (Goddard Space Flight Center). Kolejne dwa lata przyniosªy szybki rozwój rmie i kolejne ulepszenia j zyka. W 1981 roku ameryka«skie uniwersytety oraz kolejne rz dowe instytucje zgªosiªy ch u»ywania j zyka IDL. Rok 1987 przyniósª kolejne zmiany. Zaªo»yciel RSI wraz z pomoc Aliego Bahrami postanawiaj udostepni j zyk równie» u»ytkownikom systemu Unix. Zadanie to polegaªo caªkowitej zamianie kodu ¹ródªowego z kodu napisanego w j zyku Macro i Fortran na kod w j zyku C. Pozwoliªo to na dalsz ekspansj j zyka dla kilkunastu wersji Unix i byªo niew tpliwie komercyjnym sukcesem Sterna i jego ekipy. Jezyk IDL jest ci gle ulepszany i modykowany. Chocia» zakres mo»liwosci tego j zyka jest rozszerzany to jego podstawowe zadania pozostaj takie same jak przed trzydziestoma laty. 1.2 Zastosowanie j zyka IDL J zyk IDL, jest idealnym rozwi zaniem dla celów zwi zanych z analiz danych. Platforma ta to pot»ne narzedzie, kryj ce w sobie wyspecjalizowane techniki przetwarzania du»ych partii danych. Niemal»e od pocz tku byª to j zyk zorientowany na szeroko rozumiane przetwarzanie tablic. Dla u»ytkownika takie rozwi zanie przyczyniªo si do zminimalizowania wielu linii kodu napisanego w C, Fortranie lub innych j zykach, do kilku lub nawet do wywoªania jednej procedury czy funkcji. 1Laboratory for Atmospheric and Space Physics jest jednym z dziaªów badawczych podlegaj cych uniwersytetowi w Boulder w stanie Kolorado,specjalizuje si w technologiach kosmicznych, wspiera naukowo i technicznie loty zaªogowe i bezzaªogowe w±ród nich m.in. sondy Cassini i Galileo.

1.3 Popularyzacja j zyka IDL 5 Szeroki zakres zastosowa«przy równoczesnym wyspecjalizowaniu przyczyniªo si do spopularyzowania tego j zyka w±ród du»ej rzeszy naukowców. Istot j zyka jest tworzenie, obróbka oraz wyswietlanie danych. Oto przykªady rm, instytucji i projektów korzystaj cych z opisywanego w tej pracy j zyka: analiza zdj z sond kosmicznych Mariner 7 i Mariner 9, druga z nich dostarczyªa okoªo 7000 zdj Marsa i jego satelitów Phobosa i Deimosa. analiza zdj z Marsa zrobionych w 2004 roku przez kosmiczne ªaziki, Space Science Institute (SSI) Boulder, Colorado analiza zdj tomograi komputerowej (CT), MIMvista Corp. analiza klimatu, pogody, zjawisk na oceanie, danych geozycznych, National Oceanic and Atmospheric Administration (NOAA) program do trójwymiarowej wizualizacji skorupy ziemskiej, Millersville University of Pennsylvania, Earth Sciences Department projekt MRIVIEW, badanie funkcjonowania ludzkiego mózgu, Los Alamos National Labs Biophysics Group analiza zdj komety Halleya, European Space Agency analiza anomalii teleskopu kosmicznego Hubbla przy probie jego naprawy w 1990 roku University of Michigan, University of Colorado, wsparcie prac naukowych Nie sposób wymieni wszystkich projektów, w których wykorzystywany byª j zyk IDL. Zarówno agencje rz dowe, rmy prywatne jak i instytucje akademickie stosuj szeroko jego techniki przetwarzania i wizualizacji danych. J zyka IDL nie nale»y koja»y jedynie z wielkimi projektami naukowymi. Szerokie grono osób prywatnych u»ywa tego j zyka do pracy i nauki w swoich domach. 1.3 Popularyzacja j zyka IDL Interactive Data Language przez niemal»e 30 lat swojego istnienia zaskromiª sobie szerokie grono u»ytkowników. Jego popularno±ci dowodz ameryka«skie

1.4 Cel i zakres pracy 6 i zachodnioeuropejskie instytucje naukowe u»ywajace go do swych prac badawczych, tak»e liczna grupa studentów, których uniwersytety postanowiªy wprowadzi ten j zyk do systemu nauczania, wreszcie rzesza entuzjastów chc ca opanowa ten ciekawy j zyk. Sytuacja na krajowym rynku jest nieco odmienna. Tylko nieliczni wykªadowcy i naukowcy zajmuj si tym j zykiem. Wydawaªoby si,»e j zyk IDL podobny sw skªadnia do j zyka Fortran, który byª i jest nadal popularny w±ród ludzi nauki oka»e si jego lepsz alternatyw. Na ten negatywny stan maj zasadniczy wpªyw dwa czynniki: brak publikacji na temat j zyka IDL, a co za tym idzie brak popularyzacji ze wzgledu na trudny dost p do mateiaªów oraz znikome srodki na prowadzenie bada«naukowych, których wynikami zajmuje si opisywany w pracy j zyk. 1.4 Cel i zakres pracy Praca ta to proba opisania bardzo ciekawego j zyka jakim jest Interactive Data Language, czyli IDL. Skierowana jest gªównie do studentów i pracowników naukowych, ale rownie» do wszystkich osób którym nie obce jest poj cie wizualizacji danych. Poniewa» na polskim rynku brak jest publikacji zwi zanych z tym tematem, jest to jednocze±nie próba zapeªnienia powstaªej luki jak i zach ta do poznania tego jezyka. Mam nadziej,»e forma pracy, w której przedstawiam jezyk IDL od podstawowych elementow skªadni, poprzez budow procedur i funkcji, stopniowo odsªaniaj c jego szerokie mo»liwosci uczyni opanowanie tego j zyka jeszcze bardziej przyt pnym.

2 Wprowadzenie do skladni 7 2 Wprowadzenie do skladni 2.1 Nazwy zmiennych Zmienne i staªe to podstawowe elementy ka»dego nawet najmniejszego programu. Aby program dziaªaª poprawnie nale»y zapozna si z zasadami dotycz cymi nazywania zmiennych. Po pierwsze nazwy zmiennych mog posiadac litery i cyfry oraz znaki podkreslenia i znak dolara $, musz jednak zaczyna si od litery. Dªugo± nazewnika zmiennej mo»e wynosi maksymalnie 128 znaków, kolejne znaki po 128 b d ignorowane. Po drugie nazwa zmiennej nie mo»e pokrywa si z nazw funkcji lub procedury. Po trzecie nazwa zmiennej nie mo»e posiada odstepów. Nale»y pami ta,»e zmienna zm1, Zm1 i ZM1 to ta sama zmienna. Oto podstawowe zasady i bª dy w praktyce: Tablica 1: Tworzenie poprawnych nazw zmiennych Nazwa bªedna Blad Nazwa poprawna 2zm nie zaczyna sie na liter zm2 _zm2 nie zaczyna sie na liter zm_2 zm@ niedozwolony znak @ zm$ zm 2 niedozwolony odstep zm_2 eof konikt z nazw wbudowanej funkcji eoof 2.2 Typy i rozmiary danych W j zyku IDL stosuje si typy wbudowane oraz typy konstruowane przez u»ytkownika z typów wbudowanych, czyli tablice (ang. array)oraz struktury (ang.struct). J zyk IDL jest j zykiem typów przydzielanych dynamicznie. Oznacza to,»e u»ytkownik deklaruj c zmienn nie musi deklarowa jakiego jest ona typu. Typ danej jest dopasowywany do podstawionej pod jej nazewnik warto±ci. 2.2.1 Typy podstawowe Zbiór typów podstawowych j zyka IDL jest zbli»ony do typów danych innych j zyków programowania. Typy podstawowe s pochodnymi typów caªkowitego (integer), typu rzeczywistego (oat) oraz typu string.

2.2 Typy i rozmiary danych 8 Tablica 2: Typy podstawowe j zyka IDL Typ Zakres Rozmiar Byte 0-255 8 bit Integer -32.768-32.767 16 bit Unsigned Integer 0-65.535 16 bit Long -2.147.483.648-2.147.483.647 32-bit Unsigned Long 0-4.294.967.295 32 bit 64 bit Long -9.223.372.036.854*10 6-9.223.372.036.854*10 6 64 bit 64 bit Unsigned Long 0-18.446.744.073.709.551.615 64 bit Floating-point 10 38 10 38 32 bit Double-precision 10 308 10 308 64 bit Complex 10 38 10 38 32 bit Double-prec. complex 10 308 10 308 64 bit String sekwencja znakow <2.1GB Powy»sza tabela dodatkowo uwzgl dnia podziaª na trzy podstawowe grupy typów. Typ Complex i Double-precision Complex to dwuelementowe pochodne typu Float i Double sªu» ce do reprezentacji liczb zespolonych i zªozonych struktur zawieraj cych te liczby. Istnieje mozliwosc sprawdzenia jakiego typu zmienne stworzylismy. Poni»ej przykªad utworzenia kilku zmennych i sprawdzenia ich typu: IDL>zm1=6L & zm2=0b & zm3=22 IDL>help,zm1 ZM1 LONG64=6 IDL>help,zm2 ZM2 BYTE=0 IDL>help,zm3 ZM3 INT=2 IDL>help,zm4 ZM4 FLOAT=0.250000 IDL>help,zm5 ZM5 STRING='napis' & zm4=0.25 & zm5='napis' 2.2.2 Tablice Tablica jest ponumerowan grup zmiennych tego samego typu. Pierwszy element tablicy posiada indeks 0, natomiast element ostatni ma indeks rowny liczbie elementów w tablicy zmniejszony o jeden. Aby zdeniowa tablic nale»y po nazewniku zmiennej i znaku podstawienia w nawiasach klamrowych

2.2 Typy i rozmiary danych 9 umie±ci dowoln liczb elementów tego samego typu rozdzielonych znakiem przecinka. IDL>tablica_int=[3,5,6,25,10,27] IDL>print,tablica_int 3 5 6 25 10 27 Je»eli w tablicy umie±cimy elementy typu integer i elementy typu oat to nast pi automatyczna konwersja liczb caªkowitych na rzeczywiste. IDL>tablica_float=[3.24,5.3,6.67,25,10,27] IDL>print,tablica_float 3.24000 5.30000 6.67000 25.0000 10.0000 27.0000 IDL wykonuje automatyczn konwersj tylko miedzy typami caªkowitymi i rzeczywistymi. Próba wstawienia do tablicy zawieraj cej warto±ci liczbowe np.: napisu daje w wyniku 0 w miejscu w którym ten napis wstawiono: IDL>tablica_int=[3,5,6,25,10,'napis'] IDL>print,tablica_int 3 5 6 25 10 0 Oprócz tablic jednowymiarowych IDL umo»liwia nam tworzenie tablic wielowymiarowych. Maksymalny, dozwolony wymiar takiej tablicy wynosi 8. Aby utworzyc tablic wielowymiarow (w naszym przypadku dwuwymiarow ) poslu»ymy si nast puj cym kodem: IDL>tab2D=[[1,2,3],[4,5,6]] IDl>help,tab2D TAB2D INT = Array[3, 2] IDL>print,tab2D 1 2 3 4 5 6 Tworz c bardziej zªo»one tablice pami tajmy,»e zawarto± ka»dego nawiasu to jeden wiersz tablicy, a ilo± elementów w wewnetrznym nawiasie to ilo± kolumn.

2.2 Typy i rozmiary danych 10 2.2.3 Struktury Jedna tablica potra przechowywa dane tylko jednego typu. Struktura natomiast jest typem przeznaczonym do przechowywania zbioru danych ró»nych typów. Wyró»niamy dwa typy struktur: struktury nazwane i struktury anonimowe. Jedyna ró»nica pomi dzy nimi polega na tym,»e nie mo»na modykowac nazwy pola skªadowego i typu struktury nazwanej. Struktury nazwane slu» gªównie do przechowywania informacji o wielu obiektach o tych samych wªa±ciwo±ciach. Oto przykªad utworzenia, wprowadzenia i wy±wietlenia danych struktury nazwanej, a tak»e próba zmodykowania typu pola: IDL>void = {samochod,$ IDL>rok_produkcji:0, $ IDL>marka:'', $ IDL>model:'', $ IDL>przebieg:0D } IDL>moj_sam={samochod} IDL>moj_sam.rok=1999 IDL>moj_sam.marka='Renault' IDL>moj_sam.model='Clio' IDL>moj_sam.przebieg=58000.5 IDL>print,moj_sam.rok,moj_sam.marka,moj_sam.model, $ moj_sam.przebieg 1999 Renault Clio 58000.500 Operator $ u»ywany na ko«cu wiersza nakazuje kompilatorowi traktowanie nast pnego wiersza jako kontynuacje poprzedniego. Sprawd¹my typ pola przebieg przed prob zmiany jego typu: help,moj_sam.przebieg <Expression> DOUBLE = 58000.500 Wstawmy caªkowit warto± pola przebieg i sprawd¹my teraz jego typ: moj_sam.przebieg=58000 help,moj_sam.przebieg <Expression> DOUBLE=58000.000 Typ pola nie zmieniª si. Równie» zmiana nazwy pola lub ich liczby nie jest mo»liwa w stukturze nazwanej. Wracaj c do metod wy±wietlania stuktur

2.2 Typy i rozmiary danych 11 istnieje druga metoda wy±wietlania pól struktury. Aby wy±wietli wszystkie pola nie musimy zna ich nazw tylko ich liczb. Pola numerowane s tak jak w przypadku tablic. Oto przykªad: IDL>print,moj_sam.(0),moj_sam.(1),moj_sam.(2),moj_sam.(3) 1999 Renault Clio 58000.000 Pola struktury nienazwanej mog by dowolnie modykowane. Zatem ich typ,nazwa i ilo± mog si zmienia wedªug gustu u»ytkownika. Oto przykªad utworzenia struktury nienazwanej i próby jej modykacji: IDL>karol={wiek:22,wzrost:175,waga:69} IDL>help,karol.wzrost <Expression> INT=175 IDL>karol={wiek:22,wzrost:175.5,waga:69} IDL>help,karol.wzrost <Expression> FLOAT=175.500 Dzi ki wstawieniu nowej warto±ci nast piªa zmiana typu pola naszej struktury z caªkowitej na rzeczywist. 2.2.4 Wska¹niki Wska¹nik jest zmienn wskazuj c na inn zmienn. Powstaje pytanie dlaczego stosowa zamiennik oryginalnej zmiennej. Odpowied» jest krótka, z powodu rozmiaru. Wska¹nik jest umieszczny w 4 bajtach pami ci. Jego gªówn zalet jest to,»e mo»e wskazywa na obiekty o du»o wi kszych rozmiarach takich jak tablice, czy zªo»one struktury. Przy wielokrotnym odwoªywaniu si do tych du»ych zbiorów danych u»ywanie wska¹nikow oszczedza pami potrzebn na allokowanie obiektów. Mo»emy tworzy dwa typy wska¹ników: wska¹nik null oraz wska¹nik do zmiennej. Oto kod tworz cy pierwszy typ wska¹nika: IDL>wsk=ptr_new() IDL>help,wsk WSK POINTER = <NullPointer> Wska¹nik null jest u»yteczny je»eli zmienna, na któr wskazuje jest nieznana w czasie tworzenia wska¹nika. Drugi typ wska¹nika (wska¹nik na zmienn ) mo»e zosta utworzony na dwa sposoby. Pierwszym sposobem jest u»ycie funkcji PTR_NEW z argumentem b d cym obiektem, na który wska»nik ma

2.2 Typy i rozmiary danych 12 wskazywa. IDL>tablica_int=[1,2,3,4,5,6] IDL>wsk_tablica1=ptr_new(tablica_int) Drugi sposób polega na tym,»e najpierw tworzymy wska¹nik niezdeniowanej zmiennej przy pomocy funkcji PTR_NEW z argumentem allocate_heap. Nast pnie tworzymy dane, na które b dzie wskazywaª wska¹nik i podstawiamy dane pod wska¹nik. IDL>wsk_tablica2=ptr_new(/allocate_heap) IDL>tablica_float=[1.0,2.0,3.0,4.0,5.0,6.0] IDL>*wsk_tablica2=tablica_float Zalet wska¹ników jest to,»e mo»emy sie nimi posªugiwa jak obiektami, na które wskazuj. Poznajmy sposób odwoªywania si do warto±ci obiektów, na które wskazuj wska¹niki. W celu wy±wietlenia elementów tablicy tablica_int i struktury z poprzedniego rozdziaªu posªu»my si poleceniem: IDL>print,*wsk_tablica1 1 2 3 4 5 6 IDL>wsk_samochod=ptr_new(moj_sam) IDL>print,*wsk_samochod 1999 Renault Clio 58000.000 Aby wy±wietli pojedynczy element tablicy posluguj c si wska¹nikiem nale»y posªu»yc si poleceniem: print,(*wsk_tablica1)[5] 6 print,(*wsk_samochod).model Clio Prace ze wska¹nikem ko«czymy wpisuj c polecenie: ptr_free,wsk_tablica1 2.2.5 Konwersja mi dzy typami J zyk IDL oferuje nam szeroki zestaw typów danych. Czasami jednak niezb dne staje si przekonwertowanie typu. Nasze pocz tkowe zaªo»enia mog okaza

2.2 Typy i rozmiary danych 13 si bªedne i zakres naszej zmiennej mo»e okaza si zbyt maªy. Cz sto deklarujemy zmienn licznika p tli jako integer. Zakres jej je»eli startujemy od 0 wynosi nieco ponad 32000. Przy wi kszym zbiorze danych do przetworzenia ªatwo przekroczy t granic. Oto zestaw funkcji przydatnych do konwertowania typów: Tablica 3: Funkcje konwertuj ce typy Typ Funkcja konwertuj ca Byte b=byte(x) Integer i=x(x) Unsigned Integer ui=uint(x) Long l=long(x) Unsigned Long ul=ulong(x) 64-bit Long l64=long64(x) 64-bit Unsigned Long ul64=ulong64(x) Floating-point f=oat(x) Double-precision d=double(x) Complex zesp=complex(x) Double Complex dzesp=dcomplex(x) String str=string(x) A oto dziaªanie kilku z tych funkcji w praktyce: IDL>tablica_float=[3.2,4.6,4.49,3.99,5.22,1.18] IDL>tablica_int=fix(tablica_float) IDL>print,tablica_int 3 4 4 3 5 1 Spój»my na sposób konwersji pomi dzy typem integer a byte. Wynikiem tej konwersji musi by zawsze liczba z przedziaªu dozwolonego dla typu byte (0-255). Przyj»yjmy si tej metodzie zamiany typów: tablica_int=[433,512,123,256,255,257] tablica_byte=byte(tablica_int) print,tablica_byte 177 0 123 0 255 1

2.3 Operatory 14 Oto nastepny przykªad konwersji typów. Tym razem z typu string na oat. tablica_string=['0.56','455','9 99','-78.6','L3L','36B'] tablica_float=float(tablica_string) print,tablica_float 0.560000 455.000 9.00000-78.6000 0.000000 36.0000 Nie ka»da konwersja jest dozwolona. Przykªadem jest tu próba zamiany napisu zawieraj cego liter na pierwszym miejscu na warto± liczbow. O tym,»e konwersja mi dzy naszymi typami jest niemo»liwa do wykonania informuje nas w naszym przypadku komunikat: Type conversion error: Unable to convert given STRING to Float. 2.3 Operatory 2.3.1 Operatory logiczne W j zyku IDL wyró»niamy trzy operatory logiczne. S to operator iloczynu AND &&, operator sumy OR oraz operator logicznej negacji NOT. Operator logiczny && daje w wyniku 1 kiedy wynikiem wyra»e«, które ten operator ª czy jest prawda logiczna. Nale»y pami ta,»e niezerowe warto±ci liczbowe, niepuste napisy oraz wszystkie wskazniki oprócz wska¹nikow null traktowane s jako logiczna prawda, wszystkie pozostaªe obiekty traktowane s jako logiczny faªsz. Tak jak w wi kszo±ci wspóªczesnych j zyków programowania je»eli pierwszy warunek jest falszem drugi nie jest ju» sprawdzany. Oto przykªady: IDL>print,1&&1 1 IDL>print,1&&0 0 IDL>print,1&&'napis' 1 IDL>print,1&&wsk_tablica 1 Operator logiczny daje w wyniku prawd je»eli jedno z wyra»e«, które ª czy jest prawd. W tym wypadku je»eli pierwsze wyra»enie jest prawd drugie nie jest ju» sprawdzane. Oto przykªady:

2.3 Operatory 15 IDL>print,0 1 1 IDL>print,0 0 0 Operator logicznej negacji daje w wyniku 1 je»eli wyra»enie przed nim stoj ce jest logicznym faªszem. W przciwnym wypadku wynikiem jest 0. Oto przykªady: IDL>print,~0 1 IDL>print,~123.25 0 2.3.2 Operatory arytmetyczne J zyk IDL zawiera standardowy zestaw operatorow matematycznych wzbogacony o operatory inkkrementacji ++, deinkrementacji - -, pot gowania oraz uzyskiwania reszty z dzielenia MOD. Tablica 4: Operatory arytmetycze operator opis przykªad wynik + dodawanie a=2+3 5 ++ inkrementacja a=3 a++ 4 - odejmowanie a=5-3 2 - - deinkrementacja a=3 a- - 2 * mno»enie a=3*5 15 / dzielenie a=10.0/6.0 1.66667 pot gowanie a=23 8 MOD dzielenie modulo a=11 MOD 3 2 2.3.3 Operatory relacji Operatory relacji s niezb dne w budowaniu wyra»en takich jak instrukcje warunkowe czy p tle. Ich zadaniem jest zbadanie czy dany warunek zachodzi miedzy dwoma czªonami danej relacji. Wynikiem jest prawda lub falsz logiczny. Skªadnia operatorów logicznych j zyka IDL wywodzi si z j zyka For-

2.4 Instrukcje 16 tran. Oto zestawienie operatorów relacji: Tablica 5: Operatory relacji j zyk IDL j zyk Fortran opis EQ.EQ. równy NE.NE. ró»ny GT.GT. wi kszy GE.GE. wi kszy-równy LT.LT. mniejszy LE.LE. mniejszy-równy 2.4 Instrukcje J zyk IDL udost pnia u»ytkownikowi szereg podstawowych instrukcji, dzi ki znajomo±ci których ªatwiej opisywa i programowa zªo»one problemy. Do instrukcji nalez : instrukcja warunkowa IF...THEN, instrukcja p tli WHILE...DO, instrukcja p tli FOR i p tli REPEAT...UNTIL, instrukcja wyboru CASE...OF oraz pochodne niektórych z tych instrukcji. 2.4.1 Instrukcja IF...THEN Warunek logiczny umieszczony w instrukcji warunkowej sªu»y wybraniu jednej z alternatywnych dróg programu. Skªadnia instrukcji jest nastepuj ca: IF warunek THEN instrukcja Je»eli po speªnieniu warunku chcemy wykona wi cej ni» jedno polecenie to nale»y zgrupowa te polecenia: IF warunek THEN BEGIN instrukcja1 instrukcja2... ENDIF Je±li chcemy aby nasz program zabezpieczaª obydwie drogi po wykonaniu testu logicznego, to jest drog po speªnieniu warunku i drog gdy warunek nie jest speªniony potrzebna jest nam instrukcja IF...THEN...ELSE.

2.4 Instrukcje 17 IF warunek THEN instrukcja_na_tak ELSE instrukcja_na_nie Równie» w tym przypadku je±li liczba instrukcj w której± z gaª zi jest wi ksza ni» jeden to nale»y zgrupowa te polecenia kodem: IF warunek THEN BEGIN instrukcja_na_tak_1 instrukcja_na_tak_2... ENDIF ELSE BEGIN instrukcja_na_nie_1 instrukcja_na_nie_2... ENDELSE Nie jest bª dem u»ywanie ª czników BEGIN...ENDIF oraz BEGIN...ENDELSE dla pojedynczych instrukcji w drodze na tak lub na nie. Oto dziaªanie instrukcji w praktyce: IDL>licz1=100.0 && licz2=50.0 IDL>IF (licz1 mod licz2 EQ 0) THEN BEGIN $ IDL>print,("licz1 jest podzielnikiem licz2") $ IDL>ENDIF ELSE BEGIN $ IDL>print,("licz1 nie jest podzielnikiem licz2") $ IDL>ENDELSE licz1 jest podzielnikiem licz2 2.4.2 Instrukcja WHILE...DO Instrukcja ta jest jedn z dostepnych w j zyku IDL p tli, czyli instrukcji kontroluj cych wielokrotne wykonywanie si pewnych cz sci kodu programu. Jej skªadnia jest nast puj ca: WHILE warunek DO instrukcja Je±li w refrenie p tli wystepuje wi cej ni» jedno polecenie nale»y ograniczy je w nastepuj cy sposób: WHILE warunek DO BEGIN instrukcja1

2.4 Instrukcje 18 instrukcja2... ENDWHILE Refren p tli, czyli jej instrukcje po sªowie kluczowym DO wykonuj si dopóki warunek p tli jest prawdziwy. Kiedy warunek p tli jest faªszem logicznym przed pierwszym wykonaniem petli oznacza to,»e refren nigdy si nie wykona. Oto przykªad dzialania p tli WHILE...DO: IDL>licznik=0 IDL>WHILE(licznik LT 5) DO BEGIN $ IDL>print,3^licznik $ IDL>licznik++ $ IDL>ENDWHILE 1 3 9 27 81 2.4.3 Instrukcja REPEAT...UNTIL P tla ta jest skªadniowo podobna do p tli WHILE...DO. Ró»nica polega na tym,»e warunek sprawdzany jest po wykonaniu instrukcji refrenu. Wyj±cie z p tli nast puje tutaj, gdy warunek jest speªniony. Zatem nawet je±li pierwsze sprawdzenie warunku p tli daje w wyniku prawd to refren wykona si jeden raz, co bylo niedopuszczalne w poprzednio opisywanej p tli. Uwzgledniamy oczywiscie,»e z poprzedniej petli wyj±cie nastepowaªo przy falszu warunku p tli. Oto skªadnia p tli REPEAT...UNTIL: REPEAT instrukcja UNTIL warunek W przypadku wi kszej ilo±ci instrukcji w refrenie p tli modykujemy skªadnie dodaj c: REPEAT BEGIN instrukcja1 instrukcja2... ENDREP UNTIL warunek Zwró my uwag,»e warunek p tli jest prawdziwy przed pierwszym jego sprawdzeniem. Oto przykªad dziaªania tej p tli: IDL>licznik=5

2.4 Instrukcje 19 IDL>suma=10 IDl>REPEAT BEGIN $ IDL>suma=suma+licznik $ IDL>licznik++ $ IDL>print,suma $ IDL>ENDREP UNTIL(suma GE 10) 15 Budowa tej p tli mo»e by pomocna przy dokonywaniu wyboru pomi dzy wykonaniem refrenu, a pomini ciem tego etapu i przejsciem np.: do wykonywania dalszych oblicze«: REPEAT BEGIN instrukcje refrenu print,"zakonczyc (T/N) read,odp ENDREP UNTIL (odp EQ 'T') 2.4.4 Instrukcja FOR P tla FOR jest p tl z licznikiem. Pozwala ona na wykonywanie polece«zawartych w refrenie okre±lon przez u»ytkownika ilo± razy. Dodatkowo p tla for j zyka IDL umo»liwia ustawienie kroku odpowiedzialnego za zwi kszanie licznika. Je»eli tego nie zrobimy to krok b dzie miaª warto± 1 i po ka»dym wykonaniu instrukcji refrenu, licznik b dzie zwi kszany o t wla±nie warto±. Oto skªadnia p tli FOR: FOR licznik=poczatek,koniec,krok DO BEGIN instrukcja1 instrukcja2... ENDFOR Je»eli w refrenie p tli zawarta jest tylko jedna instrukcja to ograniczniki BEGIN i ENDFOR s zb dne. Ich u»ywanie jednak cz sto pomaga w dobrej i czytelnej organizacji pisanego przez nas kodu. Oto przykªad zastosowania tej p tli w praktyce przy wy±wietlaniu kilku kolejnych pot g dwójki, drugi przykªad ilustruje zagnie»d»anie dwóch p tli FOR daj ce w wyniku macierz jednostkow :

2.4 Instrukcje 20 IDL>FOR i=0,4 DO BEGIN $ IDL>print,2^i $ IDL>ENDFOR 1 2 4 8 16 macierz=indgen(4,4) FOR i=0,3 DO BEGIN FOR k=0,3 DO BEGIN IF (i EQ k) THEN BEGIN macierz[i,k]=1 ENDIF ELSE BEGIN macierz[i,k]=0 ENDELSE ENDFOR ENDFOR print,macierz 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 2.4.5 Instrukcja CASE...OF Instrukcja CASE...OF to bardziej zªo»ona wersja instrukcji warunkowej. Badana jest tu warto± pewnej zmiennej. Ka»da warto± jak ta zmienna mo»e przyj prowadzi do innej cz ±ci kodu. Ilo± tych rozgaª zie«zale»y od u»ytkownika. Przyj»yjmy si skªadni tej instrukcji: CASE zmienna OF przypadek1: BEGIN instrukcje END przypadek2: BEGIN instrukcje END... ELSE: BEGIN instrukcje END ENDCASE

2.4 Instrukcje 21 Opcja ELSE nie jest obowi zkowa i mo»na j pomin. Odpowiada ona za wszystkie pozostaªe warto±ci zmiennej, które nie zostaªy uwzgl dnione w wyró»nionych przypadkach. Oto prosty przykªad u»ycia naszej instrukcji w praktyce. U»ywam tutaj dwóch funkcji systemowych max()i min(), których wynikiem jest odpowiednio najwi ksza i najmniejsza liczba ze zbioru wejsciowego. Oto przykªad: tablica_int=[9, 87, 56, 34, 0, -12, 44] print,'1-oblicz maximum' print,'2-oblicz minimum' print,'3-wyjscie z programu' print,'wybierz 1-3' read,odp CASE odp OF 1: begin print,'minimum to:' print,min(tablica_int) end 2: begin print,'maximum to:' print,max(tablica_int) end 3:print,'Opcja wyjscie' ELSE: print,'niepoprawna odpowiedz!' ENDCASE Šatwo zauwa»y,»e wprowadzanie wielu linii kodu z wiersza polece«jest uci zliwe. Nie mamy równie» mo»liwo±ci zapisania wyników naszej pracy. Wkrótce dowiemy si na czym polega pisanie procedur i funkcji i jakie mamy z ich pisania korzy±ci. Przedstawiony wy»ej kod to kod procedury. Poni»ej wyniki powstaªe dzi ki kompilacji jej kodu: 1-oblicz maximum 2-oblicz minimum 3-wyjscie z programu IDL>Wybierz 1-3: 1 Minimum to: -12

2.5 Procedury, funkcje, program glówny 22 2.4.6 Instrukcja BREAK Instrukcja BREAK jest ±ci±le zwi zana z instrukcjami takimi jak FOR,WHILE REPEAT...UNTIL. U»ycie instrukcji BREAK wewn trz tych p tli prowadzi do natychmiastowego z niej wyj±cia. Oto przykªad: FOR i=1,10 DO BEGIN IF(i EQ 5)THEN BREAK print,i ENDFOR print,'wyjscie z petli' 1 2 3 4 wyjscie z petli Normalnie nastapiªoby wy±wietlenie wszystkich elementów licznika. Po wykonaniu instrukcji BREAK nast piªo natychmiastowe zako«czenie wykonywania instrukcji p tli FORi wyj±cie poza ni. 2.5 Procedury, funkcje, program glówny Pisanie bardziej zªo»onych programów, zawieraj cych wiele linii kodu wymaga podzielenia zada«programu pomi dzy procedury i funkcje. Post p programistyczny wymusiª na twórcach j zyka IDL stworzenie edytora uªatwiaj cego wprowadzanie kodu. Pisanie procedur, funkcji i programów, a tak»e ich kompilacja sta a si wygodniejsza. Poznajmy tajniki pisania i kompilacji procedur, funkcji, programów gªównych, a tak»e wygl d i funkcje edytora j zyka IDL dla wersji 6.2. 2.5.1 Procedury Pisanie dowolnej procedury zaczynamy w nastepuj cy sposób: pro nazwa procedury,lista parametrów,lista sªów kluczowych tre± procedury end Nazwa pliku, w którym zapisali±my dan procedur musi skªadac si z nazwy procedury i rozszerzenia pro. Lista parametrów i sªów kluczowych jest opcjonalna. Nie ka»da procedura musi je zawiera. Rol sªów kluczowych jest cz sto kontrolowanie sposobu dziaªania programu. Odpowiadaj one m.in.

2.5 Procedury, funkcje, program glówny 23 za rodzaj i sposób wy±wietlania wyników programu. Oto przykªad procedury i sposób przekazywania do niej parametrów: pro power,liczba1,liczba2 print,liczba1^liczba2 end Plik z nasz procedur zgodnie z reguª nazwali±my power.pro po jego skompilowaniu wywoªujemy plik wykonywalny i przekazujemy parametr procedurze nastepuj co: IDL>power,3,2 9 2.5.2 Funkcje Funkcja zwraca wynik operacji w niej wykonywanych. Oto sposób budowania dowolnej funkcji: function nazwa funkcji,lista argumentów,lista sªów kluczowych tr± funkcji end Do przekazania warto±ci wynikowej sªu»y polecenie RETURN, warto±. Dozwolone jest posiadanie wielu instrukcji return w tre±ci danej funkcji, ale mo»liwe mo»e by wykonanie tylko jednej z nich. Oto przykªad funkcji zwracaj cej mniejsz z dwóch liczb wejsciowych: function minimum,liczba1,liczba2 IF (liczba1 GT liczba2) THEN BEGIN return,liczba2 ENDIF ELSE BEGIN return,liczba1 ENDELSE end Po kompilacji pliku minimum.pro jakim nazwali±my plik z nasz funkcj nale»y przekaza zwracany rezultat wywoªuj c funkcj nastepujaco: IDL>wynik=minimum(10,0.5) IDL>print,wynik 0.500000

2.5 Procedury, funkcje, program glówny 24 2.5.3 Program gªówny Program gªówny jest programem nadzorczym. Odpowiada on za kolejno± wykonywania procedur i funkcji z nim zwi zanych. Nie posiada on deklaracji na pocz tku. Jedynym wymogiem jest zako«czenie jego instrukcji sªowem END. Je»eli umie±cilismy sekcje programu gªównego w pliku to jego nazwa nie mo»e pokrywa si z nazw funkcji lub procedury w nim zawartej. Kompilator sam wykrywa czy dany plik posiada sekcje programu gªównego czy nie. Je»eli takowa istnieje to zostaj skompilowane wszystkie moduªy procedur i funkcji, a nazwa danego moduªu b dzie nazw danej funkcji lub procedury. Dodatkowo skompilowany moduª gªówny przyjmie nazw $MAIN$. Jego wykonanie nast pi po wpisaniu w linii polece«polecenia: IDL>.GO Oto przykªad kodu programu gªównego zapisanego w pliku glowny.pro steruj cego wykonywaniem procedur oraz sposob kompilacji moduªów programu gªównego i procedur: pro wyswietl1 print,'procedura nr.1' end pro wyswietl2 print,'procedura nr.2' end print,'program glowny wykonuje:' wczytaj wyswietl end Skompilujmy plik glowny.pro i spój»my na skomilowane moduªy: IDL>.COMPILE glowny Compiled module: WYSWIETL1. Compiled module: WYSWIETL2. Compiled module: $MAIN$. Istnieje mo»liwo± sprawdzenia dziaªania ka»dego moduªu z osobna. Wywoªajmy jedn z procedur, a nast pnie program gªowny: IDL>wyswietl1

2.5 Procedury, funkcje, program glówny 25 procedura nr.1 IDL>.go program glowny wykonuje: procedura nr.1 procedura nr.2 2.5.4 Kompilacja Otrzymanie wyników napisanego kodu mo»e si odby poprzez jego skompilowanie. Cz ± polece«poznali±my we wcze±niejszym podrozdziale. Oto wszystkie polecenia niezb dne przy kompilacji i uruchamianiu programów z linii polece«: IDL>.COMPILE [plik1,...,plikn] lub IDL>.COM [plik1,...,plikn] Polecenie to kompiluje procedury, funkcje programy gªówne zawarte w wyszczególnionych plikach. IDL>.RUN [plik1,...,plikn] lub IDL>.R [plik1,...,plikn] Polecenie dziaªa tak jak poprzednie, dodatkowo je»eli plik posiada sekcje programu gªównego nastepuje natychmiastowe wykonanie tej sekcji. IDL>.GO Polecenie to nakazuje wykonanie kodu uprzednio skompilowanego modulu gªównego programu. Ka»da zmiana w kodzie wymaga skompilowania tego modulu, w którym zaszªa zmiana. Nie jest wymagane dodawanie rozszerze«kompilowanych b d¹ uruchamianych plików. Kompilator automatycznie wyszuka podany plik z rozszerzeniem pro o podanej nazwie. 2.5.5 Edytor dla wersji 6.2 Wspomnieli±my wczesniej,»e cz sto m cz ce jest wprowadzanie kodu poprzez linie polece«. Dzi ki edytorowi j zyka IDL pisanie programów, ich kompilacja, uruchamianie, a tak»e korzystanie z bogatej pomocy nie stanowi wielkiego problemu. Mo»na powiedzie,»e dzi ki edytorowi mo»emy postawi pierwsze kroki w celu poznania j zyka IDL. Jest on dost pny dla systemow Windows, Macintosh oraz wielu platform Unixowych.

2.5 Procedury, funkcje, program glówny 26 Edytor skªada si z kilku paneli. Bezpo±rednio u góry znajduje si pasek menu, a pod nim pasek narz dzi edytora. Pod paskiem edytora znajduje si duzy panel edytora kodu oraz mniejszy panel projektu. Pod nimi znajduje si panel wyników, nast pnie panel zmiennych i linia polece«. Oto wygl d edytora: Rysunek 1: Wygl d edytora j zyka IDL dla wersji 6.2 Wersj demo mo»na pobra ze strony http://www.rsinc.com/download/. Wersj tak mo»na równie» otrzyma poczt po wypeªnieniu ankiety zawartej na tej stronie. Niestety zablokowanych jest tu kilka funkcji m.in. zapis danych do pliku,a czas u»ywania edytora jest ograniczony do 7 minut, po których trzeba ponownie uruchomic edytor. Niespotkaªem si na polskim rynku z dystrybucj systemu Linux, w któr wbudowany byªby kompilator tego jezyka. Wersja studencka to koszt okoªo 80 dolarów.

3 Praca z danymi 27 3 Praca z danymi Je»eli mamy jakiekolwiek dane to na pewno da si je wy±wietli przy pomocy j zyka IDL. Je»eli natomiast nie mamy zbioru danych, nad którym chcieliby±my pracowa to j zyk IDL stworzy te dane dla nas. 3.1 Tworzenie danych Nie zawsze mamy gotowy zestaw danych. J zyk IDL posiada szereg wbudowanych funkcji inicjuj cych zestaw danych. Za ich pomoc mo»emy utworzy jednowymiarowy wektor lub wielowymiarowe tablice dowolnego typu. Pola inicjowane s wartosci 0. Dla przy±pieszenia dziaªania programu mo»na z tej inicjacji zrezygnowa wstawiaj c w funkcji inicjuj cej ag /NOZERO. Oto zestaw tych funkcji: Tablica 6: Funkcje tworz ce zbiory danych Typ Funkcja byte BYTARR() integer INTARR() unsigned integer UINTARR() long LONARR() unsigned long ULONARR() 64-bit long LON64ARR() unsigned 64-bit long ULON64ARR() oating point FLTARR() double precision DBLARR() string STRARR() Wszystkie te funkcje maj jednakow skªadni. Wynik ich dziaªania jest równie» podobny, jednak warto±ci, którymi s inicjowane s ró»ne i tak dla typu byte jest to warto± 0, a dla typu double 0.0. Podaj c za argument funkcji tylko jeden wymiar otrzymujemy wektor o liczbie pól okre±lon przez nasz argument i typie adekwatnym do wywoªanej funkcji. Oto skªadnia jednej z tych funkcji, przykªad u»ycia i wynik: wynik=fltarr(d1[,...,d8] [,/NOZERO]) IDL>tablica_float=FLTARR(3,3) IDL>print,tablica-float

3.2 Operacje na wektorach i macierzach 28 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 Oto nast pny zestaw funkcji. Charakteryzuj sie one tym,»e pierwszy element zbioru przez nie utworzonego ma wartosc 0, ka»dy nast pny element zwi ksza t warto± o 1. Tablica 7: Funkcje inicjuj ce zbiory danych Typ Funkcja byte BINDGEN() integer INDGEN() unsigned integer UINDGEN() long LINDGEN() unsigned long ULINDGEN() 64-bit long L64INDGEN() unsigned 64-bit long UL64INDGEN() oating point FINDGEN() double precision DINDGEN() Sój»my jak wygl da dzia anie dwóch z tych funkcji w praktyce: IDL>tab_int=INDGEN(3,3) IDL>tab_float=FINDGEN(2,2) IDL>print,tab_int 0 1 2 3 4 5 6 7 8 IDL>print,tab_float 0.000000 1.00000 2.000000 3.00000 3.2 Operacje na wektorach i macierzach Dowiedzieli±my si jak stworzy wielowymiarowe zbiory danych. Czas na poznanie operacji jakie s mo»liwe na tych zbiorach. W±ród operacji na macierzach i wektorach istnieje wiele zale»no±ci.

3.2 Operacje na wektorach i macierzach 29 Z racji tego,»e macierze stanowi bardziej zªo»one struktury, a wiekszo± danych przechowywana jest wla±nie w macierzowej postaci wielowymiarowych kolumn i wierszy poznanie operacji macierzowych stanowi istotny punkt w poznaniu jezyka IDL. Najpierw poznajmy kilka operacji na wektorach: wektor=indgen(5) print,wektor 0 1 2 3 4 print,wektor(2:4) 2 3 4 print,wektor^2 0 1 4 9 16 print,wektor GE 4 0 0 1 1 1 print,[wektor,20,21] 0 1 4 9 16 20 21 Struktura dowolnej macierzy M jest taka,»e element le» cy na przeci ciu i-tej kolumny i j-tego wiersza oznaczamy przez M[i,j]. J zyk IDL ªatwiej i szybciej ni» jakikolwiek inny j zyk operuje na macierzach. Mogli±my si przekona obserwuj c operacje na wektorach,»e jednym poleceniem wykonujemy to co w innych j zykach programowania wymagaªoby zastosowania jednej p tli. W stosunku do macierzy,gdzie zast powane s przynajmniej dwie petle wida specjalizacj j zyka w tym zakresie. Zobaczmy przykªady kilku operacji macierzowych: macierz_1=indgen(3,3) print,macierz_1 0 1 2 3 4 5 6 7 8 print,rotate(macierz_1,1) 6 3 0 7 4 1 8 5 2 print,rotate(macierz_1,4) 0 1 2 3 4 5 6 7 8 print,transpose(macierz_1+1)

3.2 Operacje na wektorach i macierzach 30 1 4 7 2 5 8 3 6 9 Mo»emy przesuwa klolumny i wiersze macierzy przy pomocy funkcji SHIFT. Drugi argument tej funkcji odpowiada za przesuwanie kolumn, trzeci natomiast odpowiada za przesuwanie wierszy. W celu szybszego poznania dziaªania tej funkcji najpierw przypomnijmy posta bazow naszej wejsciowej macierzy: print,macierz_1 0 1 2 3 4 5 6 7 8 print,shift(macierz_1,1,0) 2 0 1 5 3 4 8 6 7 print,shift(macierz_1,0,1) 6 7 8 0 1 2 3 4 5 Pamietaj c,»e przy pomocy funkcji print nie zmieniamy naszych danych zapisanych w pami ci komputera lecz tylko modykujemy ich warto±ci przy wy±wietlaniu zobaczmy w jak prosty sposób przy pomocy operatora ## mo»emy pomnozy dwie macierze. Macierz druga musi mie tak sam liczb wierszy co macierz pierwsza liczb kolumn, w przeciwnym wypadku wygenerowane zostanie ostrze»enie: Operands of matrix multiply have incompatible dimensions Pamietaj c o powy»szej zasadzie tworzymy dwie nowe macierze i wykorzystujemy nasz operator: macierz_1=[[3,2],[2,3],[3,2]] macierz_2=[[2,3],[4,3]] print,macierz_1 ## macierz_2 14 15 16 15 14 15

3.3 Odczyt danych 31 Tak oto wykonali±my programowo najszybsze mno»enie dwóch maciezy z zachowaniem kontroli nad ich poprawn iloscia kolumn i wierszy. Tym kilku liniom kodu cz sto równowa»ne jest kilkudziesi t w przypadku j zyków takich jak Pascal, czy C. 3.3 Odczyt danych Dane s podstaw ka»dego wykresu. W poprzednim rozdziale opisaªem sposoby tworzenia danych. Cz sto jednak takie sposoby nie wystarczaj i nale»y wczyta zbiór danych z pliku. J zyk IDL wspiera wiele formatów danych m.in. pliki: ASCII, binarne, DICOM, DXF, WAV i XDR. S w±ród nich tak»e formaty naukowe takie jak: CDF, HDF, HDF-EOS czy netcdf. Wczytywaniu tak ró»norodnych danych musz towarzyszy ró»ne techniki. Danym zapisanym w obrazach, tworzeniu obrazów z danych jak i obslugiwanym formatom gracznym po±wi cony b dzie osobny rozdziaª. Oto niektóre z technik wczytywania danych. 3.3.1 Pliki ASCII J zyk IDL obsªuguje dwa typy danych ASCII. Jest to typ tak zwanego wolnego formatu, gdzie poszczególne elementy w pliku oddzielone s przecinkami, znakami spacji lub znakami tabulacji oraz typ wyra¹ny, gdzie elementy w pliku oddzielone s innym znakiem wybranym przez uzytkownika. Istnieje kilka sposobów czytania takich danych. Pierwszym z nich jest u»ycie procedury READF, której wywoªanie wymaga wpierw u»ycia jednej z procedur otwarcia pliku, do odczytu OPENR, do zapisu OPERNW lub do dopisywania OPENU. Niestety, aby poprawnie wczyta dane musimy tutaj zna ilo± elementów w ka»dej z linii. Oto przykªad otwarcia pliku, wczytania i wy±wietlenia danych w nim zapisanych: openr, plik, 'dane.txt',/get_lun WHILE ~ EOF(plik) DO BEGIN READF, plik, var1, var2, var3,var4, var5 print, var1, var2, var3, var4, var5 ENDWHILE close,plik 1.25000 2.33000 3.89000 4.44000 5.67000 6.24000 7.67000 8.55000 9.34000 2.11000

3.3 Odczyt danych 32 Opisana metoda sprawdza si, jednak przy wiekszych zbiorach danych, gdzie wystepuje wiele kolumn mo»e okaza si uci»liwa. Matoda czytania danych ASCII przy pomocy funkcji READ_ASCII z wcze±niejszym okresleniem formatu danych w trakcie wywoªania funkcji ASCII_TEMPLATE w istotny sposob niweluje niedogodno±ci opisawenego wcze±niej sposobu czytania danych. Pierwszym krokiem jest wpisanie kodu: format_pliku=ascii_template() Po wpisaniu tej komendy zaczyna si proces formatowania zbioru danych, wy±wietlone zostaje pierwsze okno dialogowe. Rysunek 2: Okre±lenie formatu pliku - metoda ASCII_TEMPLATE Wybieramy opcje Delimited, poniewa» kolumny naszego pliku rozdzielone s przecinkami lub spacjami lub znakami tabulacji. Wprowadzamy znak ±rednika jako opcjonalny znak pocz tku komentarza, automatycznie nasz plik zaczyna si w pierwszym wierszu nie b d cym komentarzem. W naszym przypadku jest to wiersz pierwszy. Po kliknieciu przycisku Next pojawia si nast pne okno, w którym wpisujemy liczb elementow w jednej linii, znak rozdzielaj cy oraz warto±, któr program przyjmie za domy±ln w przy-

3.3 Odczyt danych 33 padku braku danej warto±ci w pliku. Domy±lnie jest to staªa IEEE NaN. 2. Oto drugie okno dialogowe: Rysunek 3: Okre±lenie formatu pliku - metoda ASCII_TEMPLATE W ostatnim oknie dialogowym mamy mo»liwo± nadania odpowiednim kolumnom nazw. Istnieje równie» opcja, dzi ki której mo»emy przyporz dkowa typ danych odpowiednim kolumnom. Typ danych w danej kolumnie jest automatycznie dostosowywany do typu danej kolumny w naszym pliku. Istnieje mo»liwo± omini cia krokow zwi zanych z okre±laniem formatu wczytywanego pliku. Wówczas procedu wczytania pliku stanowi wywoªanie procedury READ_ASCII. Krótszy sposób nie daje nam gwarancji wªasciwego wczytania danych. Warto wi c po±wi ci kilka chwil gracznemu interfejsowi u»ytkowniaka metody ASCII_TEMPLATE. Zobaczmy ostatnie okno dialogowe tej metody oraz wyniki funkcji READ_ASCII: 2Not A Number - rezultat niedozwolonych operacji takich jak dzielenie przez zero, logarytm z liczby ujemnej, w przypadku zbiorow danych oznacza brakujace elementy, wzgledem denicji danego zbioru

3.3 Odczyt danych 34 Rysunek 4: Okre±lenie formatu pliku - metoda ASCII_TEMPLATE Okre±lili±my format pliku. Wczytajmy dane wywoªuj c funkcj READ_ASCII. Wyniki wy±wietlamy w standardowy sposób: dane_ascii= read_ascii(filepath('dane.txt'),template=format_pliku) print,dane_ascii {1.25000 2.33000 3.89000 4.44000 5.67000 6.24000 7.67000 8.55000 9.34000 2.11000} 3.3.2 Pliki binarne Poznali±my sposób wczytywania plików tekstowych. Bardziej wydajnym i kompaktowym sposobem przechowywania danych jest eksportowanie danych do plikow binarnych. Dane takie s przechowywane jako strumienie bajtów. Pliki binarne s niezb dne przy przechowywaniu du»ych zbiorów danych, równie» plików gracznych. Tak jak w przypadku plików tekstowych j zyk IDL oferuje nam mo»liwo± ustawienia formatu zbioru danych poprzez graczny interfejs funkcji BINARY_TEMPLATE(). Oto przykªad jej wywolania: format_pliku=binary_template() dane_bin=read_binary(filepath('plik.dat'),template=format_pliku)

3.3 Odczyt danych 35 Dwa okna dialogowe przeprowadzaj nas przez proces alalogicznie jak w przypaku plików ASCII, poªaczenie z funkcj READ_BINARY() skutkuje otrzymaniem gotowego zbioru danych do wy±wietlenia. Tablica 8: Staªe liczbowe i napisowe równowa»ne typom danych j zyka IDL Staªa liczbowa Staªa napisowa Typ 0 UNDEFINED Undened 1 BYTE Byte 2 INT Integer 3 LONG Longword 4 FLOAT Floating 5 DOUBLE Double-precision 6 COMPLEX Complex oating 7 STRING String 8 STRUCT Structure 9 DCOMPLEX Double-prec. complex 10 POINTER Pointer 11 OBJREF Object reference 12 UINT Unsigned Integer 13 ULONG Unsigned Longword Integer 14 LONG64 64-bit Integer 15 ULONG64 Unsigned 64-bit Integer W przypadku plików binarnych opcja wywoªania funkcji READ_BINARY() z pomini ciem BINARY_TEMPLATE() jest o wiele bezpieczniejsza, gdy» opcje ustawiane przez u»ytkownika za pomoc GUI 3 mo»na z powodzeniem ustawi jako argumenty funkcji READ_BINARY().Zamiast nazw typów mo»emy u»y w wywoªaniu funkcji READ_BINARY() predeniowanych staªych (Tabela 8). Niemniej jednak w jednym jak i wdrugim przypadku musimy zna struktur danych aby nasze parametry w wiarygodny sposób odzwierciedlaly dane w pliku. Pliki binarne stanowi wr cz ogromne zbiory danych. Mo»emy jednak posªu»y si maªym plikiem lub cz ±ci du»ego dla pokazania tej techniki. IDL>dane_binarne=read_binary(FILEPATH('plik.dat'),data_start=0,$ IDL>data_type=INT,data_dims=[3,3],endian='little') IDL>print,dane_binarne 3ang.Graphical User Interface - graczny interfejs u»ytkownika

3.3 Odczyt danych 36 83 82 0 0 0 0 0 0 4 W naszym przypadku dane byªy typu integer, ich wczytywanie zacz lismy od pocz tku pliku, a wczytany obszar zawieraª tablic dwuwymiarowa o trzech wierszach i trzech kolumnach. Warto± parametru endian stanowi o sposobie wczytywania bajtów do pami ci. Zarówno dla architektury procesorów Intel jak i AMD w systemach Windows i Linux warto± ta powinna by ustawiona jako 'little'. Inne architektury np.: Motorola PowerPC dla systemu Macintosh OS X oraz Sun SPARC dla systemu Solaris wymagaj parametru 'big'. 3.3.3 Pliki graczne Chocia» pliki graczne s cz sto równowa»ne plikom binarnym to jednak techniki wczytywania plików gracznych ze wzgl du na ich specyk zostaªy oddzielone od technik wczytywania i wy±wietlania plików binarnych. W przypadku plików binarnych otrzymujemy jako wynik zestaw liczb, a w plikach gracznych z danych liczbowych powstaje obraz. Obraz jest dwu lub kilkuwymiarow tablic warto±ci liczbowych z zakresu 0-255. Do przechowywania obrazów bardzo dobrze nadaje si typ BYTE. W przypadku obrazów monochromatycznych tablica jest dwuwymiarowa, natomiast w przypadku obrazów wielobarwnych najcz ±ciej trójwymiarowa. Wi kszo± kolorowych obrazów posiada trójkanaªow struktur barw typu RGB 4. Ka»dy kanaª to jakby obraz monochromatyczny. Do piero ich zªo»enie daje efekt wielobarwno±ci. Jedynym problemem jest poprawne wy±wietlenie koloru. Dlatego ka»dy z obslugiwanych formatów gracznych otrzymaª osobn funkcj wy±wietlaj c. Do poprawnego wczytania pliku gracznego niezb dne jest znanie jego rozszerzenia. Analogicznie do funkcji wczytuj cych pliki graczne istniej funkcje tworz ce grak. Tak np.: dla formatu bmp jest to funkcja WRITE_BMP, dla plików PNG funkcja WRITE_PNG.Przyj»yjmy si metodom wczytywania i wy±wietlania plików gracznych, a tak»e technikom wspieraj cym wczytywanie plików gracznych. 4model przestrzeni barw,zawdzi czaj cy sw nazw pierwszym literom barw skªadowych: Red Green Blue. Pierwotnie stosowany w technikach analogowych z powodzeniem mo»e by stosowany w technikach cyfrowych.

3.3 Odczyt danych 37 Tablica 9: Funkcje wczytuj ce pliki graczne Typ plku Nazwa funkcji.bmp READ_BMP.gif READ_GIF.jpeg,.jpg READ_JPEG.png READ_PNG.ppm,.pbm READ_PPM.ti,.tif READ_TIFF obrazek_png=read_png('mars.png',r,g,b) tvlct,r,g,b tv,obrazek_png Rysunek 5: Wynik wspóªdzialania funkcji read_png, tvlct i tv Bez u»ycia procedury TVLCT Load Color Table obrazek zostanie pozbawiony barw i wy±wietlony jako obrazek monochromatyczny. Na szcz ±cie wiemy ju» jak temu zapobiec. Alternatywa dla procedury TV jest procedura TVSCL. TVSCL skaluje warto±ci obrazka tak aby przebiegaªy one przez caªy mo»liwy zakres, czyli rozkªadaªy si równomiernie pomiedzy wartosciami 0-255. Nie zawsze stosowanie takiego skalowania jest nam potrzebne. Pami tajmy,»e takie skalowanie mo»e znieksztaªci pewne typy obrazów.

3.3 Odczyt danych 38 Cz sto spotykamy si z problemem zbyt maªego lub zbyt du»ego okna, w którym wy±wietlana jest graka. Za cechy takie jak tytuª, wysoko± i szeroko± okna, ilo± okien,a tak»e miejsce na ekranie dzi ki parametrom XPOS i YPOS, które to odpowiednio okre±laj odst p od górnego lewego rogu ekranu postepuj cy w prawo i odstep od górnego lewego rogu ekranu postepuj cy w dóª odpowiada procedura WINDOW. Istone jest,»e ustawienia pewnych parametrów ró»ni si dziaªaniem w ró»nych systemach operacyjnych. Najlepiej otworzy stron pomocy j zyka IDL dotycz ce tej procedury poleceniem: IDL>? window Oto przykªad u»ycia tej procedury ustawiaj cej szeroko± i wysoko± okna, tytuª oraz wy±rodkowywuj ce to okno przy rozdzielczo±ci 1024 na 768 pikseli i przy wprowadzonych wymiarach okna: WINDOW,title='Moj wykres',xsize=480,ysize=480,xpos=272,ypos=144

4 Dwuwymiarowe rysunki i wykresy 39 4 Dwuwymiarowe rysunki i wykresy Rysunki i wykresy s podstawowym sposobem wizualizacji danych. Cz sto jeden rysunek, czy wykres mo»e zobrazowa proces, którego opisanie zaj ªoby wiele miejsca i czasu. Przyj»yjmy si metodom tworzenia dwuwymiarowych rysunków i wykresów. 4.1 Procedura PLOT Proste rysunki czy wykresy tworzymy za pomoc procedury PLOT. Ka»- dorazowe wywoªanie tej procedury ustanawia kilka elementów,s to: okno rysowania danego rysunku ograniczony przez osie ukªadu wspóªrz dnych, obszar rysunku, stanowi cy okno rysunku wraz z jego otoczeniem, typy osi oraz rodzaj skalowania. Oto przykªad u»ycia tej funkcji: x=findgen(100)*(4*!pi/100) ;utworzenie zbioru danych z zakresu 0-4π plot, sin(x) Rysunek 6: Wykres funkcji sinus-metoda plot W przypadku kiedy chcemy wizualizowa pewien zbiór danych, domy±lnie o± Y numerowana jest od 0. W wielu przypadkach chcemy aby o± Y przyjmowaªa inne wartosci. Temu sªu»y sªowo kluczowe /YNOZERO, które dostosowuje warto±ci osi Y do wy±wietlanych na niej danych. Oto przykªad:

4.1 Procedura PLOT 40 IDL>populacja=[463,459,437,433,431,433,431,428,430] IDL>lata=[1965,1970,1975,1980,1985,1990,1995,2000] IDL>PLOT,lata,populacja,/ynozero,title='Populacja',$ IDL>xtitle='lata',ytitle='tys.' Rysunek 7: Metoda plot-zmiana skali osi Y Procedura PLOT jest podstawowym narz dziem wizualizacji danych. Jej szereg rozbudowanych opcji pozwala przedstawia wyniki na ró»ne sposoby. Opis jej jest dostepny po wpisaniu komendy: IDL>? plot Sprobujmy wyswietli dane z poprzedniego przykªadu w troch inny sposób modykuj c i dodaj c nowe opcje procedury PLOT. PLOT,lata,populacja,THICK=2,XTICKS=8,YTICKS=8,TICKLEN=1.0, /ynozero,title='populacja',xtitle='lata',ytitle='tys.' Dodaj c kilka opcji stworzyli±my caªkiem nowe okno z wynikami. U»ytkownik dysponuj c szerokim wachlarzem tych opcji mo»e w znaczacy sposób wpªywa na zwi kszenie atrakcyjno±ci i czytelno±ci tworzonych wykresów. Spój»my na wyniki.

4.1 Procedura PLOT 41 Rysunek 8: Mo»liwosci procedury plot Procedura PLOT mo»e by równie» u»yta w celu wy±wietlenia kilku wykresów obok siebie. W takim wypadku nale»y odpowiednio zainicjowa zmienn systemow!p.multi, b dac tablic kontrolujac rozmieszczenie wykresów. Pamietaj c,»e pierwszy element tej tablicy okre±la liczb oczekuj cych na wy±wietlenie wykresów, drugi element okre±la liczb kolumn, a trzeci liczb wierszy okien rysowania, tworzymy pokaz wykresów.!p.multi = [0,1,2,0,0] ;jedna kolumna, dwa wiersze x=findgen(100)*(4*!pi/100) wykres1=sin(x) wykres2=cos(x) plot,wykres1,title='sinus',psym=1 plot,wykres2,title='cosinus',psym=3 Stworzyli±my pokaz dwóch wykresów w jednym oknie. Do dobrego tonu nale»y przywrócenie domy±lnej warto±ci zmiennej!p.multi tak aby w jednym oknie wyswietlany byª jeden wykres. Czynimy to poleceniem: IDL>!P.MULTI=0

4.2 Procedura OPLOT 42 Rysunek 9: Multi-pokaz wykresow Poprzednie wywoªanie procedury PLOT zawieraªo sªowo kluczowe PSYM. Przyjmuj c warto±ci od 0 do 5 steruje ono sposobem wy±wietlania punktów wykresu, mog ce przyjmowac np.: symbol gwiazdek, czy krzy»yków. Odmienne sposoby rysowania b d nam pomocne przy rysowaniu kilku wykresów w jednym oknie rysowania. 4.2 Procedura OPLOT Dzi ki umieszczaniu kilku okien rysowania w jednym oknie gracznym mamy mo»liwo± porównywania danych, je±li s ze sob powi zane. Mo»liwo± ta jest jednak ograniczona. Dzi ki procedurze OPLOT, która nadrysowywuje wcze±niejsze wykresy zachowuj c przy tym skale jednostek, porównanie ze sob danych w postaci wykresów jest w znacz cy sposob uªatwione. x=findgen(100) x=findgen(100)*(4*!pi/100) plot,sin(x) oplot,sin(x-!pi),linestyle=1,thick=2 oplot,sin(x/2),linestyle=2,thick=2

4.2 Procedura OPLOT 43 Rysunek 10: Metoda oplot Tak jak w metodzie PLOT za rodzaj linii odpowiadaªo sªowo kluczowe PSYM, tak w opisywanej funkcj t peªni sªowo LINESTYLE. Liczba opcji wynosi tak jak w poprzednim przypadku 6. Procedura OPLOT umo»liwiªa nam porównywanie kilku wykresów danych. Nie daje nam jednak mo»liwosci dowiedzenia si o skªadowych wykresu. W przypadku funkcji trygonometrycznych problem nie jest tak wielki, wystarczaj ce mog by tutaj tytuª wykresu i opis osi, ale ju» w przypadku wykresów ekonomicznych musimy mie mo»liwo± opisania ka»dego wykresu z osobna. Tak mozliwo± daje nam procedura XYOUTS. Procedura ta daje w wyniku tekst, umieszczaj c go w oknie wykresu. Wspoªrz dne startowe x i y okre±la pierwszy i drugi parametr funkcji, natomiast trzeci parametr odpowiada za tre±. Oto przykªad omawianego rozwi zania: firma1=[440,449,437,433,431,433,431,428,430,431] firma2=[328,361,331,320,367,395,423,380,388,390] firma3=[314,329,365,387,407,414,433,431,442,443] lata=[1980,1982,1984,1986,1988,1990,1992,1994,1996] dane_zakres=[[firma1],[firma2],[firma3]] plot,lata,firma1,/ynozero,yrange=[min(dane_zakres),$ max(dane_zakres)],ytitle='tys.pln',xtitle='lata',thick=2

4.2 Procedura OPLOT 44 oplot,lata,firma2,linestyle=1,thick=2 oplot,lata,firma3,linestyle=4,thick=2 Ustalili±my zakres dla osi Y wybieraj c najmniejsz i najwieksz warto±± spo±ród zysków trzech rm. Dwukrotnie wywoªana procedura OPLOT dorysuje kolejne wykresy do ju» istniej cego wykresu powstaªego w wyniku wywoªania procedury PLOT. Spój»my teraz na kod odpowiedzialny za tworzenie podpiu wykresu: nazwy=['zysk firmy1','zysk firmy2','zysk firmy3'] n=n_elements(lata)-1 FOR i=0,2 DO BEGIN XYOUTS,1995,dane_zakres[n,i],nazwy[i] ENDFOR W p tli wykonujemy procedur XYPOS dla ka»dego wykresu tak aby podpis wy±wietlony zostaª w miejscu po ostatniej danej uwzgl dnionej w wykresie, czyli po roku 1995 (o± x) i ostatniej danej z tablicy rmai (o± y). Spój»my na wyniki wpisanego kodu: Rysunek 11: Metoda oplot

4.3 Metoda LIVE_PLOT 45 4.3 Metoda LIVE_PLOT Procedura LIVE_PLOT ª czy w sobie cechy opisywanych ju» procedur PLOT i OPLOT. Ró»ni si jednak od nich tym,»e tworzy interaktywne ±rodowisko rysowania. Po dwukrotnym klikni ciu na dany element wykresu pojawia si okno dialogowe w którym mo»emy zmienia opcje i wªa±ciwo±ci jego dotycz ce. Co wi cej dysponujemy siedmioma przyciskami pozwalaj cymi na wstawianie linii, pól tekstowych, prostokatów, drukowanie okna oraz na cofanie wprowadzonych zmian. Istotne jest to,»e parametry wykresu mog by ustalane podczas wywoªania procedury, a nast pnie zmieniane lub mody- kowane po utworzeniu okna programu. live_plot,firma1,firma2,firma3,title='porownanie zyskow' Rysunek 12: Metoda live_plot

5 Obróbka sygnaªu 46 5 Obróbka sygnaªu Pliki d¹wi kowe s zapisem sygnaªu, który bardzo cz sto potra by doskonaªym ¹ródªem danych. Wiele danych medycznych uzyskuje si poprzez analiz plików d¹wi kowych. Odpowiednio dobrane techniki wy±wietlania i analizowania tych plików umo»liwiaj w wielu przypadkach postawienie dobrej diagnozy. Dzieje si tak np.: w przypadku zaburze«mowy, czy chorób serca (badania EKG). Nie mo»na jednak ª czy tej dziedziny jedynie z medycyn. Analiza sygnaªu to wa»ny element pracy sejsmologów i astronomów. Badanie takich ¹ródeª danych to bardzo szerokie zagadnienie wielu dziedzin nauki. 5.1 Tworzenie danych J zyk IDL dysponuje wyspecjalizowanymi narz dziami do obróbki sygnaªu. Umieszczone s one w pakiecie o nazwie IDL Wavelet Toolkit. Pakiet ten uruchamiamy poleceniem: IDL>wv_applet Umo»liwia on wy±wietlanie informacji o zbiorze danych, importowanie plików d¹wi kowych, binarnych lub tekstowych, wy±wietlanie danych w wielu wymiarach. Wszystkie interesuj ce interfejsy graczne tego pakietu wymagaj wykupienia licencji. Posªu»ymy si sztucznie utworzonym sygnalem. oryginalny=sin(findgen(100)/5)*exp((-1)*(findgen(100)/30)) Rysunek 13: Wygenerowany sygnaª

5.1 Tworzenie danych 47 Oto wynik naszego kodu. Powstaªy sygnaª wymaga jeszcze kilku operacji, dzi ki którym b dzie wierniej odtwarzaª sygnaª rzeczywisty. Dodajmy teraz do oryginalnego sygnaªu drugi imituj cy szum. Tworzymy go przy pomocy funkcji RANDOMU generuj cej rzeczywiste liczby pseudolosowe. IDL>zaszumiony=oryginalny+((randomu(2l, 100)-0.5)/5) Wygenerowane warto±ci imituj szybko zmieniaj ce si w czasie poszczególne warto±ci badanego sygnaªu. Oto sygnaª zaszumiony. Rysunek 14: Wygenerowany sygnaª zaszumiony Wykorzystuj c procedur PLOT oraz OPLOT porównamy, nakªadaj c na siebie sygnaª oryginalny i sygnaª szumu. IDL>plot,oryginalny,xtitle = "Czas",ytitle ="Sygnal",thick=2.0 IDL>oplot,zaszumiony Uzyskali±my sygnal, b d cy podstaw naszej dalszej analizy. Ci gle jednak nie stanowi on jednego zbioru danych. Wy±wietlenie sygnaªu oryginalnego i zaszumionego w jednym oknie wykresu stanowi pocz tek drogi do zªo»enia tych dwóch funkcji w jedn caªo±. Przyj»yjmy si wynikom procedur.

5.2 Wygªadzanie sygnaªu metod SMOOTH 48 Rysunek 15: Porównanie sygnaªu oryginalnego z zaszumionym 5.2 Wygªadzanie sygnaªu metod SMOOTH Funkcja SMOTH korzystaj c z wbudowanego u±redniaj cego ltra wygªadza elementy wej±ciowej tablicy. Dodatkowym atutem tej funkcji jest to,»e nie zmienia ona zakresu danych. W naszym przypadku analizujemy dane imituj ce sygnal. Funkcja ta mo»e otrzyma na wejsciu dowoln tablic, b d c np.: fragmentem wczytanego obrazu gracznego. IDL>wygladzony=smooth(zaszumiony,5) plot,wygladzony Otrzymalismy sygnaª, mog cy by przedmiotem analizy. Cz sto ju» samo odpowiednie odczytanie wykresu jest w stanie da odpowied¹ na wiele pytan. Odpowiednie ltrowanie i analiza próbek da mog jeszcze wi cej odpowiedzi ich badaczom. Otrzymany obraz jest dobr imitacj próbek sygnaªu rzeczywistego. 5.3 Filtracja sygnaªu Za pomoc odpowiednich technik ltracji mo»emy uzyska dane, które bez tych technik nigdy nie zostaªyby dostrze»one. W naszym wypadku b d to ltry dziaªaj ce w dziedzinie cz stotliwo±ci. Istota ltrów jest taka sama

5.3 Filtracja sygnaªu 49 Rysunek 16: Sygnaª wygªadzony metod Smooth równie» dla danych gracznych. Po wprowadzeniu maski warto±ci danego ltra dziaªamy nim na warto±ciach danego sygnalu, uzyskuj c nowe warto±ci b d ce pewn pochodn warto±ci sygnaªu i maski ltra. y=[findgen(50),findgen(50)-50] y[51:99]=reverse(y[0:48]) Utworzylismy tablic 100 elementow liczb rzeczywistych stosuj c funkcj FINDGEN. Nas pnie pierwszych 49 elementów w odwróconej kolejno±ci przekopiujemy na miejsce ostatnich 49 elementow. Bazuj c na stworzonej tablicy tworzymy ltr (Rys.17). filtr=1.0/(1+(y/15)^8) plot,filtr Utworzony ltr staje si podstaw do tworzenia kolejnych. Aby uzyska ltr dolnoprzepustowy i zastosowa go na naszym sygnale nale»y wpisa kod: IDL>dolny=fft 5 (fft(zaszumiony,1)*filtr,-1) 5ang. Fast Fourier Transform, czyli szybka transformata Fouriera. Wykorzystuje ona pewne wªasno±ci symetrii funkcji trygonometrycznych w punktach ich obliczania, aby uzyska wi ksz szybko± oblicze«ni» w metodach konwencjonalnych. Je±li N oznacza liczb punktów w czasowej sekwencji sygnaªu, to w algorytmie konwencjonalnym trzeba

5.3 Filtracja sygnaªu 50 Rysunek 17: Wizualizacja utworzonego ltra IDL>plot,dolny Analogicznie do uzyskania ltru dolnoprzepustowego w dziedzinie cz stotliwo±ci wpisujemy ponizszy kod w celu uzyskania ltra górnoprzepustowego: IDL>gorny=fft(fft(zaszumiony,1)*(1.0-filtr),-1) IDL>plot,gorny Spój»my na wyniki dziaªania obydwu ltrów. Wejsciowym sygnaªem w obu przypadkach byª sygnaª zaszumiony. by wykona w przybli»eniu N 2 operacji, a w algorytmie FFT wystarcza ok. N ln N

5.3 Filtracja sygnaªu 51 Rysunek 18: Filtry- dziedzina cz stotliwo±ci

6 Obróbka plików gracznych 52 6 Obróbka plików gracznych J zyk IDL jest bardzo pomocny w obróbce plików gracznych. Faktem jest,»e jest zorientowany na szeroko rozumiane tablice. Obrazy mog by przechowywane jako wielowymiarowe tablice. Wiele procedur i funkcji jest specjalnie przystosowana do przetwarzania obazów i pracy z nimi. W poprzednim rozdziale dowiedzielismy si jak wczyta plik graczny. Teraz dowiemy si jak go modykowa i wydobywa z niego informacje. 6.1 Podstawowe operacje na obrazach W rozdziale o wczytywaniu danych poznalismy techniki wczytywania plików gracznych. Teraz posªu»ymy si jeszcze inn funkcj READ_IMAGE, która jest bardzo podobna do opisanych wcze±niej. Jest jednak bardziej uniwersalna, gdy» mo»na za jej pomoc wczytywa pliki graczne róznych typów. Posªu»ymy si ni w kodzie zmieniaj cym rozmiar pliku gracznego. plik=filepath('saturn.jpg',subdirectory=['examples','data']) READ_JPEG,plik,oryginal rozmiar_obrazu=size(oryginal,/dimensions) zmieniony=rebin(oryginal,3,550/2,410/2) WINDOW,0,XSIZE=rozmiar_obrazu[1]/2,YSIZ=rozmiar_obrazu[2]/2,$ TITLE='Planeta Saturn pomniejszenie' TV,zmieniony,TRUE=1 window,1,xsize=rozmiar_obrazur[1],ysiz=rozmiar_obrazu[2],$ TITLE='Planeta Saturn oryginal' TV,oryginal,TRUE=1 Wczytali±my plik graczny. Przy pomocy funkcji REBIN zmienilismy rozmiar tablicy, przechowyj cej dane pikseli. Nale»y pami ta,»e funkcja ta wymaga aby stosunek szeroko±ci obrazu do jego wysoko±ci byª zgodny z warto±ciami obrazu bazowego. Zauwa»yªem,»e pliki z rozszerzeniem.jpeg nie s prawidªowo rozpoznawane. Wywoªuj c funkcje READ_JPEG nale»y w nazwie pliku wpisywa rozszerzenie.jpg nawet je»eli posiadamy wyª cznie plik.jpeg. Poleceniem, które zamyka wszystkie otwarte, aktywne okna graczne jest: IDL>wdelete

6.1 Podstawowe operacje na obrazach 53 Rysunek 19: Skalowanie pliku gracznego Czasami potrzebne nam przekonwertowanie obrazu kolorowego na obraz monochromatyczny, czyli np.: posiadaj cy jedynie tak zwane odcienie szarosci. Oto kod rozwiazuj cy ten problem. plik=filepath('saturn.jpg',subdirectory=['examples','data']) READ_JPEG,plik,image saturn_mono=0.3*reform(image[0,*,*])+0.59*reform(image[1,*,*])+$ 0.11*Reform(image[0,*,*]) tv,saturn_mono J zyk IDL dysponuje wieloma szybkimi metodami obróbki obrazu. Wi kszo± jednak zostaªa dostosowana do obrazów monochromatycznych. W pewnych przypadkach istnieje mo»liwo± obej±cia tego problemu. Podczas analizy pliku gracznego mo»na rozªo»y go na cz ±ci, odpowiednio jedna skªadowa cz ± na jeden skªadowy kanaª obrazu i pracowa na ka»dym kanale osobno. Tak technike przedstawi podczas ltrowaniu obrazów. Je»eli nasz obraz bazowy nie jest monochromatyczny musimy posªuguj c si metod konwertowania pliku kolorowego do monochromatycznego przedstawiomej powy»ej, dokonac konwersji. W naszym przypadku b dzie to obraz medyczny przedstawiaj cy wyniki tomograi komputerowej ludzkiej gªowy.

6.1 Podstawowe operacje na obrazach 54 Oto kod wczytuj cy i wy±wie tlaj cy oryginalny obraz medyczny. Wy±wietlenie oryginalnego pliku pomo»e nam przy porównywaniu tego pliku z wynikami kodu manipuluj cego tym obrazem. plik=filepath('med_1.jpg',subdirectory=['examples','data']) READ_JPEG,plik,obraz wymiary_obrazu=size(obraz,/dimensions) WINDOW,0,XSIZE=wymiary_obrazu[0],YSIZ=wymiary_obrazu[1],$ title='oryginalny oraz medyczny' tv,obraz Rysunek 20: Oryginalny plik medyczny Przy posªugiwaniu si funkcj SIZE nalezy pami ta,»e w przypadku obrazów monochromatycznych zwraca ona dwa wyniki: szeroko± i wysoko±, a wi c wynikowa tablica ma dwa indeksy, odpowiednio 0 i 1. Podczas pracy z obrazami kolorowymi zwracane s trzy warto±ci: liczba kanaªów, szeroko± i wysoko±, a wynikowa tablica ma indeksy równe odpowiednio 0,1 i 2. Jednym z podstawowych sposobów manipulacji obrazem jest ustawienie progu dla wy±wietlania. Stosuje si w tej technice operatory relacji, a ich wynikiem jest tablica zer i jedynek. Wprowadzona warto± dzieli piksele na dwie grupy. Speªnianie lub niespeªnianie danej relacji stanowi o kolorze danego piksela. W przypadku speªniania relacji jest to kolor biaªy, w przypadku niespeªniania kolor czarny.

6.1 Podstawowe operacje na obrazach 55 Prawidªowe wyniki wy±wietlenia uzyskamy przy uzyciu procedury TVSCL. Posªu»my si operatorem GT i zobaczmy na wyniki poni»szego kodu. tvscl,obraz GT 125 Rysunek 21: U»ycie progu zwiekszajacego kontrast Kolejn prost i szybk technik obróbki obrazu jest zastosowanie operatorów relacji w postaci znakowej takich jak >,<,>=,<=. Nale»y pamieta,»e operatory te nie s równowa»ne z operatorami w postaci napisowej. I tak na przyklad wynik u»ycia operatora GT nie pokrywa sie z wynikiem u»ycia operatora >. Tak b dzie równiez w tym przypadku. Wpiszmy polecenie: tvscl,obraz>125<200 Dzi ki u»yciu dwoch operatorów moglismy ustawi minimalna warto± jasno±ci oraz maksymalna warto± jaka b dzie nas interesowaªa. W tym przypadku wynikiem nie b dzie obraz czarnych i biaªych pikseli. Wy±wietlone zostan tylko te warto±ci, które b da speªniaªy warunek relacji, a wi c ich warto±ci zawieraªy b d si pomi dzy 126 a 199. Mo»liwe jest zastosowanie jednego operatora. Przyj»yjmy si wynikom wprowadzonego kodu.

6.2 Histogram obrazu 56 Rysunek 22: Wy±wietlenie przedziaªu jasno±ci 6.2 Histogram obrazu Histogramem obrazu nazywamy wykres graczny, przedstawiaj cy rozkªad jasno±ci danego obrazu. Ka»da warto± danego piksela zostaje wpisana do tablicy, tym samym zwi ksza liczebno± zbioru jasno±ci o danej warto±ci. Po analizie histogramu mo»na dowiedzie si czy obraz zostaª na±wietlony lub czy zawiera w ski przedziaª barw w przypadku obrazów kolorowych. W wielu j zykach programowania rysowanie histogramu wymaga kilkunastu linii kodu. Nam zajmie to co najwy»ej kilka. file=filepath('saturn.jpg',subdirectory=['examples','data']) READ_JPEG,file,obraz wymiary_obrazu=size(obraz,/dimensions) nowy=rebin(obraz,3,550/2,410/2) DEVICE,RETAIN=2,DECOMPOSED=0 WINDOW,0,XSIZE=wymiary_obrazu[1]-30,YSIZE=wymiary_obrazu[2]-30,$ title='histogram' TV,nowy,TRUE=1 PLOT,HISTOGRAM(obraz),COLOR=155,MAX_VALUE=4000,$ POSITION=[0.55, 0.15, 0.95, 0.95],/NOERASE,/NODATA OPLOT,HISTOGRAM(obraz),COLOR=155 Spój»my na wyniki. Histogram zostaª umieszczony w prawej cz ±ci okna. O± X odpowiada jasno±ci, natomiast o± Y odpowiada za liczb punktów.

6.3 Filtrowanie obrazu 57 Rysunek 23: Przykªadowy histogram obrazu Przyj»yjmy sie naszemu histogramowi. W ªatwy sposob mozna wyczyta,»e najwi ksza ilo± punktów oscyluje blisko warto±ci 0. Natomiast znikoma ilo± ma warto± zbli»on do 255. Wniosek z czytania histogramu jest taki,»e obraz posiada wiele pikseli czarnych lub zbli»onych do tego koloru a niewiele pikseli jasnych. Potwierdzili±my zatem budow naszego zdj cia. 6.3 Filtrowanie obrazu Przy ltrowaniu obrazów mo»na zastosowa wi kszo± technik jakie stosowali±my przy ltrowaniu sygnaªu. Jedynie zakres i metody wy±wietlania danych s odmienne. Nie mniej jednak ltrowanie obrazów jest nieco szersz dziedzin j zyka IDL. 6.3.1 Obrazy monochromatyczne Do pokazania technik ltrowania obrazów u»yjemy nowego pliku gracznego. Pierwszym krokiem b dzie zbudowanie ltra, nast pnie u»yjemy go na obrazie i wy±wietlimy wyniki. Wy±wietlam obraz oryginalny aby uªatwi analizowanie naszej pracy.

6.3 Filtrowanie obrazu 58 Rysunek 24: Obraz oryginalny monochromatyczny file=filepath('owoce_mono.jpg',subdirectory=['examples','data']) READ_JPEG,file,obraz_we DEVICE,RETAIN=2,DECOMPOSED=0 wymiary_obrazu=size(obraz_we,/dimensions) obraz_wy=rebin(obraz_we,wymiary_obrazu[0]/2,wymiary_obrazu[1]/2) WINDOW,0,XSIZE=wymiary_obrazu[0]/2,YSIZ=wymiary_obrazu[1]/2,$ title='filtrowanie obrazu' filtr=replicate(-1, 3, 3) filtr[1,1]=8 obraz_wy=convol(obraz_wy,filtr,center=1) tv,obraz_wy Stworzyli±my wªasny ltr. Jednak budowa jego nie byªa przypadkowa. Jest to przykªad ltra La Place'a. Zastosowanie tego ltra jest jednym ze sposobów wykrywania kraw dzi w obrazie. J zyk IDL dysponuje równie» wbudowanym zestawem ltrów. W±ród nich mamy takie rodzaje ltrów: ltr wygªadzaj cy (SMOOTH), ltr Sobela (SO- BEL), ltr u±redniaj cy (MEDIAN) i wiele innych, o których dowiemy sie wi cej wpisuj c w linii polece«zapytanie: IDL>? filters

6.3 Filtrowanie obrazu 59 Rysunek 25: Filtr-wykrywanie kraw dzi Wªasne deniowanie ltrów jest na pewno bardziej czasochªonne. Mo»emy jednak dokonywa dowolnej modykacji ltrów i odkrywa ich mo»liwo±ci. Zastosowanie ltra wbudowanego sprowadza si do zastosowania jednej linii kodu. Oto przykªad. tv,median(obraz_wy,9) Rysunek 26: Filtr u±redniaj cy

6.3 Filtrowanie obrazu 60 6.3.2 Obrazy kolorowe Przetwarzanie obrazów w j zyku IDL jest zorientowane na obrazy monochromatyczne. Wiele dziedzin nauki jeszcze kilka lat temu pracowaªo wyª cznie na takich obrazach. Post p w nauce i technice na pewno b dzie przekªadaª si na zmodykowanie kodu wielu funkcji i procedur zajmujacych sie obróbk obrazu. W tym podrozdziale przedstawiam metod lrtujac obrazy kolorowe z zastosowaniem technik dziaªajacych na obrazach monochromatycznych. file=filepath('owocergb.jpg',subdirectory=['examples','data']) READ_JPEG,file,obraz_we filtr=9 kanalr=reform(obraz_we[0,*,*]) kanalg=reform(obraz_we[1,*,*]) kanalb=reform(obraz_we[2,*,*]) wynik1=median(kanalr,filtr) wynik2=median(kanalg,filtr) wynik3=median(kanalb,filtr) obraz_we[0,*,*]=wynik1 obraz_we[1,*,*]=wynik2 obraz_we[2,*,*]=wynik3 tv,obraz_we,true=1 Rysunek 27: Filtr u±redniaj cy Przedstawiona metoda jest baz dla zastosowania innych ltrów zarówno wbudowanych jak i tworzonych przez u»ytkownika.

7 Trójwymiarowe techniki wizualizacji 61 7 Trójwymiarowe techniki wizualizacji Wizualizacja trójwymiarowa w j zyku IDL mo»e odbywa si na kilka ró»nych sposobów. Wszystkie techniki charakteryzuja si tym,»e ich opanowanie jest ªatwe dla u»ytkownika. W efekcie dostajemy trójwymiarowy wykres naszego zbioru danych. Mo»liwo± porównania kilku technik ze sob jest dodatkowym atutem wizualizacji danyh w j zyku IDL. 7.1 Metoda SURFACE Metoda SURFACE umo»liwia nam wy±wietlenie trójwymiarowego wykresu zbioru danych. Okno wynikowe skªada si z wykresu umieszczonego wewn trz trójosiowego ukªadu wspóªrz dnych. dane=shift(dist(40),20,20) dane=exp(-(dane/10)^2) SURFACE,dane,TITLE='Matoda surface',charsize = 2 Rysunek 28: Metoda SURFACE Procedura SURFACE posiada szereg opcji umo»liwiaj cych modykacj wykresu. Jednymi z nich s opcje AX i AZ, odpowiadaj ce za wy±wietlenia wykresu pod ró»nymi k tami. AX jest odpowiedzialne za obrót wokóª osi X, a AZ za obrót wokóª osi Z.

7.2 Metoda SHADE_SURF 62 Wprowad¹my modykacj do wykresu, ustalaj c parametry AX i AZ poleceniem: SURFACE,dane,AX=50,AZ=25,TITLE='Matoda surface',charsize=2 Rysunek 29: Metoda SURFACE 7.2 Metoda SHADE_SURF Procedura SHADE_SURF jest zmodykowan wersj opisanej powy»ej metody SURF. Jej wyj tkowo± polega na tym,»e umo»liwia cieniowanie wykresu równiez za pomoc okre±lonej przez u»ytkownika palety barw. Palet t okre±lamy w parametrze procedury LOADCT. Oto przykªad zastosowania naszej metody do danych z poprzedniego przykªadu. loadct,, shade_surf,dane surface,dane,xstyle=4,ystyle=4,zstyle=4,/noerase Posªu»yli±my sie tu równie» metod SURFACE. Wynikiem czego jest uzyskanie na wykresie siatki dla danych.

7.3 Metoda SHOW3 63 Rysunek 30: Metoda SHADE SURF Rodzaj wczytanej tablicy kolorów wy±wietlany zostaje w czasie kompilacji w panelu projektu. W naszym przypadku jest to: LOADCT: Loading table RED TEMPERATURE 7.3 Metoda SHOW3 Metoda SHOW3 jest syntez kilku metod. W jej skªad wchodz metoda SUR- FACE opisana w poprzednim rozdziale oraz metoda CONTOUR odpowiadaj ca za dwuwymiarowy rzut na pªaszczyzn zbioru danych. Caªo± jest jednym z bardziej szczegóªowych sposobów wizualizacji danych. Co wi cej jest to doskonaªy przykªad przygotowania zbioru danych do analizy. W poprzednich przykªadach sami tworzyli±my zbiory danych do prezentacji poznawanych metod. W tym przypadku, aby lepiej zaprezentowac mo»liwo±ci metody SHOW3 wczytamy zbiór danych z pliku binarnego i zaprezentujemy dane w nim zgromadzone. loadct,3 plik=filepath('moje_dane.dat',subdirectory=['examples','data']) dane=read_binary(plik,data_dims=[500,500],data_type=2)

7.4 Metoda XINTERANIMATE 64 dane=congrid(dane,50,50) SHOW3,dane Rysunek 31: Metoda SHOW3 7.4 Metoda XINTERANIMATE Procedura XINTERANIMATE pozwala na wy±wietlanie sekwencji obrazów. Chocia» zagadnienie trójwymiarowej animacji mo»e wydawa si skomplikowane to zasada jej jest prosta. Podstaw ka»dego wykresu s dane. W przypadku animacji powinnismy mie kilka zbiorów danych, ukazuj - cych pewne zjawisko zmieniaj ce si w czasie. Dobrym przykªadem danych do animacji s tablice trójwymiarowe. Ka»da posiada wªasny numer oraz dwuwymiarow tablic danych. Opcje animacji jaka powstaje mog by zmieniane przez u»ytkownika z wykorzystaniem interfejsu tej metody. Metoda XINTERANIMATE tworzy bufor, wystarczaj cy do przechowywania okre±lonej liczby klatek animacji. Do naszych celów posªu»ymy si plikiem binarnym, przechowuj cym medyczne dane rytmu ludzkiego serca. Oto kompletny przykªad tej metody:

7.4 Metoda XINTERANIMATE 65 OPENR,plik_bin,FILEPATH('abnorm.dat',SUBDIR=$ ['examples','data']),/get_lun anim_med=bytarr(64,64,16) READU,plik_bin,anim_med loadct,3 DEVICE,RETAIN=2,DECOMPOSED=0 anim_med=rebin(anim_med,128,128,16) XINTERANIMATE,SET=[128,128,16],/SHOWLOAD FOR i=0,15 DO BEGIN XINTERANIMATE,FRAME=i,IMAGE=anim_med[*,*,i] ENDFOR XINTERANIMATE, /KEEP_PIXMAPS Nasz plik wej±ciowy przechowuje 16 tablic dwuwymiarowych. Jego struktura jest zatem idealna do zastosowania naszej metody. Po przygotowaniu zbioru danych nale»y trzykrotnie wywoªa procedur XINTERANIMATE. Pierwsze wywoªanie sªu»y inicjacji panelu animacji, drugie wywoªanie odpowiada za wczytanie klatek animacji do bufora natomiast trzecie obsªuguje wy±wietlenie animowanego pokazu. Rysunek 32: Animacja metod XINTERANIMATE