GTDiPS = General Transformation of Discrete Point Sequence
říjen 2008, Petr Frantík
poslední aktualizace: květen 2009
http://www.kitnarf.cz
Aplikace GTDiPS slouží pro provádění transformací diskrétní posloupnosti bodů. Hlavním důvodem pro použití této aplikace je požadavek na snížení počtu bodů, eliminaci šumu a přípravu pro grafický výstup.
Aby bylo možno aplikaci GTDiPS spustit, musí být v operačním systému nainstalována Java platforma. Platformu lze stáhnout z adresy http://www.java.com/en/download/manual.jsp. Je-li Java platforma správně nainstalována, lze soubor aplikace gtdips.jar spustit.
Aplikace GTDiPS se spouští z konzoly operačního systému (pokud jí systém disponuje). Tento způsob se velmi dobře hodí pro hromadné zpracování dat, ale je náročnější na přípravu. Spuštění se provede zapsáním následujícího řetězce do konzoly operačního systému (v případě, že jsme přítomni v adresáři, kde je umístěn soubor gtdips.jar):
java -jar gtdips.jar -inputFile [path][name] -outputFile [path][name] -chainFile [path][name] -columnMap [columnMapString]
kde [path] je cesta k danému souboru a [name] je jeho jméno. Argument [columnMapString] slouží pro volitelné mapování sloupců v datových souborech (více viz Formát datových souborů). Například mějme v adresáři C:/gtdips umístěn soubor gtdips.jar a adresář data, ve kterém jsou umístěny soubory source.txt, target.txt a chain.gtdips. Pak by spouštěcí řetězec z adresáře C:/gtdips vypadal takto:
java -jar gtdips.jar -inputFile data/source.txt -outputFile data/target.txt -chainFile data/chain.gtdips
Uvedený oddělovač adresářů je závislý na operačním systému.
V aplikaci GTDiPS jsou implementovány následující transformace (s originálními anglickými názvy v abecedním pořadí). Jejich názvy jsou hypertextové odkazy, které vedou na podrobnější popis včetně příkladu použití.
Aplikace GTDiPS načítá a ukládá diskrétní posloupnosti bodů z datových souborů typu prostý text (soubor obsahuje pouze textové znaky a znaky pro řádkování). Jednotlivé body jsou v těchto souborech uloženy ve formě dvojice resp. trojice souřadnic oddělené tabelátorem na samostatném řádku, viz.
Změnu pořadí sloupců v souboru lze provést při spouštění aplikace. Pomocí návěští -columnMap s argumentem [columnMapString] lze sloupce libovolně namapovat. Implicitně je řetězec [columnMapString] nastaven na xyz. Chceme-li například zaměnit první sloupec za druhý, bude tento řetězec vypadat yx respektive yxz.
Aplikace GTDiPS je schopna provádět posloupnost transformací. Tato posloupnost je definována v souboru s doporučeným jménem [projekt].chain.gtdips, kde [projekt] odpovídá zvolenému jménu projektu. V této kapitole je popsán obecný formát tohoto souboru a definiční metody, které lze použít.
Soubor řetězu je typu prostý text.
Aplikace GTDiPS při spuštění načte soubor řetězu a nejprve vytvoří objektovou reprezentaci transformačního řetězu dle uvedených definičních metod. Teprve poté se spustí vlastní výpočet. Z toho vyplývá, že pořadí definičních metod ovlivňuje pouze pořadí vytváření a nastavování jednotlivých transformací (nedochází k interpretaci souboru při výpočtu transformací).
Obsah souboru řetězu může vypadat například takto:
//odstranění X duplicit
new XDuplicityTransformation
setDistance 0.00001 //X tolerance odchylky
//vyhlazení posloupnosti
new PolynomialTransformation
setDistance 0.02 //poloměr okolí
setDegree 2 //stupeň polynomu
//snížení počtu bodů
new TrackingTransformation
setDistance 0.001 //poloměr výběrové kružnice
setRatioY 0.1 //koeficient osy Y
setMinXOrigin
Tento příklad definuje řetěz tří po sobě jdoucích transformací. Nejprve se má provést XDuplicityTransformation poté PolynomialTransformation a nakonec TrackingTransformation. Každá z těchto transformací je nastavena podle bezprostředně za ní uvedených definičních metod.
Obecný tvar souboru řetězu lze zapsat takto:
//volitelný komentář
new [TransformationName1] //definice transformace 1
[DefinitionMethod1] [Argument1] [Argument2] ... //volání definiční metody transformace 1
[DefinitionMethod2] [Argument1] [Argument2] ... //volání definiční metody transformace 1
...
new [TransformationName2] //definice transformace 2
[DefinitionMethod1] [Argument1] [Argument2] ... //volání definiční metody transformace 2
[DefinitionMethod2] [Argument1] [Argument2] ... //volání definiční metody transformace 2
...
...
U definičních metod v rámci jedné transformace záleží na jejich pořadí pouze tehdy, ovlivňuje-li toto pořadí nastavení transformace. Pro příklad uveďme metody, které se navzájem negují (vyvolání jedné metody zneplatní nastavení při vyvolání druhé). Z těchto metod bude platit ta, která je uvedena jako poslední.
Použitelnost definičních metod závisí na dané transformaci. V následujícím seznamu definičních metod je uvedeno, pro které transformace ji lze použít a s jakým významem:
calculateWeight | |
Význam: | Nastaví váhu výsledného bodu na průměrný počet bodů v intervalu osy X délky distance. |
Použitelnost: | ConstantWeightTransformation |
Viz také: | setDistance, setWeight |
setDerivativeLimit | |
Význam: | Nastaví limit derivace. |
Použitelnost: | DerivativeLimitCrossDeletion |
flowingCircle | |
Význam: | Umožní přesunutí výběrové kružnice do posledního vypočteného bodu. Pokud není uveden, hledá se nový počátek dle zvoleného algoritmu. |
Použitelnost: | TrackingTransformation |
ignoreMissingPoints | |
Význam: | Zamezí předčasnému ukončení aplikace GTDiPS při vzniku výjimky MissingPointException. Objeví se pouze varování. |
Použitelnost: | DerivativeTransformation, PolynomialTransformation |
ignoreUnsolvable | |
Význam: | Zamezí předčasnému ukončení aplikace GTDiPS při vzniku výjimky UnsolvableException. Objeví se pouze varování. |
Použitelnost: | DerivativeTransformation, PolynomialTransformation |
invert | |
Význam: | Invertuje aktuální afinní transformaci. |
Použitelnost: | AffineTransformation |
Viz také: | rotate, rotateDegrees, scale, shear, translate |
jumpToOldest | |
Význam: | Změní algoritmus hledání nového počátku. Novým počátkem bude vždy nejstarší zbývající zdrojový bod (nejstarším bodem je bod s nejnižším pořadovým číslem v posloupnosti). |
Použitelnost: | TrackingTransformation |
Viz také: | setOldestOrigin |
rotate [RealNumber] | |
Význam: | Přidá k afinní transformaci otočení o úhel v radiánech. |
Použitelnost: | AffineTransformation |
Viz také: | invert, rotateDegrees, scale, shear, translate |
rotateDegrees [RealNumber] | |
Význam: | Přidá k afinní transformaci otočení o úhel ve stupních. |
Použitelnost: | AffineTransformation |
Viz také: | invert, rotate, scale, shear, translate |
scale [RealNumber] [RealNumber] | |
Význam: | Přidá k afinní transformaci zvětšení/zmenšení. |
Použitelnost: | AffineTransformation |
Viz také: | invert, rotate, rotateDegrees, shear, translate |
setChildsPerSegment [IntegerNumber] | |
Význam: | Určuje počet nových výsledných bodů v každém segmentu splajnu. |
Použitelnost: | SplineInterpolation |
setDegree [IntegerNumber] | |
Význam: | Nastavuje stupeň aproximačního polynomu. |
Použitelnost: | DerivativeTransformation, PolynomialTransformation |
setDistance [RealNumber] | |
Význam: | Nastavuje klíčový parametr většiny transformací, který určuje délku, vzdálenost nebo poloměr v jednotkách osy X. |
Použitelnost: | CentroidalTransformation, ConstantWeightTransformation, DerivativeTransformation, EquidistantTransformation, FlowlineTransformation, PolynomialTransformation, TrackingTransformation, XDuplicityTransformation |
setMaxXOrigin | |
Význam: | Nastavuje počáteční bod XY na zdrojový bod s maximální souřadnicí X. |
Použitelnost: | TrackingTransformation |
Viz také: | setMinXOrigin, setOldestOrigin, setOrigin |
setMinXOrigin | |
Význam: | Nastavuje počáteční souřadnici X nebo počáteční bod XY na minimální souřadnici X zdrojových bodů respektive na zdrojový bod s minimální souřadnicí X. |
Použitelnost: | CentroidalTransformation, EquidistantTransformation, TrackingTransformation |
Viz také: | setOrigin |
setOldestOrigin | |
Význam: | Nastavuje počáteční bod XY na první zdrojový bod. |
Použitelnost: | TrackingTransformation |
Viz také: | setMaxXOrigin, setMinXOrigin, setOrigin |
setOrigin [RealNumber] | |
Význam: | Nastavuje počáteční souřadnici X. |
Použitelnost: | CentroidalTransformation, EquidistantTransformation |
Viz také: | setMinXOrigin |
setOrigin [RealNumber] [RealNumber] | |
Význam: | Nastavuje počáteční bod XY. |
Použitelnost: | TrackingTransformation |
Viz také: | setMaxXOrigin, setMinXOrigin, setOldestOrigin |
setRatioY [RealNumber] | |
Význam: | Nastavuje koeficient osy Y pro přepočet na jednotky osy X, viz subjektivní souřadnicová rovina Xy. |
Použitelnost: | FlowlineTransformation, TrackingTransformation |
setWeight [RealNumber] | |
Význam: | Nastaví váhu výsledného bodu. |
Použitelnost: | ConstantWeightTransformation |
Viz také: | calculateWeight |
shear [RealNumber] [RealNumber] | |
Význam: | Přidá k afinní transformaci zkosení. |
Použitelnost: | AffineTransformation |
Viz také: | invert, rotate, rotateDegrees, scale, translate |
translate [RealNumber] [RealNumber] | |
Význam: | Přidá k afinní transformaci posunutí. |
Použitelnost: | AffineTransformation |
Viz také: | invert, rotate, rotateDegrees, scale |
Nastavení transformace v kombinaci se vstupními daty může vyvolat různé výjimky, které způsobí předčasné ukončení aplikace GTDiPS. Aplikace v takovém případě tuto výjimku vypíše včetně místa, kde k ní došlo. Výpis může vypadat například takto:
java.io.FileNotFoundException: source.txt (System nemuze nalezt uvedeny soubor)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.
at java.io.FileInputStream.
at java.io.FileReader.
at cz.kitnarf.discretepointsequence.DiscretePointSequence.parseFile(DiscretePointSequence.java:32)
at cz.kitnarf.gtdips.GTDiPS.main(GTDiPS.java:148)
Nejběžnější výjimky, které mohou nastat jsou následující:
FileNotFoundException | |
Význam: | Je vyvolána v případě, že nelze nalézt určený soubor. |
Opatření: | Zkontrolovat soubory a jejich určení (cestu a jméno). |
InterpreterException | |
Význam: | Je vyvolána v případě, že se vyskytla chyba při interpretaci souboru řetězu. |
Opatření: | Rozpoznat chybu v souboru dle podrobností uvedených ve výpisu výjimky. |
Viz také: | soubor řetězu |
MissingOriginException | |
Význam: | Je vyvolána v případě, že není nastaven počáteční bod origin. |
Opatření: | Zkontrolovat nastavení parametru origin. |
Viz také: | setOrigin |
MissingPointException | |
Význam: | Je vyvolána v případě, že není k dispozici dostatečný počet zdrojových bodů. |
Opatření: | Zkontrolovat zdrojová data, ověřit správnost nastavení parametru distance. |
Viz také: | ignoreMissingPoints, setDistance |
MissingWeightException | |
Význam: | Je vyvolána v případě, že není nastaven parametr weight. |
Opatření: | Zkontrolovat nastavení parametru weight. |
Viz také: | setWeight |
NumberFormatException | |
Význam: | Je vyvolána v případě, že data z datového souboru nelze převést na reálné číslo. |
Opatření: | Ověřit formát datového souboru. |
Viz také: | Formát datových souborů |
UnsolvableException | |
Význam: | Je vyvolána v případě, že nelze vyřešit soustavu rovnic. |
Opatření: | Různá dle dané transformace. |
Viz také: | ignoreUnsolvable |
WrongDataException | |
Význam: | Je vyvolána v případě, že nelze načíst data z datového souboru, případně data v souboru nejsou konzistentní. |
Opatření: | Ověřit formát datového souboru. |
Viz také: | Formát datových souborů |
WrongEquidistanceException | |
Význam: | Je vyvolána v případě, že není správně nastaven parametr distance. |
Opatření: | Ověřit správnost nastavení parametru distance. |
Viz také: | setDistance |
WrongRatioException | |
Význam: | Je vyvolána v případě, že není správně nastaven parametr ratioY. |
Opatření: | Ověřit správnost nastavení parametru ratioY. |
Viz také: | setRatioY |
Domovská stránka aplikace GTDiPS je http://gtdips.kitnarf.cz.
Tento výsledek byl získán za finančního přispění MŠMT ČR, projekt 1M0579, v rámci činnosti výzkumného centra CIDEAS.
Děkuji za spolupráci svým kolegům Janu Eliášovi, Davidovi Lehkému a Václavovi Veselému.
Eliáš, J., Vořechovský, M, (2006): Software SMARTEDT: SMoothing by Averaging and Reduction of Testing DaTa, sborník konference Modelování v mechanice 2006, VŠB-TU Ostrava, Česká republika
Wikipedia, the free encyclopedia: Affine transformation, http://en.wikipedia.org
Wikipedia, the free encyclopedia: Isolated point, http://en.wikipedia.org
Wikipedia, the free encyclopedia: Plain text, http://en.wikipedia.org
Wikipedia, the free encyclopedia: Sequence, http://en.wikipedia.org
Wolfram MathWorld: Cubic Spline, http://mathworld.wolfram.com