Jeffrey Cross
Jeffrey Cross

3D tisk topografických map z dat raketoplánu

V únoru 2000 se raketoplán Endeavour vydal na 11denní misi známou jako Shuttle Radar Tomography Mission (SRTM). Jeho účelem bylo shromáždit interferometrická data RADAR, aby se vytvořila digitální topografická databáze Země s vysokým rozlišením. Výsledná data jsou kolekcí souborů nazvaných DEM (Digital Elevation Models). Tyto soubory obsahují nadmořské výšky v metrech nad průměrnou hladinou moře pod 60 stupni zeměpisné šířky. Rozlišení dat je 1 oblouková sekunda nad Severní Amerikou a 3 obloukové sekundy nad Severní Amerikou a (většinou) zbytkem pozemních hmot Země.

POZNÁMKA: Od podzimu roku 2014 agentura zodpovědná za SRTM data začala uvolňovat SRTM data pro zbytek světa s rozlišením 1 oblouk. První propuštěný kontinent byl Afrika s ostatními regiony světa vydanými v následujících měsících.

Cílem tohoto projektu je převést SRTM elevace 3 oblouková sekundová data na 3D plochu, kterou lze použít jako základ pro vytvoření vyvýšených reliéfních map pomocí 3D tiskárny. Software vytvořený pro tento účel se nazývá SRTM2STL. Software čte druhý obloukový binární soubor SRTM obsahující údaje o nadmořské výšce a převádí jej na trojúhelníky a zapisuje výstupní soubor do standardního jazyka Tessellation Language (STL), běžného formátu 3D souboru, a to buď v binárním nebo textovém formátu. Jakmile je soubor STL vygenerován, lze jej snadno importovat do softwaru pro krájení dodávaného do 3D tiskárny. Software pro řezání převádí data na G-Code, formát souboru používaný 3D tiskárnami pro řízení tisku.

Data SRTM

Druhá data SRTM 3 oblouku jsou kódována jako podepsaná binární data komplimentu 16 bitů 2. Ve 3 obloukových vteřinách je jeden stupeň o jeden stupeň čtverec země rozdělen do 1200 o 1200 datových bodů. Data SRTM jsou uložena jako 1201 podle 1201 bodů. Každý datový bod je uložen jako dvojice bajtů. Tyto bajtové páry tvoří soubor 2 884 802 bajtů (1201 X 1201 * 2 bajtů na bod). Každý horní a pravý okraj dat obsahuje stejná data jako dolní a levý okraj sousedního čtverce (1200 + 1). To může být použito jako registrační informace, když jsou soubory zřetězeny.

Software

Software pro vytváření STL souborů, SRTM2STL, je napsán v prosté (velmi prosté) vanilce C. Software může být zkompilován do spustitelného programu prakticky na jakékoli platformě, tj. Jakékoliv platformě s kompilátorem C, například gcc.

Algoritmus

Proces převodu SRTM dat do souboru STL začíná převedením každé skupiny 4 bodů na dva trojúhelníky. Každý trojúhelník vyžaduje 3 trojité body x, y a z pro definování umístění trojúhelníku v prostoru. Navíc každý trojúhelník potřebuje normální vektor x, y a z pro definování jeho orientace v prostoru. Normální vektor by měl ukazovat z objektu, který je definován podle pravidla Pravé ruky (popsaného dále). Výsledná data tvoří povrch reliéfní mapy.

Kromě reliéfního mapového povrchu musí program také vytvořit čtyři strany a dno, čímž se 3D model zavře nebo „vodotěsný“. Tím se doplní 3D model, který pak může být importován do prohlížeče souborů STL ke kontrole nebo do softwaru pro krájení. data potřebná pro 3D tisk modelu.

U SRTM dat obsahujících 1201 X 1201 datových bodů bude plocha vytvořené oblasti (spolu se stranami a dnem) obsahovat 5759996 trojúhelníků (nebo fazet / polygonů).

Plnicí otvory

Z různých důvodů chybí některá data v původních souborech SRTM. Chybějící body jsou označeny tak, že se bod rovná největší záporné hodnotě možné pro 16 bitů nebo -32768. Označené datové body lze snadno umístit do dat a pokud je volba vybrána, mohou být otvory vyplněny softwarem. Software pro tento účel implementuje jednoduchý lineární algoritmus.

Algoritmus pro lineární výplň pracuje tak, že najde v datech na řádku díru obsahující data. Algoritmus pak hledá další datový bod v řádku, který není dírou. Sklon se pak vypočítá mezi dvěma koncovými body. Výška se vypočítá pro každý otvor na základě sklonu a otvory se vyplní vypočítanou hodnotou.

