Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
VisNow – struktury danych
Krzysztof S. Nowiński
2
Wizualizacja danych a wizualizacja informacji Dane:
Struktura zadana a priori Geometria zwykle w przestrzeni fizykalnej Wartości głównie liczbowe Informacja Strukturę dopiero tworzymy Geometria dopiero do ustalenia Wartości często tekstowe lub obiektowe
3
Dane – geometria i struktura
Współrzędne punktów w przestrzeni n-wymiarowej (n=1,2,3,4,...) Zadane w sposób naturalny lub obliczone ne podstawie struktury czy wartości Podane explicite lub łatwe do wyliczenia w miarę potrzeby Struktura Określa logiczne powiązania między punktami Zazwyczaj określa zakres możliwej interpolacji Zależna od problemu: Miasta w Polsce – Punkty (demografia) Węzły grafu (komunikacja) Wierzchołki triangulacji (obserwacje meteo)
4
Dane -Struktura Logika powiązań Interpolacja
Przykłady: Wiązania wyznaczające strukturę cząsteczki Połączenia lotnicze Połączenia telekomunikacyjne Połączenia logiczne odsyłaczy WWW Interpolacja Jeżeli skończony zbiór danych jest wynikiem eksperymentalnego lub numerycznego próbkowania continuum Możemy interpolować według reguł wyznaczonych przez strukturę Struktura regularna – tablica lub 3-wymiarowa Struktura nieregularna – powiązania opisywane explicite
5
Struktura 1 2 3 4 7 6 5 Opis formalny - komórki
Zerowymiarowa punkt Jednowymiarowa odcinek Dwuwymiarowe trójkąt, czworokąt Trójwymiarowe czworościan, piramida, pryzmat (graniastosłup trójkątny), sześciościan Zadane listą wierzchołków 1 2 3 4 7 6 5
6
Siatka - struktura+geometria
Siatka regularna równoległościenna Struktura tablicy lub 3-wymiarowej (komórki są odpowiednio odcinkami, czworokątami lub sześciościanami) Opis struktury: {int ndim; int dims[ndim]} Geometria: siatka złożona z odcinków, równoległoboków lub równoległościanów Opis geometrii: {int nspace; float affine[4][nspace]} affine[3] – początek układu affine[0], affine[1],… - wektory krawędzi komórki Współrzędne i lista komórek nie muszą być pamiętane
7
Siatka - struktura+geometria
Siatka regularna ze współrzędnymi Struktura tablicy lub 3-wymiarowej (komórki są odpowiednio odcinkami, czworokątami lub sześciościanami) Opis struktury: {int ndim; int dims[ndim]} Geometria: punkty umieszczone dowolnie w przestrzeni Opis geometrii: {int nspace; float coords[N * nspace]} (nspace ≥ndims, N – liczba punktów (iloczyn wymiarów siatki) Lista komórek nie musi być pamiętana
8
Struktura Siatka nieregularna 1 2 3 4 7 6 5
Wektor zbiorów komórek (CellSet) CellSet: Tablica cellArrays[8][] cellArrays[i] – tablica węzłów komórek typu i, np. cellArrays[2] ma długość 3*nTriangles Automatycznie tworzone boundaryCellArrays[4][] Listy komórek muszą być pamiętane Geometria: punkty umieszczone dowolnie w przestrzeni Opis geometrii: {int nspace; float coords[N * nspace]} (nspace ≥ndims, N – liczba punktów (iloczyn wymiarów siatki) 3 1 2 4 5 6 7
9
Pole: siatka + wartości
Wartości są przechowywane w strukturach (klasach) pochodnych od DataArray DataArray: name – nazwa używana przy wyborze komponenty type – typ danych w tablicy - od DataArray.BOOLEAN do DataArray.DOUBLE i DataArray.STRING veclen – 1 gdy dane skalarne, >1 gdy wektorowe nData – liczba elementów danych Dane w tablicy o długości veclen * nData Mogą być określone (typowo) dla punktów (node data) lub dla komórek w przypadku siatek nieregularnych (cell data) – każdy CellSet może mieć własny zestaw danych
10
Pole: siatka + wartości
Pole może zawierać dowolną liczbę danych dowolnych typów, skalarnych lub wektorowych Dodatkowo, pole może zawierać maskę – tablicę danych typu boolean wskazującą, które punkty zawierają dane istotne – przykładowo, model falowania Bałtyku jest liczony na siatce prostokątnej, należy więc użyć maski równej false dla punktów wewnątrz lądu. Wszystkie tablice danych, współrzędne i maska mogą zależeć od czasu: Timestep (krok czasowy) to para {float time, <type>[] data} Dla zadanego momentu t dostępna jest interpolacja kawałkami liniowa na chwilę t Różne tablice danych mogą mieć różne szeregi chwil i odpowiadających im danych
11
Klasy danych i ich API Field – klasa abstrakcyjna Podklasy
Nazwa (String name) Liczba punktów (int nNodes) Wymiar przestrzeni (int nSpace) – zwykle 3 Współrzędne (float[] coords) Płaska tablica {(x,y,z)0, (x,y,z)1,…} – może być null dla pola regularnego Opcjonalna maska (boolean[] mask) Wektor obiektów wartości (Vector<DataArray> data) Rozmiary (float[][] extents) Zakres i-tej współrzędnej od extents[0][i] do extents[1][i] ustalany automatycznie (z możliwością nadpisania) Podklasy RegularField IrregularField
12
Podklasy Field RegularField – siatka regularna Wymiary (int[] dims)
nNodes = dims[0]*dims[1]… ustawiane automatycznie nSpace ≥dims.length Punkt początkowy i wektory komórki elementarnej (float[][] affine): affine[3] – punkt początkowy odp. Indeksom 0 affine[0], affine[1], affine[2] – wektory komórki Opcjonalnie współrzędne (float[] coords) Kolejność punktów jak pikseli w obrazie MxN (N wierszy po M znaków zapisywanych wierszami Reguła obowiązuje we wszystkich obiektach danych
13
Podklasy Field IrregularField – siatka nieregularna CellSet
Współrzędne (float[] coords) - obowiązkowe Zbiory komórek (ArrayList<CellSets> cellSets) CellSet Liczba komórek (int nCells) – generowana automatycznie Liczba wartości danych (int nDataValues) liczba elementów tablic CellData – może być różna od nCells Tablice komórek (CellArray[] cellArrays) – 8 tablic opisujących komórki różnych typów (point, segment, triangle, quad, tetra, pyramid, prism, hex) Tablice komórek brzegowych (CellArray[] boundaryCellArrays) – generowane półautomatycznie tablice ścian komórek trójwymiarowych Wektor obiektów wartości (ArrayList<DataArray> data)
14
Tablice wartości Abstrakcyjna klasa DataArray
Nazwa (String name) Jednostka fizyczna (String unit) – używana w opisie osi, legendy barw etc. Typ danych (int type) – jedna ze stałych DataArray.FIELD_DATA_BYTE … _DOUBLE Długość wektora (int veclen) – rozmiar pojedynczego elementu danych – domyślnie 1 (dane skalarne) Minimum danych (float minv) używane do ustalenia zakresu suwaków, mapy kolorów etc., zwykle ustawiane na rzeczywiste minimum.; dla danych wektorowych ustawiane na 0 Maksimum danych (float maxv) – jak wyżej Liczba danych (int nData) Podklasy <Type>DataArray Tablica danych (<type>[] data)
15
Field API Klonowanie: Standardowe akcesory do pól (nie ma setNNodes)
cloneBase() – tylko wymiary, geometria i maska – przez referencje clone() – jw. + DataArrays cloneDeep() – jak clone, ale poszczególne pola są klonowane Standardowe akcesory do pól (nie ma setNNodes) Akcesory do tablic danych: getData() setData(ArrayList<DataArray> data) clearData() getData(String s) getData(int i) addData(DataArray dataArray)
16
RegularField API Konstruktory: Klonowanie:
RegularField(int[] dims) RegularField(int[] dims, float[][] pts) Klonowanie: cloneBase() – tylko wymiary, geometria i maska – przez referencje clone() – jw. + DataArrays CloneDeep() – jak clone, ale poszczególne pola są klonowane Standardowe akcesory do pól (nie ma setDims) Dodatkowo: getInvAffine() getCoordsFromAffine() - niezalecane
17
Dziękuję za uwagę!
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.