CHANGELOG.md file updated with commits between the current and previous tag.
-
@all Dnes jsem do masteru zmergoval svoje zmeny a vytvoril novou release. Jsou dost prekopane visitory, zejmena se to tyka vypoctu vzdalenosti bod-mesh (
DistanceToVerticesVisitor
aDistanceToTrianglesVisitor
) a hausdorffovy vzdalenosti (HausdorffDistanceVisitor
). Omlouvam se za komplikace, ktere vam to mozna zpusobi, ale zmeny byly nevyhnutelne.Dosavani kod pocital hausdorffovu vzdalenost mezi dvema obliceji s vyuzitim presnejicho vypoctu (point-to-triangle) 1 hodinu. Po zmenach to trva 9 sekund! Po zapojeni kd-stromu se musime dostat pod sekundu.
Podrobnosti vysvetlim ve ctvrtek.
-
Ahoj Radku, skvele. Co myslis oznacenim "dosavadni kod" ? Puvodni F, nebo nove rozpracovana verze? Zdravi Jirka
ne 28. 2. 2021 v 12:27 odesílatel Radek Ošlejšek gitlab@fi.muni.cz napsal:
-
Nase rozpracovana verze. Ty casy puvodniho F by men zajimaly, ale nevim, jak to rychle zjistit.
A jeste jeden vysledek: rozdil vypoctu HD presnejsi a mene presnou variantou je v nasem podani pomerne zanedbatelny (asi 1s). Opet nevim, jak velky byl rozdil v puvodnim F. DOsahl jsem toho tak, ze i v presnejsi variante se nejprve najde nejblizsi vrchol a pak se prozkoumaji pouze trojuhelnihy kolem toho vrcholu, aby se vypocet zpresnil.
Jiří Sochor píše v Ne 28. 02. 2021 v 12:39 +0100:
-
@all Ted se divam do stareho F, a tam se pri vypoctu HD pocita vzdalenost trojuhelnik-bod pro skoro vsechny trojuhelniky zdrojoveho meshe. Takze je to naprogramovano stejne blbe, jako jsme to meli predtim my. To slovo "skoro" jsem pouzil proto, ze diky kd-stromu se nektere torjuhelniky z vypoctu vynechaji. Takze nase implementace musi byt po zavedeni kd-stromu z principu rychlejsi. Tak snad se nepletu :-)
Edited by Radek Ošlejšek -
@oslejsek Omlouvám se, pokud jsem to pochopil špatně, ale nejsem si jist, jestli nám tento přístup (vybrat nejbližší bod a potom najít nejbližší trojúhelník s vrcholem v tomto bodě) dá vždy správný výsledek.
Mějme například trojúhelníky
ABC
aABD
, kde body mají souřadnice [x; y; z]:A[-5; -5; 0]
,B[5; 0; 0]
,C[-5; 5; 0]
aD[0; 0; 1]
. Potom mějme bodX[0; 0; 0]
a hledejme k tomuto bodu nejbližší trojúhelník.Pokud se nemýlím, tak výše zmíněný přístup nám vrátí trojúhelník
ABD
, protože nejbližším bodem je bodD
. Ale správně bychom měli dostat trojúhelníkABC
, protože bodX
leží uvnitř tohoto trojúhelníku a vzdálenost od něj je tedy nulová.Pokouším se najít efektivnější způsob, jak toto spočítat. Ale zjistit pro každý bod nejbližší vzdálenost ke všem trojúhelníkům sítě mi zatím zůstává jako jediný (i když neefektivní) způsob řešící i podobné krajní případy.
-
Zkazil jste mi radost, ale máte pravdu. Otázka je, jestli takové situace na našich modelech mohou nastat? IHO to vyžaduje ostré zalomení trojúhelníků (pod úhlem menším než 90 stupňů). Obličeje jsou v tomto dost hladké (a máme dost jemnou síť), s výjimkou nějakých chybně naskenovaných oblastí nebo vousů apod. V takových oblastech ale asi nemá cenu vůbec porovnávat a HD měřit.
Každopádně platí, že výpočet vzdálenosti bod-trojúhelník je extrémně drahá operace a jakákoliv redukce v tomto směru je obrovské zrychlení. KD stromy v tomto podle mě neplní úlohu zcela dobře, protože už během traverzování se neustále počítá bod-trojúhleník po celé cestě. To mě vede na myšlenku, že by mělo být mnohem výhodnější použít BVH. Trasovat BVH pouze s testem "je bod uvnitř volume?". Pokud by se dotrasovalo až do listů a bod byl stále uvnitř nějakých volumes, tak otestovat jen příslušné trojúhelníky. Pokud by po cestě "vypadl", otestovat všechny tojúhelníky uvnitř poslední volume. Protože máme obličeje napasované těsně na sebe a síť je hustá, tak k testování zbudou jednotky trojúhelníků. Pouze v místech, kde jsou obličeje daleko od sebe, by těch trojúhelníků mohlo zbýt hodně. V takové situaci je ale už bezpečná ta metoda "najdi nejbližší bod a prozkoumej jeho okolí". Takže by se to dalo zkombinovat.
@sochor Jirko, asi to nemá cenu řešit takto textově, ale ve čtvrtek bych ty možnosti rád probral.
-
Dobry vecer, jeste o tom budu premyslet, ale mam nasledujici predtuchu. Kds jsou zavedeny z duvodu pasovani dvou bodovych mraku - nalezeni rigidni transformace jednoho mraku s minimalizaci vzdalenosti bod/bod mereno globalne pres cele modely. Tady se neuvazuji trojuhelniky. Naopak - Hausdorf meri odlisnosti dvou povrchu. Hledame tedy optimalni algoritmus pro vyhledani blizkych povrchu. Reseni jeste nevidim, ale podstata problemu je asi tato.
Ozvu se zitra, ale to neznamena, ze nemuzete prijit s vlastnim navrhem.
Zdravi J.Sochor
po 1. 3. 2021 v 19:41 odesílatel Radek Ošlejšek gitlab@fi.muni.cz napsal:
-
Ahoj Radku, skvele. Co myslis oznacenim "dosavadni kod" ? Puvodni F, nebo nove rozpracovana verze? Zdravi Jirka
ne 28. 2. 2021 v 12:27 odesílatel Radek Ošlejšek gitlab@fi.muni.cz napsal:
-
Nase rozpracovana verze. Ty casy puvodniho F by men zajimaly, ale nevim, jak to rychle zjistit.
A jeste jeden vysledek: rozdil vypoctu HD presnejsi a mene presnou variantou je v nasem podani pomerne zanedbatelny (asi 1s). Opet nevim, jak velky byl rozdil v puvodnim F. DOsahl jsem toho tak, ze i v presnejsi variante se nejprve najde nejblizsi vrchol a pak se prozkoumaji pouze trojuhelnihy kolem toho vrcholu, aby se vypocet zpresnil.
Jiří Sochor píše v Ne 28. 02. 2021 v 12:39 +0100:
-
Dobry vecer, jeste o tom budu premyslet, ale mam nasledujici predtuchu. Kds jsou zavedeny z duvodu pasovani dvou bodovych mraku - nalezeni rigidni transformace jednoho mraku s minimalizaci vzdalenosti bod/bod mereno globalne pres cele modely. Tady se neuvazuji trojuhelniky. Naopak - Hausdorf meri odlisnosti dvou povrchu. Hledame tedy optimalni algoritmus pro vyhledani blizkych povrchu. Reseni jeste nevidim, ale podstata problemu je asi tato.
Ozvu se zitra, ale to neznamena, ze nemuzete prijit s vlastnim navrhem.
Zdravi J.Sochor
po 1. 3. 2021 v 19:41 odesílatel Radek Ošlejšek gitlab@fi.muni.cz napsal:
-
Radku, prosim, dej mi typ, kde se vlastne spocita to cislo HD mezi bod/normala/ploska? Prohlizel jsem to dnes asi 2 hodiny, pochopil jsem vytvoreni skupiny nejblizsich bodu kd proti danemu vrcholu. Ale kde se skryva ten vzorec ? Hledam a hledam ... Jirka
st 3. 3. 2021 v 19:18 odesílatel Radek Ošlejšek gitlab@fi.muni.cz napsal:
-
V našem kódu:
- Nejbližší bod se vypočítá v MeshTriangle, metoda getClosestPoint.
- Metoda se volá z DistanceToTrianglesVisitor, který se stará o nalezení nebližšího trojúhelníku a jeho vzdálenosti k danému 3D bodu.
-
DistanceToTrianglesVisitor
se volá z HausdorffDistanceVisitor.
Ve starém F je vstupním bodem pro zkoumání třída KdTreeFaces
Edited by Radek Ošlejšek -
Diky. Nas kod je dobre citelny a voli rozumna jmena. Potize mam pri zkoumani puvodniho kodu ... Zdravi Jirka
čt 4. 3. 2021 v 8:24 odesílatel Radek Ošlejšek gitlab@fi.muni.cz napsal:
-
Clanky jsem dal do wiki