Jeffrey Cross
Jeffrey Cross

Peta Topografi Percetakan 3D dari Data Shuttle Angkasa

Pada bulan Februari 2000 Space Shuttle Endeavor memulakan misi 11 hari yang dikenali sebagai Mission Shuttle Radar Tomography (SRTM). Tujuannya adalah untuk mengumpul data interferometrik RADAR untuk menghasilkan pangkalan data topografi digital resolusi tinggi Bumi. Data yang dihasilkan adalah koleksi fail yang dipanggil Model Ketinggian Digital (DEMs). Fail-fail ini mengandungi ketinggian meter di atas paras laut min di bawah 60 darjah lintang. Resolusi data ialah 1 arka kedua di Amerika Utara dan 3 arka saat di Amerika Utara dan kebanyakan sebahagian darat bumi.

NOTA: Sejak kejatuhan tahun 2014, agensi yang bertanggungjawab untuk data SRTM telah mula melepaskan data SRTM untuk seluruh dunia pada resolusi kedua arka.Benua pertama yang dikeluarkan adalah Afrika dengan kawasan-kawasan lain di dunia yang dibebaskan dalam beberapa bulan berikut.

Matlamat projek ini adalah untuk menukar ketinggian SRTM 3 arka data kedua ke permukaan 3D yang boleh digunakan sebagai asas untuk membuat Peta Bantuan Dibina menggunakan Pencetak 3D. Perisian yang dibuat untuk tujuan ini dipanggil SRTM2STL. Perisian ini membaca fail aras binari 3 arka kedua yang mengandungi data ketinggian dan menukarnya menjadi segitiga dan menulis fail output dalam Standard Tessellation Language (STL), format fail 3D yang sama, sama ada dalam format binari atau teks. Sebaik sahaja fail STL dijanakan, ia boleh diimport dengan mudah ke perisian penghiasan yang disediakan oleh vendor pencetak 3D. Perisian pengiringan menukarkan data ke G-Code, format fail yang digunakan oleh pencetak 3D untuk mengawal percetakan.

Data SRTM

Data kedua arka SRTM 3 dikodkan sebagai data perduaan pujian 16 bit 2 yang ditandatangani. Pada 3 arc detik satu darjah dengan satu darjah persegi bumi dipecah menjadi 1200 oleh 1200 titik data. Data SRTM disimpan sebagai 1201 oleh 1201 mata. Setiap titik data disimpan sebagai sepasang bait. Pasangan bait ini membentuk file 2,884,802 byte (1201 X 1201 * 2 byte per point). Setiap tepi atas dan kanan data mengandungi data yang sama seperti tepi bawah dan kiri persegi bersebelahan (1200 + 1). Ini boleh digunakan sebagai maklumat pendaftaran apabila fail disatukan.

Perisian

Perisian untuk membuat fail STL, SRTM2STL, ditulis dalam vanila polos (sangat jelas). Perisian ini boleh disusun ke dalam program yang boleh dilaksanakan pada hampir mana-mana platform i.e mana-mana platform dengan pengkompil C, sebagai contoh, gcc.

Algoritma

Proses menukar data SRTM ke fail STL bermula dengan menukarkan setiap kumpulan 4 mata ke dalam dua segitiga. Setiap segi tiga memerlukan 3 tiga mata x, y, dan z untuk menentukan lokasi segitiga di ruang angkasa. Di samping itu, setiap segi tiga memerlukan vektor biasa x, y, dan z untuk menentukan orientasinya di ruang angkasa. Vektor biasa harus menunjukkan objek yang ditakrifkan mengikut Peraturan Tangan Kanan (diterangkan kemudian). Data yang dihasilkan membentuk permukaan peta bantuan.

Selain permukaan peta pelepasan, program ini juga perlu mewujudkan empat bahagian dan bahagian bawah membuat model 3D ditutup atau 'kedap udara'. Ini melengkapkan model 3D yang kemudiannya boleh diimport ke dalam penonton fail STL untuk pemeriksaan atau ke dalam perisian pengiringan untuk mencipta data yang diperlukan untuk mencetak model 3D.

Untuk data SRTM yang mengandungi titik data 1201 X 1201, permukaan kawasan yang diwujudkan (bersama-sama dengan sisi dan bawah) akan mengandungi 5759996 segi tiga (atau segi / poligon).

Lubang Pengisian

Atas sebab-sebab tertentu beberapa data dalam fail SRTM asal hilang. Mata yang hilang ditandai dengan membuat titik sama dengan nilai negatif terbesar yang mungkin untuk 16 bit atau -32768. Titik data bertanda boleh dengan mudah terletak dalam data dan, jika pilihan dipilih, lubang boleh diisi oleh perisian. Perisian ini menggunakan algoritma linear yang mudah untuk tujuan ini.

