Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

VisNow – struktury danych Krzysztof S. Nowiński

Podobne prezentacje


Prezentacja na temat: "VisNow – struktury danych Krzysztof S. Nowiński"— Zapis prezentacji:

1 VisNow – struktury danych Krzysztof S. Nowiński visnow@icm.edu.pl

2 Dane 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 2

3 Dane – geometria i struktura Geometria: –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ń – 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 1- 2- lub 3-wymiarowa Struktura nieregularna – powiązania opisywane explicite

5 Struktura 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 3 1 2 0 4 5 6 7

6 Siatka - struktura+geometria Siatka regularna równoległościenna –Struktura tablicy 1- 2- 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 1- 2- 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 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 0 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, [] 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 11 Field – klasa abstrakcyjna –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 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 12

13 Podklasy Field IrregularField – siatka nieregularna –Współrzędne(float[] coords) - obowiązkowe –Zbiory komórek (ArrayList 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 data) 13

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 DataArray –Tablica danych( [] data) 14

15 DataArray API DataArray jest abstrakcyjna, podklasy to: ByteDataArray, ShortDataArray,…,ObjectDataArray Zazwyczaj nie interesujemy się konkretną DataArray Nie używamy konstruktorów, zamiast tego factory DataArray create( [] data, int veclen, String name[, String units, String[] userData]) Mamy standardowe akcesory get/set Ponadto isSimpleNumeric() – false dla boolean, string, complex i object byte[] getBData() … double[] getDData() – z automatyczną konwersją danych – wygodne do prototypowania – Używamy getFData() niezależnie od typu DataArray – kosztuje! 15

16 Field API 16 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 setNNodes) Akcesory do tablic danych: getData() setData(ArrayList data) clearData() getData(String s) getData(int i) addData(DataArray dataArray)

17 RegularField API 17 Konstruktory: 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 (alokuje tablicę współrzędnych)

18 RegularField API – c.d. 18 Opisy: toString() – najkrótszy opis (tylko wymiary) do zastosowań typu ToolTip shortDescription() – jw. + nSpace + liczba komponent description() – jw. + opis geometrii + lista komponent (nazwa, typ, veclen, min/max) Funkcje użytkowe np. getCellVolume() zwraca wyznacznik z affine, [] getInterpolatedData( [] data, float u, float v, float w) zwraca dane typu interpolowane w punkcie (u,v,w) DataArray interpolateDataToIrregularMesh(float[] mesh, DataArray da) Interpoluje dane z tablicy danych da na ciąg punktów, których współrzędne leżą w mesh I wiele innych…

19 IrregularField API Konstruktor: IrregularField(int nNodes) Klonowanie: cloneBase()– tylko wymiary, geometria, maska i cellSets– przez referencje clone() – jw. + DataArrays CloneDeep()– jak clone, ale poszczególne pola są klonowane Standardowe akcesory do pól, dodatkowo getCellSet(int i) addCellSet(CellSet cs) replaceCellSet(int n, CellSet newSet) 19

20 IrregularField API - cd Dodatkowo, m.in. Opisy toString() – najkrótszy opis (tylko liczba wierzchołków) do zastosowań typu ToolTip shortDescription() – jw. + nSpace + liczba komponent + liczba cellSets description() – jw. + opis geometrii + lista komponent (nazwa, typ, veclen, min/max) triangulate() – dzieli wszystkie komórki nie będące sympleksami na sympleksy hasCells1D(), hasCells2D(), hasCells3D() - oczywiste 20

21 CellArray API Konstruktor CellArray(int type, int[] nodes, boolean[] orientations, int[] dataIndices) Argument dataIndices może być null, gdy cell cet nie ma danych (cellData) Standardowe akcesory do pól, dodatkowo: int getNCells() int getCellNodes() Uwaga: wprawdzie istnieją akcesory obiektowe, ale zwykle wystarcza cs.getNodes(); cs.getNCells(); cs. getCellNodes(); 21

22 CellSet API Konstruktor CellSet(String name) Standardowe akcesory do pól, dodatkowo: CellArray getCellArray(int index) (index = Cell.POINT,…,Cell.HEXAHEDRON) setCellArray(CellArray newCellArray) SetData(int i, [] data0, String name) CellSet merge(CellSet cs) Ważne generateDisplayData(float[] coords) – generuje ściany zewnętrzne (do boundaryCellArrays) i dane niezbędne do ich prezentacji – należy wołać zawsze gdy chcemy pokazywać pole 22

23 Dziękuję za uwagę! visnow@icm.edu.pl


Pobierz ppt "VisNow – struktury danych Krzysztof S. Nowiński"

Podobne prezentacje


Reklamy Google