Algoritmus lineárního plnění má omezení. Když například chybí mnoho dat, program vytvoří dlouhé lineární řádky (které mohou vypadat špatně). Obvykle data chybí kvůli rozptylu signálu RADAR podél hrubých nepravidelných povrchových ploch. Dlouhé lineární linky se v těchto případech obvykle velmi dobře neshodují s povrchem, a proto často vypadají špatně. Lepší algoritmus pro řešení děr je jedním z míst, kde lze tento software vylepšit.

Existuje další problém, se kterým se můžete setkat s algoritmem lineárního plnění (implementovaným v počátečním vydání softwaru). To je, když díra začíná na začátku nebo na konci řady (hrana). Chcete-li odstranit problémy, které se vyskytly v této situaci, uživatel by měl extrahovat data mimo otvory, které se objevují podél okraje. To je další místo, kde je prostor pro zlepšení v původním algoritmu.

Dalším způsobem, jak se vyhnout problému s otvory, je stáhnout opravené soubory. Mnohé práce byly provedeny týmem SRTM k vyplnění otvorů pomocí různých technik. Odkaz na opravené soubory naleznete v odkazech.

Možnosti příkazového řádku

Program používá k řízení svého chování volby příkazového řádku. Syntaxe příkazového řádku je následující:

vstupní výstup srtm2stl [Možnosti]

Možnosti / A - Zesílení - Faktor násobení výšek o. To platí před přidáním / odečtením předpětí. / B - Bias - Musí být celé číslo. Negativní snížit mapu (tenké). / C - podmnožina souřadnic - zeměpisná šířka, zeměpisná délka, zeměpisná šířka, zeměpisná délka (desetinné minuty). / F - Upevněte otvory (lineární výplň). / N - Změna jména Solid v souborech ASCII STL. / H + znamená vytisknout souřadnice souřadnic díry (chybějící data). S | s - Subset - Start_Row, Start_Column, Stop_Row, Stop_Column / T + znamená výstup ASCII formátu / T- znamená výstupní binární formát. V - Zapne podrobný výstup

Vytváření polygonů

Každý polygon, který tvoří plochy 3D povrchu vytvořeného SRTM2STL, se skládá ze 3 trojrozměrných souřadnic, X, Y a Z. Souřadnice X a Y představují délku a šířku, zatímco souřadnice Z představuje výšku bodu nad geoidem nebo hrubě střední hladina moře. Pro vytvoření horní plochy mapy jsme použili 4 sousední body. Pokud například začínáme v levých horních souřadnicích mapy, použijeme první dva body na prvním řádku a první dva body na druhém řádku. První polygon je vytvořen z prvního bodu na řádku 1 a dvou bodů na druhém řádku. Druhý polygon je vytvořen z druhého bodu na prvním řádku a dvou bodů na druhém řádku. To znamená, že dva polygony sdílejí společný okraj a dělají to.

Zde je několik ukázkových dat vytvořených programem, který tvoří dva polygony. Data reprezentující jeden polygon se skládají ze tří sad bodů. Každý bod se skládá ze tří souřadnic X, Y a Z. První polygon v tomto příkladu je tvořen těmito třemi body:

Bod 1: 0.000000, 0.000000, 223.000000 Bod 2: 0.000000, 92.408531, 219.000000 Bod 3: 68.984360, 0.000000, 182.000000

Druhý polygon je tvořen následujícími třemi body (X, Y a Z):

Bod 1: 68.984360, 92.408531, 180.000000 Bod 2: 0.000000, 92.408531, 219.000000 Bod 3: 68.984360, 0.000000, 182.000000

Horní plocha je tedy vytvořena ze všech polygonů vytvořených programem na základě vybraných možností. Údaje o nadmořské výšce se získávají z dat SRTM a ukládají se do 2D pole v paměti programu. Vzdálenosti a tedy i souřadnice dat zeměpisné šířky a délky se vytvářejí vynásobením celočíselných indexů řad řádků a sloupců vzdáleností na bod v každém směru.Vzdálenosti pro délku (sever a jih) jsou odlišné od zeměpisné šířky (východ a západ), protože vzdálenost zeměpisné šířky se zmenšuje, když jdete od rovníku ke sloupům. Vzdálenost pro šířku (východ a západ) se vypočítá pro dno 1 stupně o 1 stupeň čtverce. Bylo by přesnější tuto hodnotu přepočítat, když budete procházet pole tak, aby „kužel“, který existuje přirozeně, byl přesně reprezentován. Prakticky řečeno, tento rozdíl je většinou nepostřehnutelný. To by mohlo být přidáno v budoucnu jako programová volba.