Algoritma pengisian linear berfungsi dengan mencari lubang dalam data pada baris dalam array yang mengandungi data. Algoritma kemudian mencari titik data seterusnya pada baris yang bukan lubang. Lereng kemudian dikira antara dua titik akhir. Ketinggian dikira untuk setiap lubang berdasarkan cerun dan, lubang-lubang diisi dengan nilai yang dikira.

Algoritma pengisian linear mempunyai batasan. Sebagai contoh, apabila banyak data tidak ada, program ini menghasilkan garis pengisian linear panjang (yang boleh kelihatan buruk). Biasanya data hilang kerana penyebaran isyarat RADAR di sepanjang kawasan permukaan yang tidak teratur kasar. Garis lurus linear panjang biasanya tidak sepadan dengan permukaan dengan sangat baik dalam keadaan ini dan oleh itu sering kelihatan buruk. Algoritma yang lebih baik untuk menangani lubang adalah satu tempat di mana penambahbaikan boleh dibuat untuk perisian ini.

Terdapat satu lagi masalah yang boleh anda hadapi dengan algoritma pengisian linier (seperti yang dilaksanakan dalam pelepas awal perisian). Ini adalah ketika lubang bermula pada awal atau akhir baris (kelebihan). Untuk membetulkan masalah yang ditemui dalam keadaan ini, pengguna harus mengeluarkan data dari lubang yang muncul di sepanjang tepi. Ini adalah satu lagi tempat di mana ada ruang untuk penambahbaikan dalam algoritma asal.

Satu lagi cara untuk mengelakkan masalah dengan lubang adalah dengan memuat turun fail yang diperbetulkan. Banyak kerja telah dilakukan oleh pasukan SRTM untuk mengisi lubang menggunakan pelbagai teknik. Pautan ke fail yang diperbetulkan boleh didapati di dalam rujukan.

Pilihan baris perintah

Program ini menggunakan pilihan baris perintah untuk mengawal kelakuannya. Sintaks baris perintah adalah seperti berikut:

output input srtm2stl [Pilihan]

Pilihan / A - Amplifikasi - Faktor untuk melipatgandakan ketinggian oleh. Ini digunakan sebelum bias ditambah / dikurangkan. / B - Bias - Harus menjadi integer. Negatif untuk menurunkan peta (nipis). / C - Menyelaras subset - Latitud, Longitud, Latitud, Longitud (minit perpuluhan). / F - Betulkan lubang (Linear Fill). / N - Tukar Nama Pepejal dalam fail STL ASCII. / H + bererti mencetak koordinat pelbagai lubang (data yang hilang). S | s - Subset - Start_Row, Start_Column, Stop_Row, Stop_Column / T + bermakna keluaran format ASCII / T bermakna format perduaan output. V - Hidupkan keluaran verbose

Mewujudkan Poligon

Setiap poligon yang membentuk segi permukaan 3D yang dihasilkan oleh SRTM2STL terdiri daripada 3 koordinat tiga dimensi, X, Y, dan Z. Koordinat X dan Y mewakili bujur dan latitud manakala koordinat Z mewakili ketinggian titik di atas geoid atau kira-kira, bermakna paras laut. Untuk mencipta permukaan atas peta kami menggunakan 4 mata bersebelahan. Sebagai contoh, jika kita memulakan koordinat kiri atas peta kita akan menggunakan dua mata pertama pada baris pertama dan dua mata pertama pada baris kedua. Poligon pertama dicipta dari titik pertama pada baris 1 dan dua mata pada baris dua. Poligon kedua dicipta dari titik kedua pada baris pertama dan dua mata pada baris kedua. Ini menunjukkan bahawa kedua-dua poligon ini mempunyai kelebihan yang sama.

Berikut adalah beberapa data sampel yang dihasilkan oleh program yang membentuk dua poligon. Data mewakili satu poligon terdiri daripada tiga set mata. Setiap titik terdiri daripada tiga koordinat X, Y, dan Z. Poligon pertama dalam contoh ini terdiri daripada tiga perkara ini:

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

Poligon kedua terdiri daripada tiga titik berikut (X, Y, dan Z):

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

Oleh itu, permukaan atas dibuat dari semua poligon yang dihasilkan oleh program berdasarkan pilihan yang dipilih. Data ketinggian diekstrak daripada data SRTM dan disimpan dalam pelbagai 2D dalam ingatan program. Jarak dan oleh itu koordinat, data latitud dan longitud dicipta dengan mendarabkan indeks integer bagi baris dan lajur array dengan jarak per titik dalam setiap arah. Jarak untuk longitud (utara dan selatan) adalah berbeza dari latitud (timur dan barat) kerana jarak latitud semakin kecil apabila anda pergi dari khatulistiwa ke kutub. Jarak untuk Latitude (timur dan barat) dikira untuk bahagian bawah 1 darjah dengan 1 darjah persegi. Akan lebih tepat untuk mengira semula nilai ini apabila anda melintasi array supaya 'tirus' yang wujud secara semula jadi diwakili dengan tepat. Secara praktiknya, perbezaan jarak ini kebanyakannya tidak dapat dielakkan. Ia boleh ditambah pada masa akan datang sebagai pilihan program.