Po vytvoření horní plochy program uzavře strany a dolní část vytvořením tříbodových polygonových párů, jak je vidět na obrázku níže.

Výpočty

Jedna z věcí vyžadovaných ve výstupním souboru STL je normální k povrchu každého polygonu. Tento vektor ukazuje na vytvořený objekt, tj. Vektor označuje směr vnějšího objektu.

Normální se vypočítá pomocí pravého pravítka. Graficky to vypadá takto:

Vzhledem k tomu, že když vytváříte polygony, které víte, kde je vně i uvnitř, vyberte vrchol polygonu. Podle obrázku nahoře budou vektory a a b odpovídat indexu a střednímu prstu a vrchol je bod, kde začínají. Cross-product tedy vypočítá normální vektor, který je znázorněn palcem na obrázku výše. Po tomto výpočtu bude palec ukazovat „ven“ objektu.

Výpočet křížového produktu předpokládá, že souřadnice vrcholu jsou (0,0,0). Pro výpočet ze tří sad souřadnic jsou vektory a a b vypočteny odečtením souřadnic složky vrcholu od souřadnic komponent koncových bodů, tj. Souřadnic špiček prstů na obrázku výše. Tyto normalizované souřadnice použijeme pro výpočet křížového produktu.

Vzhledem ke třem sadám souřadnic, které definují mnohoúhelník jako r, s a t, kde r je vrchol a vzhledem k tomu, že pravidlo pravice je následováno v tom, že r-> s představuje vektor a a r-> t představuje vektor b, pak výpočet vektorů aab je následující:

ax = sx - rx ay = syz az = sz - rz

bx = tx - rx by = ty - ry bz = tz - rz

Křížový produkt, c, se vypočítá z písmen a a b jako:

cx = (ay * bz) - (az * by) cy = (ax * bz) - (az * bx) cz = (ax * by) - (ay * bx)

Produkt Cross je zapsán do výstupního souboru STL spolu se souřadnicemi konců mnohoúhelníku.

Formát souboru

Existují dva formáty výstupních souborů pro soubory STL: textové a binární. Formát textového souboru představuje data jako soubor ASCII textu. Zde je příklad toho, jak datový bod STL vypadá jako text:

pevné jméno_jméno

facet normal 61.678 -65.695 -675.324

vnější smyčka

vertex 65708.836 30.839 999.000 vertex 65708.836 61.678 1002.000 vertex 65730.734 30.839 1001.000

endloop

endfacet

endolid

Ve výše uvedeném příkladu by samozřejmě bylo více než jeden aspekt (mnohoúhelník). Tři čísla následující po ploše jsou souřadnice normálu k ploše x, y a z. Každý vrchol je souřadnice jednoho ze tří bodů, který představuje roh fazety, a proto má každá komponentu x, y a z.

Binární formát souboru STL je mnohem kompaktnější než formát textu. Je také těžší pochopit, zda nemáte binární čísla „dělat“. V binárním formátu je každé z čísel uloženo jako jedno-přesné 32bitové číslo s plovoucí desetinnou čárkou. Soubor začíná pevnou hlavičkou 80 bajtů, která může obsahovat cokoliv, ale obvykle obsahuje krátký popis souboru. Další je jediné 32bitové celé číslo, které obsahuje hodnotu počtu trojúhelníků obsažených v souboru. Následují čtyři sady tří čísel s plovoucí desetinnou čárkou. První sada plováků je normální k povrchu x, y a z. Poté následují tři body, které popisují rohy trojúhelníku a každý bod má tři 32 bitová čísla s plovoucí desetinnou čárkou x, y a z.

Závěr

Zdrojový kód pro SRTM2STL je k dispozici na GitHub. Byl vydán pod licencí GNU. Doufám, že ostatní upraví a rozšíří software. Také doufám, že vyvýšené reliéfní mapy, které s ním vzniknou, budou sloužit k výchově i fascinaci.

Níže jsou uvedeny některé screencaptures z 3D zobrazovacího softwaru vedle 3D tištěných kusů. Čím lepší je rozlišení tiskárny, tím lepší je výstup.

Ledovec Perito Moreno - Argentina

Mount Saint Helens - Oregon

Kráterové jezero Oregon

Podíl

Zanechat Komentář