Selepas permukaan atas dicipta, program menutup bahagian dan bahagian bawah dengan membuat pasangan poligon tiga titik seperti yang dapat dilihat dalam gambar di bawah.

Pengiraan

Salah satu perkara yang diperlukan dalam fail STL keluaran adalah normal pada permukaan setiap poligon. Vektor ini menunjukkan objek yang sedang dibuat, iaitu vektor menunjukkan arah luar objek tersebut.

Yang biasa dikira menggunakan peraturan sebelah kanan. Secara grafik ini kelihatan seperti ini:

Jadi, memandangkan bahawa semasa anda membuat poligon yang anda tahu di mana di luar dan di dalamnya, pilih puncak poligon. Menurut gambar di atas, vektor a dan b akan sesuai dengan indeks dan jari tengah masing-masing dan titik puncak adalah titik di mana mereka bermula. Oleh itu, produk silang akan mengira vektor normal yang diwakili oleh ibu jari dalam gambar di atas. Ibu jari, selepas pengiraan ini, akan menunjuk 'keluar' objek tersebut.

Pengiraan Produk Salib mengandaikan bahawa koordinat puncak adalah (0,0,0). Untuk membuat pengiraan dari tiga set koordinat vektor a dan b dikira dengan menolak koordinat komponen puncak dari koordinat komponen titik akhir iaitu koordinat hujung jari dalam gambar di atas. Kami akan menggunakan koordinat ini untuk pengiraan Produk Salib.

Memandangkan tiga set koordinat yang menentukan poligon sebagai r, s dan t di mana r adalah puncak dan, memandangkan bahawa peraturan sebelah kanan diikuti dalam bahawa r-> s mewakili vektor a dan r-> t mewakili vektor b, maka perhitungan vektor a dan b adalah sebagai berikut:

ax = sx - rx ay = sy - ry az = sz - rz

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

Produk Salib, c, dikira dari a dan b sebagai:

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

Produk Salib ditulis kepada fail keluaran STL bersama dengan koordinat hujung poligon.

Format fail

Terdapat dua format fail output untuk fail STL: teks dan binari. Format fail teks mewakili data sebagai fail ASCII teks. Berikut ini contoh contoh titik data STL seperti teks:

beberapa nama padat

segi biasa 61.678 -65.695 -675.324

gelung luar

puncak 65708.836 30.839 999.000 puncak 65708.836 61.678 1002.000 puncak 65730.734 30.839 1001.000

endloop

endfacet

endsolid

Dalam contoh di atas tentu saja akan menjadi lebih daripada satu segi (poligon). Tiga nombor yang mengikuti aspek normal ialah koordinat yang normal kepada segi x, y, dan z. Setiap puncak adalah koordinat satu daripada tiga titik yang mewakili sudut segi dan oleh itu masing-masing mempunyai x, y, dan komponen z.

Format fail STL binari jauh lebih padat daripada format teks. Ia juga lebih sukar difahami jika anda tidak melakukan 'nombor binari'. Dalam format perduaan setiap nombor disimpan sebagai nombor titik terapung tunggal 32 bit terapung. Fail bermula dengan header 80 byte tetap yang boleh mengandungi apa-apa tetapi biasanya mengandungi penerangan ringkas mengenai fail tersebut. Seterusnya ialah integer 32 bit tunggal yang memegang nilai bilangan segitiga yang terkandung di dalam fail. Berikut ini adalah empat set tiga nombor titik terapung. Set pertama terapung adalah normal ke permukaan x, y dan z. Selepas itu terdapat tiga titik yang menggambarkan sudut segitiga dan setiap titik mempunyai tiga nombor terapung 32 bit x, y dan z.

Kesimpulannya

Kod sumber untuk SRTM2STL boleh didapati di GitHub. Ia telah dikeluarkan di bawah lesen GNU. Harapan saya ialah orang lain akan mengubah dan memperluaskan perisian. Saya juga berharap peta-peta bantuan yang dibina dengannya akan digunakan untuk mendidik dan juga mempesonakan.

Di bawah ini terdapat beberapa screencaptures dari perisian tontonan 3D bersama dengan cetakan 3D yang dicetak. Semakin baik resolusi pencetak, output yang lebih baik sepadan dengan model.

Perito Moreno Glacier - Argentina

Gunung Saint Helens - Oregon

Crater Lake Oregon

Kongsi

Meninggalkan Komen