Rekonstruksi model tiga dimensi menggunakan metode paralaks aktif. Representasi objek tiga dimensi

Tugas merekonstruksi bentuk tiga dimensi suatu benda atau koordinat dalam ruang tersebar luas. Misalnya, hal ini terus-menerus muncul saat menggunakan gambar yang merupakan proyeksi ortografis.

Beras. 3-48 Hasil proyeksi pada Contoh 3-29.

Metode pemulihan yang terkenal objek tiga dimensi atau koordinat menurut dua tampilan atau lebih (proyeksi ortografis) yang ditunjukkan pada gambar. Metode untuk merekonstruksi vektor koordinat tiga dimensi dari proyeksi dua perspektif, misalnya dari dua foto, belum begitu dikenal. Tentu saja, jika metode ini cocok untuk proyeksi perspektif, maka metode ini juga cocok untuk proyeksi ortografis yang lebih sederhana dan, pada kenyataannya, untuk semua proyeksi yang dibahas pada bagian sebelumnya. Seperti yang akan ditunjukkan di bawah, jika informasi tambahan tertentu tersedia, informasi yang tepat mengenai transformasi itu sendiri tidak diperlukan.

Sebelum mempertimbangkan masalah secara umum, mari kita beralih ke kasus khusus dalam merekonstruksi koordinat tiga dimensi suatu titik dari dua atau lebih proyeksi ortografik. Pada Gambar. 3-49 menunjukkan tampilan ortografik (proyeksi) dari depan, kanan dan atas. Saat menentukan koordinat tiga dimensi suatu titik, tampilan depan memberikan nilai koordinat dan , tampilan kanan - dan , tampilan atas - dan , yaitu.

.

Perhatikan bahwa untuk setiap koordinat kita mendapatkan dua nilai. Dalam matematika, dalam kasus seperti itu, mereka mengatakan bahwa kondisi yang berlebihan dikenakan pada masalah tersebut. Lagi pula, yang perlu dicari hanya tiga besaran bebas, sedangkan enam kondisi (persamaan) yang menentukannya diketahui. Untuk sistem pengukuran apa pun dalam kasus umum, , . Karena tidak diketahui nilai mana yang paling benar keputusan yang masuk akal akan membuat rata-ratanya.

Kembali ke rekonstruksi koordinat tiga dimensi dari proyeksi perspektif, ingatlah bahwa transformasi perspektif umum direpresentasikan dalam bentuk matriks ukuran. Dengan demikian,

.

Beras. 3-49 Mengembalikan bentuk tiga dimensi dari proyeksi ortografis.

Hasilnya dapat diproyeksikan ke bidang dua dimensi, misalnya bidang, dengan menggunakan

.

Menggabungkan dua matriks menghasilkan

.

Transformasi ini berguna untuk ditulis sebagai

. (3-71)

Perhatikan bahwa dan merupakan koordinat proyeksi perspektif pada bidang. Proyeksi pada pesawat atau pesawat juga dapat digunakan. Setelah menuliskannya secara eksplisit persamaan matriks(3-71), kita mengerti

Substitusikan nilai dari (3-72c) ke dalam persamaan (3-72a) dan (3-72b):

Menurut usulan Sutherland, pasangan persamaan ini dapat dipertimbangkan dalam tiga dengan cara yang berbeda. Yang pertama, , , , diasumsikan diketahui. Lalu kita mempunyai dua persamaan dengan dua hal yang tidak diketahui dan . Dengan demikian, persamaan ini dapat digunakan untuk menghitung secara langsung koordinat proyeksi perspektif. Pendekatan inilah yang telah digunakan dalam semua pembahasan sebelumnya dalam bab ini.

Dalam pendekatan lain, , , diasumsikan diketahui. Dalam hal ini, diperoleh dua persamaan dari tiga koordinat spasial yang tidak diketahui , , . Sistem persamaan ini tidak dapat diselesaikan. Namun, jika dua proyeksi perspektif diketahui, katakanlah dua foto, maka persamaan (3-73) dapat ditulis untuk kedua proyeksi tersebut. Hasilnya kita dapatkan

dimana superskrip 1 dan 2 menunjukkan proyeksi perspektif pertama dan kedua. Perhatikan bahwa transformasi dan tidak harus sama. Persamaan ini dapat ditulis ulang dalam bentuk matriks

,

Persamaan (3-73) mewakili empat persamaan untuk tiga koordinat spasial yang tidak diketahui , , . Untuk mencari solusinya, matriks tersebut tidak dapat dibalik karena matriksnya tidak persegi. Sekali lagi, seperti dalam kasus rekonstruksi koordinat tiga dimensi dari proyeksi ortografik, kondisinya mubazir dan, dengan demikian, permasalahan hanya dapat diselesaikan dalam artian rata-rata atau paling sesuai.

Solusi rata-rata dapat dihitung dengan mengingat bahwa suatu matriks dikalikan dengan matriks transposnya adalah persegi. Jadi, mengalikan kedua ruas persamaan (3-74) dengan , kita peroleh

.

Setelah menghitung matriks invers, kita memperoleh solusi rata-rata untuk, yaitu.

. (3-75)

Jika tidak ada solusi, maka kondisi yang diterapkan adalah mubazir dan tidak ada solusi tunggal yang memberikan kesalahan paling sedikit. Metode ini diilustrasikan dengan sebuah contoh.

Contoh 3-30 Rekonstruksi 3D

Mari kita asumsikan bahwa koordinat terukur suatu titik pada satu proyeksi perspektif adalah sama Dan ke yang lain. Transformasi pertama proyeksi perspektif merupakan hasil rotasi terhadap suatu sumbu dan selanjutnya translasi sebesar 2 satuan ke arah negatif sumbu. Titik proyeksinya berada di , dan hasilnya diproyeksikan ke bidang. Ini benar-benar merupakan proyeksi perspektif dua titik. Transformasi kedua merupakan hasil rotasi pada masing-masing sumbu , . Titik proyeksi terletak di , dan hasilnya diproyeksikan ke bidang, yaitu. adalah proyeksi perspektif tiga titik. Demikianlah transformasi dan

Dan .

Perhatikan bahwa dua baris terakhir harus ditulis ulang dengan mempertimbangkan fakta bahwa ini adalah proyeksi ke bidang. Lalu matriksnya

Memecahkan persamaan, kita mendapatkan , yaitu. pusat kubus satuan.

Sebagai pendekatan ketiga untuk mempertimbangkan persamaan (3-73), kita perhatikan bahwa jika koordinat beberapa titik dalam ruang suatu benda dan pada proyeksi perspektif diketahui, maka elemen transformasi dapat ditemukan. Elemen-elemen ini nantinya dapat digunakan untuk mencari lokasi titik-titik yang tidak diketahui menggunakan cara kedua yang dijelaskan di atas. Untuk menunjukkannya, mari kita tulis ulang (3-73) ke dalam formulir. Jadi, kami menemukan transformasi yang memunculkannya proyeksi perspektif, misalnya foto. Perhatikan bahwa dalam kasus ini tidak diperlukan informasi sebelumnya tentang konversi. Jika, misalnya, ini adalah foto, maka tidak perlu mengetahui lokasi atau orientasi kamera. Dalam bentuk matriks, sistem persamaannya ditulis sebagai berikut:

, (3-77)

di mana subskrip sesuai dengan titik-titik dengan lokasi yang diketahui. Persamaan (3-77) ditulis dalam bentuk yang lebih ringkas:

Karena persamaan (3-77) merupakan persamaan homogen, maka persamaan tersebut mengandung faktor skala yang berubah-ubah. Oleh karena itu, kita dapat menyamakannya dengan satu dan menormalkan transformasi yang dihasilkan. Sistem direduksi menjadi 11 persamaan atau 5 1/2 poin. Jika transformasi dinormalisasi, maka kolom terakhir dipindahkan ke sisi kanan dan persamaan matriks tak homogen terpecahkan. Di bawah ini adalah contohnya.

Mengganti hasil ini ke dalam matriks akan menghasilkan

.

Halo para pembaca blog yang budiman! Anda mungkin pernah melihat caranya dengan menggambar garis dan bentuk sedang dibuat gambar sederhana . Gambar yang kompleks, seperti foto, biasanya dibuat secara terpisah, misalnya dengan cara dipindai atau diterapkan editor grafis. Anda juga dapat membuat gambar dan memasukkan sekumpulan piksel ke dalam array. Prosedur ini banyak digunakan dalam menghasilkan gambar fraktal.

Jika gambar disimpan dalam file di disk komputer atau di jaringan global, mereka dapat dibaca dan kemudian ditampilkan di layar menggunakan objek kelas Graphics. Sejak Java SE 1.5, sangat mudah untuk mengatur pembacaan gambar. Jika gambar disimpan di berkas lokal, cukup gunakan cuplikan kode berikut:

String nama file = "..."; Gambar gambar= ImageIO.read(File baru(nama file));

Saat memanggil suatu metode, Anda juga dapat menentukan URL:

String nama file = "..."; Gambar gambar = ImageIO.read(URL baru(nama url));

Jika gambar tidak tersedia, metode read() akan memunculkan IOException. Untuk saat ini kami akan berasumsi bahwa kami program sederhana menangkap pengecualian dan mencetak isi tumpukan.

Komponen cat kekosongan publik(Grafik g) ( ... g.drawImage(gambar, x, y, null); )

Program di akhir pelajaran melakukan lebih banyak hal dengan menampilkannya berulang kali gambar yang ditentukan. Hasil program ditunjukkan pada Gambar 1. Outputnya dilakukan menggunakan metode paintComponent(). Pertama, satu salinan gambar ditempatkan di sebelah kiri sudut atas jendela, dan kemudian metode copyArea() dipanggil, yang menyalinnya.

Untuk(int i = 0; i * lebar gambar<= getWidth(); i++) for(int j = 0; j * imageHeight <= getHeight(); j++) if(i + j >0) g.copyArea(0, 0, lebar gambar, tinggi gambar, i * lebar gambar, j * tinggi gambar);

Di bawah ini adalah source code lengkap program manipulasi gambar:

Impor java.awt.*; import java.io.*; import javax.imageio.*; import javax.swing.*; kelas publik ImageTest ( public static void main(String args) ( EventQueue.invokeLater(new Runnable() ( public void run() ( ImageFrame frame = new ImageFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true ) ) )); ) class ImageFrame memperluas JFrame ( public ImageFrame() ( setTitle("ImageTest"); setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); // Menambahkan komponen ke frame. ImageComponent komponen = new ImageComponent(); (komponen ); ) int final statis publik DEFAULT_WIDTH = 300; int akhir statis publik DEFAULT_HEIGHT = 200; ) class ImageComponent extends JComponent ( public ImageComponent() ( // Dapatkan gambar. coba ( image = ImageIO.read(file baru("src /ball) .png")); ) catch(IOException e) ( e.printStackTrace(); ) ) public void paintComponent(Graphics g) ( if(image == null) kembali; int imageWidth = image.getWidth(ini) ; int imageHeight = image.getHeight(ini); // Tampilkan gambar di pojok kiri atas.

// Beberapa tampilan gambar di panel.

Proses keluaran grafis 3D lebih kompleks daripada proses 2D terkait. Dalam kasus dua dimensi, Anda cukup menentukan jendela di ruang koordinat dunia dua dimensi dan menampilkan bidang pada permukaan tampilan dua dimensi. Secara umum, objek yang dijelaskan dalam koordinat dunia dipotong sepanjang batas volume yang terlihat, dan kemudian diubah menjadi bidang keluaran untuk tampilan. Kompleksitas yang melekat pada kasus tiga dimensi muncul karena permukaan penglihatan tidak memiliki dimensi ketiga.

Kesenjangan antara objek spasial dan gambar bidang diatasi dengan memperkenalkan proyeksi, yang menampilkan objek tiga dimensi pada proyeksi dua dimensi. pesawat gambar (KP).

Beras. 3.44. Proses mengeluarkan informasi grafis tiga dimensi

Dalam proses menampilkan informasi grafik tiga dimensi (Gbr. 3.44.), kami mengatur volume yang terlihat (VO) di ruang dunia, proyeksi ke CP dan bidang keluaran pada permukaan tampilan. Secara umum, objek yang didefinisikan dalam ruang dunia 3D dipotong hingga batas volume terlihat 3D dan kemudian diproyeksikan. Apa yang ada di dalam jendela, yang merupakan proyeksi volume yang terlihat ke bidang gambar, kemudian diubah (dipetakan) menjadi bidang keluaran dan ditampilkan pada perangkat grafis.

Beras. 3.45. Bidang gambar dan parameter penentunya

Bidang gambar ditentukan (Gbr. 3.45.) oleh titik tertentu pada bidang, yang akan kita sebut titik referensi (PL) dan normal pada bidang gambar (NKP). CP dapat diposisikan secara sewenang-wenang relatif terhadap objek yang diproyeksikan yang ditentukan dalam koordinat dunia. Ia dapat melintasinya, lewat di depan atau di belakang objek.

Untuk mendefinisikan sebuah jendela, kita memerlukan sistem koordinat pada panel kontrol, yang kita sebut sistem koordinat UV. Permulaannya adalah PL. Arah sumbu V di titik kontrol menentukan vektor vertikal (VV): proyeksi VV pada CP berimpit dengan sumbu V.

PL dan dua arah vektor NKP dan BB ditentukan dalam sistem koordinat dunia tangan kanan. Memiliki sistem di pos pemeriksaan UV, kita dapat mengatur nilai minimum dan maksimum kamu Dan V, mendefinisikan jendela (Gbr. 3.46.).

Beras. 3.46. Jendela keluaran bidang gambar

Perhatikan bahwa jendela tidak harus simetris dibandingkan dengan PL.

Volume semu sebagian ditentukan oleh jendela dan membatasi porsi ruang dunia yang akan diproyeksikan.

Dalam kasus proyeksi sentral, VO juga ditentukan oleh pusat proyeksi (Gbr. 3.47.). Parameter ini ditentukan dalam koordinat dunia relatif terhadap PL. VO adalah piramida yang tidak terbatas pada satu arah, yang puncaknya berada di tengah proyeksi, dan sisi-sisinya melewati jendela.

Beras. 3.47. Volume terlihat untuk proyeksi pusat

Titik-titik yang terletak di belakang pusat proyeksi tidak termasuk dalam VO dan oleh karena itu tidak akan diproyeksikan.

Beras. 3.48. Volume semu dari proyeksi paralel

Dalam kasus proyeksi paralel, VO juga ditentukan oleh arah proyeksi (Gbr. 3.48.). Ini adalah paralelepiped tak terbatas, yang sisi-sisinya sejajar dengan arah proyeksi.

Secara umum, arah proyeksi mungkin tidak sesuai dengan NCP.

Dalam kasus proyeksi paralel ortografik (tetapi tidak miring), sisi lateral VO tegak lurus terhadap CP.

Dalam beberapa kasus, VO mungkin perlu dibuat final (Gbr. 3.49. - 3.51.). Untuk melakukan ini, atur FSP (bidang potong depan) dan BSP (bidang potong belakang).

Beras. 3.49. VO terpotong untuk proyeksi pusat

Beras. 3.50. VO terpotong untuk proyeksi paralel ortografik

Beras. 3.51. VO terpotong untuk proyeksi paralel miring.

Normal NCP diarahkan relatif terhadap arah proyeksi dan juga normal terhadap PSP dan ZSP.

Mengirimkan karya bagus Anda ke basis pengetahuan itu mudah. Gunakan formulir di bawah ini

Pelajar, mahasiswa pascasarjana, ilmuwan muda yang menggunakan basis pengetahuan dalam studi dan pekerjaan mereka akan sangat berterima kasih kepada Anda.

Diposting pada http://www.allbest.ru/

Perkenalan

1.1 Pendekatan yang ada

2.6 Menghapus tepi tambahan

3. Pengembangan program

3.1 format DXF

3.2 Format masukan

3.3 Jejak

3.4 Memilih alat pengembangan

3.5 Diagram kelas

Kesimpulan

Sumber yang digunakan

Aplikasi

Perkenalan

Merekonstruksi model 3D dari proyeksi 2D telah menjadi topik penelitian penting sejak lama. Bidang penelitian ini telah menemukan penerapan utamanya di bidang teknik. Sebelum membuat suatu bagian, berbagai gambar dan proyeksi dibuat. Untuk mendapatkan gambaran yang lebih luas tentang apa hasil akhirnya, dibuatlah model 3D, meskipun proses ini memakan waktu yang cukup lama.

Terobosan terbesar di bidang restorasi model 3D dilakukan oleh Wesley dan Markowsky dalam karyanya yang mengusulkan penggunaan model wireframe sebagai langkah perantara dalam proses restorasi. Saat ini mereka adalah salah satu peneliti paling terkenal di bidang ini, dan pendekatan mereka digunakan dalam pengembangan hampir semua algoritma baru untuk memulihkan model 3D.

Proses pemulihan, yang melibatkan interaksi pengguna dengan sistem, seringkali memakan banyak waktu, akibatnya berbagai algoritma dikembangkan untuk pemulihan otomatis model 3D. Algoritma ini dapat dibagi menjadi dua jenis tergantung pada pendekatan yang ada. Saat ini, ada dua pendekatan utama untuk memulihkan model 3D: metode pemetaan batas dan metode geometri padat konstruktif. Metode menampilkan batas terdiri dari pengerjaan garis (tepi) dan simpul, sedangkan metode geometri padat konstruktif didasarkan pada pengerjaan dengan primitif geometris, seperti kubus atau bola.

Ada dua tahap utama dalam merekonstruksi objek 3D dari proyeksi: membuat model pseudo-wireframe suatu objek (pseudo-wireframe) dan membuat objek (solid). Model kerangka semu terdiri dari sekumpulan simpul dan sisi yang menghubungkan simpul-simpul tersebut. Ini mungkin berisi informasi yang tidak perlu, tetapi pada saat yang sama lebih lengkap tentang objek yang dideskripsikan. Berbeda dengan model wireframe, model ini dapat menyertakan tepi “ekstra” milik proyeksi yang mendeskripsikannya (Gbr. 1). Satu model pseudo-frame dapat mendeskripsikan sejumlah besar objek 3D (Gbr. 2).

Gambar 1 Tiga proyeksi segi delapan

Gambar 2 (a) - model kerangka semu dari segi delapan, (b, c, d) - kemungkinan benda padat dari model ini

Saat menganalisis aplikasi yang ada yang menyediakan kemampuan untuk bekerja dengan model 3D, beberapa solusi paling populer diidentifikasi: Autodesk 3DS Max, Autodesk Autocad, Kompas-3D, Matlab, Blender (Tabel 1).

Tabel perbandingan solusi yang ada

Kebutuhan akan pengetahuan khusus

Memulihkan model wireframe

Eksekusi otomatis suatu fungsi

Lisensi

Aplikasi

Kerugian utama dari semua sistem ini, kecuali yang terakhir, adalah distribusinya yang berbayar. Selain itu, Kompas-3D dan Blender tidak memiliki fungsi mengembalikan model 3D dari proyeksi 2D.

Autocad banyak digunakan dalam bidang desain teknik, namun sistem yang diterapkan dalam program ini untuk memulihkan model 3D dari proyeksi didasarkan pada interaksi pengguna dengan sistem.

3DS Max bisa dibilang merupakan sistem yang paling umum dan banyak digunakan untuk bekerja dengan grafik tiga dimensi. Program ini menyediakan kemampuan untuk memulihkan model 3D dari proyeksi, namun memiliki antarmuka yang agak rumit, dan juga hanya berfungsi di sistem operasi Windows.

Matlab adalah paket perangkat lunak lintas platform yang, seperti Autocad, banyak digunakan dalam bidang desain teknik. Selain itu, Matlab adalah bahasa pemrograman dengan interpretasi tingkat tinggi, sehingga diperlukan pengetahuan yang tepat tentang bahasa tersebut untuk dapat bekerja.

Dengan demikian, relevansi pengembangan program yang didistribusikan secara bebas untuk memulihkan objek 3D wireframe dari tiga proyeksi 2D untuk sistem operasi OS X, yang dapat diakses oleh pengguna tanpa pelatihan khusus, adalah jelas. Pilihan sistem operasi ditentukan oleh fakta bahwa dari aplikasi yang terdaftar hanya Autocad, Blender dan Matlab yang mendukungnya. Dan aplikasi ini tidak menyediakan fungsionalitas yang diperlukan, atau memerlukan pengetahuan tambahan untuk bekerja dengannya, atau tidak didistribusikan secara bebas.

Tujuan dari pekerjaan kualifikasi akhir ini adalah untuk mengembangkan program pemulihan objek bingkai 3D yang terdiri dari polihedra dari proyeksi ortogonal 2D untuk sistem operasi OS X.

Untuk mencapai tujuan pekerjaan, tugas-tugas berikut perlu diselesaikan:

1. Mempelajari format penyajian gambar teknik yang ada;

2. Pertimbangkan pendekatan utama untuk memulihkan objek 3D dari proyeksi 2D;

3. Mempelajari algoritma yang ada untuk merekonstruksi model tiga dimensi dari tiga proyeksi ortogonal dua dimensi;

4. Kembangkan program yang mengambil tiga proyeksi 2D sebagai masukan (tampak atas, tampak depan, tampak samping) dalam salah satu format CAD dasar (DXF) dan mengembalikan model wireframe 3D yang benar dari objek tertentu sebagai keluaran.

5. Uji aplikasi menggunakan contoh yang diketahui.

program restorasi tiga dimensi ortogonal

1. Tinjauan pendekatan dan solusi perangkat lunak yang ada

1.1 Pendekatan yang ada

1.1.1 Metode tampilan batas

Beberapa penelitian pertama di bidang rekonstruksi model 3D dari proyeksi dilakukan oleh Profesor Masanori Idesawa pada tahun 1973 dan dipresentasikan dalam karyanya “Sebuah sistem untuk menghasilkan sosok padat dari tiga tampilan”. Idesawa mengusulkan metode untuk merekonstruksi simpul, tepi, dan permukaan 3D untuk objek polihedral. Selain itu, karena sekumpulan simpul dan tepi tertentu (model wireframe) dapat mendeskripsikan beberapa objek, ia mengusulkan cara untuk menghilangkan tepi “hantu” untuk mendapatkan objek unik. Algoritma yang diusulkan sendiri terdiri dari langkah-langkah berikut.

Program ini menerima tiga proyeksi sebagai masukan, yang diwakili oleh kumpulan simpul dan tepi. Semua simpul direpresentasikan sebagai koordinat x, y, z dan nomor urut simpul tersebut. Mari kita mendeskripsikan sebuah simpul, lalu mendeskripsikan himpunan simpul-simpul yang terhubung ke sisi-sisinya. Jika tiga atau lebih simpul berada pada satu garis, maka simpul-simpul tersebut digabungkan menjadi satu grup. menggambarkan kelompok di mana dia berasal.

Titik-titik dalam ruang tiga dimensi digambarkan sebagai

dimana koordinat elemen ke-i dari daftar simpul,

c adalah suatu koordinat,

Jumlah simpul di,

Jumlah simpul di,

Jumlah simpul di.

Misalkan () direpresentasikan dengan kombinasi i, j, k sehingga kondisinya terpenuhi. Kemudian () membentuk matriks simpul tiga dimensi. Operasi ini diterapkan pada (1) untuk semua kombinasi i, j, k. Syaratnya dipenuhi sebagai berikut:

Jika, maka

Jika, maka,

Jika, maka

dimana adalah angka positif yang menunjukkan kesalahan.

Misalkan dan menjadi dua simpul berbeda di V. , digunakan untuk menyatakan i, j, k in. adalah elemen relatif., digunakan untuk menyatakan i, j, k in. adalah elemen relatif. Berikutnya menunjukkan elemen ke-k, yang merupakan elemen relatif. menunjukkan elemen ke-k, yang merupakan elemen relatif. Variabel serupa diadopsi untuk bidang YZ dan XZ.

Jadi, hasil dari operasi Boolean berikut adalah untuk menentukan apakah simpul-simpul tersebut terhubung oleh sebuah sisi:

Saat memulihkan permukaan depan, aturan berikut digunakan.

a) Ada k permukaan muka yang mempunyai titik potong k rusuk;

b) Suatu sisi mewakili batas dua permukaan depan, dan dalam daftar batasnya, simpul-simpul dari sisi ini muncul dalam urutan yang berbeda;

c) Batas permukaan depan tertutup.

Pertama, Anda perlu menggunakan aturan-aturan ini untuk menemukan keunggulan yang dapat didefinisikan secara unik. Kemudian kita perlu mencari semua sisi pada batas permukaan dan menyimpannya dalam sebuah daftar dan mengurutkannya sehingga memenuhi aturan (b). Terakhir, Anda perlu mengurutkan simpul tepi berlawanan arah jarum jam untuk sisi luar dan searah jarum jam untuk sisi dalam.

Ini adalah salah satu pendekatan pertama untuk merekonstruksi objek 3D. Selanjutnya, algoritma yang bekerja dengan edge menerima nama umum representasi Batas. Model dalam metode pemetaan batas dibuat menggunakan topologi dan objek geometris. Satuan dasar topologi adalah: muka (wajah depan, atau permukaan), tepi (edge) dan simpul (vertice). Muka adalah bagian terbatas dari suatu permukaan yang dimiliki oleh suatu tepi tertentu; suatu tepi adalah suatu sisi suatu muka. Pada tahun 1980, George Markowky, seorang profesor di Universitas Maine, dan Michael A. Wesley dari IBM Thomas Watson Research Institute, dalam karya mereka “Fleshing out Wireframes,” mengusulkan penggunaan model pseudo-wireframe sebagai tahap perantara dalam proses merekonstruksi objek 3D. Pekerjaan ini masih penting untuk pengembangan algoritma baru dalam kerangka metode pemetaan tepi.

1.1.2 Geometri struktur padat

Studi pertama dalam pendekatan kedua untuk merekonstruksi objek 3D dari proyeksi 2D dilakukan oleh Aldefel pada tahun 1983. Saat memasuki program, tiga proyeksi diterima, dari mana data tentang primitif dibaca. Aldefel menjelaskan kemungkinan hubungan antara primitif. Salah satu koneksi utama adalah CONTACT(n, m), yang berarti n dan m dihubungkan oleh setidaknya satu titik komunikasi. Lingkaran adalah kurva tertutup tanpa perpotongan sendiri.

Langkah 1: Bangun semua hubungan antara primitif yang dihubungkan oleh hubungan KONTAK.

Langkah 3: Hitung volume semua loop “terbuka” dan pilih loop P dengan volume maksimum. Sebuah proyeksi juga dipilih secara acak untuk dianggap sebagai siluet dasar.

Langkah 4: Asumsikan bahwa P menggambarkan siluet dasar dari satu atau lebih objek. Untuk membuktikan atau menyangkal hal ini, perlu dilakukan algoritma berikut:

· Sebuah proyeksi dipilih secara acak dan semua siluet persegi panjang yang bertepatan dengan P dicari. Jika siluet tersebut tidak ditemukan, keluar dari algoritma.

· Dalam proyeksi yang tersisa, temukan untuk masing-masing siluet persegi panjang yang bertepatan dengan c dan P. Jika tidak ada siluet seperti itu yang ditemukan, keluar dari algoritma.

· Analisis P dan temukan semua primitif yang memerlukan garis pada salah satu atau kedua proyeksi (proyeksi dasar tidak diperhitungkan).

· Untuk setiap pasangan () temukan daftar lengkap garis yang dijelaskan oleh primitifnya. Jika operasi berhasil, objek akhir diwakili oleh gabungan daftar garis yang diperoleh pada langkah ini.

Langkah 5: “Kembangkan” loop P dengan membuat semua loop yang menyertakan loop yang berdekatan dengan P jika belum ada. Tambahkan mereka ke dalam daftar, tandai dependensi baru, tandai loop baru sebagai “terbuka”, dan tandai P sebagai “tertutup”.

Langkah 6: Proyeksikan objek yang dihasilkan ke dalam bidang untuk menentukan apakah objek tersebut dijelaskan oleh proyeksi masukan. Jika ya, maka algoritme berakhir; jika tidak, lanjutkan ke langkah 3.

Algoritma yang dijelaskan hanya berfungsi untuk objek dengan ketebalan seragam. Pendekatan ini disebut Geometri Padat Konstruktif (CSG), dan konsep utamanya adalah kemampuan untuk mendeskripsikan objek kompleks secara matematis menggunakan objek yang lebih sederhana. Benda paling sederhana di CSG adalah primitif - benda dengan bentuk sederhana, seperti kubus, bola, silinder, prisma. Objek yang lebih kompleks dibuat dengan menerapkan operasi Boolean (gabungan, perpotongan, perbedaan) pada sekumpulan primitif tertentu.

1.1.3 Rekonstruksi benda padat dari enam proyeksi

Selanjutnya, Shum mengusulkan algoritma yang menggunakan enam proyeksi untuk merekonstruksi model 3D. Algoritme tidak memproses garis putus-putus pada proyeksi. Garis lurus dan lingkaran diperbolehkan pada proyeksi, serta objek polihedral dengan permukaan ortogonal terhadap setidaknya satu sumbu koordinat, dan silinder ortogonal.

Pada awal pekerjaan, proyeksi dibagi menjadi tiga kelompok proyeksi yang berdekatan dan diposisikan relatif satu sama lain. Dalam proses ekstrusi tambahan, salah satu kontur menjadi generator, dan yang kedua menjadi panduan. Tiga pasang terbentuk dari enam proyeksi. Untuk memastikan bahwa kontur pembentuk dan pemandu tidak sejajar, operasi ekstrusi berikut tidak dilakukan :, dll. , dimana f-depan, R-belakang, t - atas, b - bawah, r- kanan, l- kiri. Selain itu, hanya ada enam kombinasi pasangan proyeksi untuk proses ekstrusi tambahan:

Ekstrusi tambahan dibagi menjadi tiga langkah: mengelompokkan kontur pembangkit menjadi kontur segmen, mengekstrusi ketebalan dalam proyeksi pemandu, dan melakukan ekstrusi.

Dalam proses ekstrusi tambahan, hanya kontur pembangkit, garis luar permukaan pembangkit, yang diperhitungkan. Pada awalnya, semua titik balik pada jalur pemandu ditempatkan, kemudian diproyeksikan tegak lurus terhadap permukaan proyeksi umum. Titik-titik tersebut digunakan untuk membagi kontur pembentuk menjadi beberapa segmen kontur. Hasilnya adalah matriks SGS:

dimana kontur segmen ke-i,

n - jumlah kontur segmen untuk ekstrusi.

Jarak antara titik balik sepanjang arah ekstrusi menentukan ketebalan ekstrusi: , dimana m adalah jumlah ekstrusi tambahan.

Selama proses ekstrusi itu sendiri, semua kontur segmen dihubungkan dengan ketebalan ekstrusi sehingga membentuk benda padat primitif. Operasi Boolean yang menggabungkan benda padat primitif kemudian akan menghasilkan benda padat yang diekstrusi.

Hasilnya, untuk setiap pasangan proyeksi, penyatuan semua primitif akan menghasilkan dua benda padat yang diekstrusi. Operasi persimpangan diterapkan pada mereka untuk membentuk persimpangan padat. Perpotongan benda padat yang berpotongan untuk semua pasangan proyeksi akan menghasilkan benda padat akhir.

Teknik geometri padat konstruktif dan pemetaan tepi digunakan untuk membuat objek 3D yang dihasilkan. Biasanya, pemulihan model pseudo-framework merupakan tahapan dalam pengoperasian algoritma kedua pendekatan. Namun, tugas pekerjaannya adalah merekonstruksi model wireframe dari proyeksi 2D. Kontribusi utama terhadap pengembangan algoritma rekonstruksi model wireframe dibuat oleh Markowsky dan Wesley. Saat mengembangkan algoritme selanjutnya, pendekatan merekalah yang selalu digunakan saat memulihkan model objek wireframe. Oleh karena itu, algoritma khusus ini dipilih untuk mengembangkan aplikasi.

2. Deskripsi algoritma yang digunakan

2.1 Mengekstraksi informasi ortografi 2D

Model bingkai suatu objek dibuat menggunakan proyeksi depan (FV - tampak depan), proyeksi samping - tampak kanan (SV - tampak samping) dan proyeksi atas - tampak atas (TV - tampak atas), yang diumpankan ke masukan program dalam format sistem desain berbantuan komputer (CAD) DXF. Setiap file proyeksi harus dianalisis dan informasi tentang komponen geometris yang tersimpan di dalamnya - simpul dan tepi - dimuat ke dalam matriks:

dimana koordinat titik - titik awal tepi,

Koordinat titik - ujung tepi,

n adalah jumlah sisi dalam proyeksi.

Setiap sisi ditentukan oleh koordinat dua simpul; koordinat satu simpul dapat muncul dalam deskripsi beberapa kali sesuai dengan jumlah sisi yang berkumpul di dalamnya.

2.2 Menandai wajah dan simpul 2D

Untuk mengurangi jumlah parameter yang menentukan tepi, setiap titik ditandai dengan nomor seri. Nomor simpul akan menggambarkan sisi-sisinya, bukan koordinat simpul-simpul tersebut. Selain itu, bagian tepinya sendiri juga ditandai dengan nomor seri. Jadi, untuk setiap proyeksi, matriks dibuat untuk menyimpan informasi tentang simpul dan tepi, masing-masing:

dimana adalah nomor urut simpul ke-i,

Koordinat titik sudut ke-i, i =1,2,…,k

k adalah jumlah simpul proyeksi.

dimana adalah objek bertipe “tepi”, i = 1,2,…,n

Setiap objek tepi berisi4 informasi berikut:

di mana nomor seri tepinya,

Nomor urut simpul yang menentukan awal tepi,

Nomor urut simpul yang menentukan ujung tepi,

jenis tulang rusuk,

n adalah jumlah tepi proyeksi.

Jadi, matriks simpul berisi nomor urut simpul proyeksi dan koordinatnya, dan matriks tepi berisi nomor urut sisi dan nomor urut simpul yang menentukan sisi tersebut. Jenis tepi diusulkan untuk diingat untuk memproses garis putus-putus pada proyeksi, yang biasanya digunakan untuk menunjukkan tepi yang tidak berada pada permukaan depan proyeksi.

Koordinat simpul proyeksi dapat berbeda secara signifikan, oleh karena itu, untuk menyederhanakan pengerjaannya, diusulkan untuk menggeser setiap proyeksi sehingga berada di kuadran pertama dan setidaknya satu titik terletak pada sumbu X dan setidaknya satu titik terletak pada sumbu Y. Untuk melakukannya, perlu dicari koordinat minimum dan koordinat minimum titik-titik pada setiap proyeksi. Setelah ini, perlu dilakukan operasi berikut untuk matriks setiap proyeksi:

dimana fv adalah elemen baris ke-i dan kolom kedua matriks,

fv adalah elemen baris ke-i dan kolom ketiga matriks.

Selanjutnya tepi proyeksi akan dibandingkan dengan tepi model wireframe. Karena satu tepi proyeksi dapat menggambarkan sejumlah besar tepi dalam model wireframe, tepi proyeksi harus memiliki panjang maksimum, dan tidak banyak segmen pendek yang terletak pada garis lurus yang sama.

Gambar 3 Tampak samping

Misalnya, Gambar 3 menunjukkan proyeksi suatu objek. Pada matriks proyeksi akhir tidak boleh terdapat beberapa sisi yang terletak pada garis yang sama dan berpotongan pada titik sudut, seperti bc, cd dan fg, gc. Jika ditemukan, maka kedua sisi yang terletak pada garis lurus yang sama dihilangkan, dan masing-masing sisi bd dan fc ditambahkan.

2.3 Menggabungkan wajah dan simpul

Untuk pekerjaan selanjutnya dengan data proyeksi, perlu dibuat dua matriks baru untuk proyeksi atas dan samping. Setelah ini, Anda perlu melakukan operasi berikut pada matriks baru:

dimana rtv adalah elemen baris ke-i dan kolom ketiga matriks (koordinat y),

rtv - elemen baris ke-i dan kolom keempat matriks (koordinat z),

rsv - elemen baris ke-i dan kolom kedua matriks (koordinat x),

rsv - elemen baris ke-i dan kolom keempat matriks (koordinat z).

Diasumsikan bahwa proyeksi yang diperoleh dari file di awal program dibuat pada skala yang sama. Untuk menyederhanakan pengerjaan model wireframe, perlu dilakukan transfer data proyeksi dari matriks titik ke matriks titik umum dan dari matriks tepi ke matriks tepi.

Data proyeksi terletak di dan secara berurutan, jadi sekarang Anda dapat dengan mudah menggambar garis tegak lurus dari semua simpul: sepanjang z untuk proyeksi depan, sepanjang y ke atas untuk proyeksi atas dan sepanjang x ke kanan untuk proyeksi samping, dan tambahkan simpul baru ke , dan tepi baru ke.

Pada tahap operasi algoritme ini, beberapa sisi tidak terhubung dengan cara apa pun, dan ada juga sisi duplikat, jadi Anda perlu menghapus simpul duplikat dan mengganti nomor seri simpul ini dengan yang sesuai yang tidak terhapuskan. . Selain itu, Anda perlu menghapus tepi duplikat dari.

2.4 Menemukan titik potong tepi

Garis-garis tegak lurus yang digambar pada langkah sebelumnya masih belum terhubung satu sama lain, sehingga perlu dicari titik potongnya. Tidak diketahui sebelumnya sisi mana yang berpotongan; Untuk masing-masing sisi, semua sisi lainnya, yang belum dicentang, diperiksa untuk melihat apakah keduanya berpotongan. Dalam pemeriksaan ini dapat dibedakan empat kasus: sisi-sisinya sejajar / berada pada garis lurus yang sama / bersilangan (terletak pada bidang sejajar) / berpotongan. Pengecekan perlu dilakukan hanya untuk memastikan bahwa ujung-ujungnya berada pada garis yang sama dan berpotongan.

2.4.1 Menentukan apakah sisi-sisinya berada pada garis yang sama

Persamaan garis yang melalui dua titik dalam ruang tiga dimensi adalah sebagai berikut:

dimana koordinat titik pertama,

Koordinat titik kedua.

Karena sisi-sisi yang diperiksa (tegak lurus yang dipulihkan) sejajar dengan setidaknya satu sumbu koordinat, pembagian dengan nol akan terjadi dalam rumus ini; untuk menghindari hal ini, Anda perlu menggunakan aturan proporsi:

Misalkan kita membandingkan sisi AB dan sisi CD, jika kita substitusikan (2) sebagai ganti koordinat titik A, sebagai ganti koordinat titik B, dan sebagai ganti koordinat titik C dan D secara bergantian, dan kedua persamaan terpenuhi, kemudian ujung-ujungnya terletak pada satu garis lurus yang sama.

Dalam hal ini, ujung-ujungnya mungkin tidak berpotongan. Jika sisi ab dan cd berpotongan, lima situasi dapat muncul:

· ujung-ujungnya berpotongan pada salah satu simpul yang ada (Gbr. 4);

Gambar 4

· ujung-ujungnya bertepatan, dalam hal ini tepi kedua dihilangkan;

· salah satu simpul dari satu sisi terletak di sisi yang lain, misalnya simpul dari sisi ab dan cd terletak dengan urutan sebagai berikut: a c b d, dalam hal ini sisi ab dan cd dihilangkan, dan sisi baru ac, cb dan bd ditambahkan ke matriks (Gbr. 5 );

Gambar 5

· satu sisi berada di dalam sisi lainnya, tetapi simpul-simpulnya tidak berhimpitan, dalam hal ini sisi yang lebih kecil dihilangkan. Misalnya pada Gambar. 6 Anda perlu menghapus tepi ab;

Gambar 6

· salah satu sisi berada di dalam sisi lainnya, dan salah satu simpul pada sisi ab berimpit dengan salah satu simpul pada sisi cd, contoh jika a = c dan letak simpul-simpul tersebut berurutan: a=c, d, b (Gbr. 7), tepi ab dihilangkan dari , dan tepi db baru ditambahkan ke matriks.

Gambar 7

2.4.2 Pengertian perpotongan tepi

Dua garis lurus AB dan CD:

melewati titik-titik, dan karenanya, berpotongan jika syaratnya terpenuhi:

dan jika rank matriks ini adalah dua. Dengan kata lain, untuk garis lurus AB dan CD, Anda perlu mencari koefisien u dan v sedemikian rupa sehingga sistem tiga persamaan (3) mempunyai solusi:

Penentu matriks 3x3 dihitung menggunakan rumus (4):

Pangkat suatu matriks sama dengan jumlah baris bukan nol pada matriks eselon. Untuk mengubah matriks menjadi bentuk bertahap, Anda dapat menggunakan metode Gaussian; untuk melakukan ini, kami memperkenalkan transformasi matriks dasar:

I. Permutasi dua kolom atau baris suatu matriks;

II. Mengalikan elemen-elemen pada baris atau kolom yang sama dengan angka yang sama selain nol;

AKU AKU AKU. Menjumlahkan elemen-elemen pada satu baris atau kolom dengan elemen-elemen yang bersesuaian pada baris atau kolom lain, dikalikan dengan angka yang sama.

Untuk mereduksi matriks menjadi bentuk bertahap menggunakan metode Gaussian, Anda harus melakukan langkah-langkah berikut:

1. Pilih elemen selain nol (elemen utama) pada kolom pertama. Jika garis dengan elemen terdepan (leading line) bukan yang pertama, atur ulang di tempat baris pertama (transformasi tipe I). Jika tidak ada elemen terdepan pada kolom pertama, lanjutkan pencarian pada sisa matriks. Anda harus menyelesaikan transformasi jika semua kolom dikecualikan.

2. Bagilah seluruh elemen garis terdepan menjadi elemen terdepan. Jika garis berada pada garis terakhir, maka transformasi berakhir.

3. Pada setiap garis di bawah garis terdepan, tambahkan garis terdepan dikalikan dengan suatu bilangan sehingga semua elemen di bawah elemen terdepan menjadi nol.

4. Setelah menghilangkan baris terdepan dan kolom terdepan, lanjutkan ke langkah 1 untuk sisa matriks.

Jika determinannya nol dan rank matriksnya dua, sistem persamaan (2) dapat diselesaikan dengan menggunakan rumus Cramer. Untuk menyelesaikan sistem tiga persamaan dengan dua persamaan yang tidak diketahui, cukup dua persamaan, sehingga penyelesaian menggunakan persamaan pertama dan kedua akan berbentuk:

Jika bidang yang titik potongnya terletak tegak lurus terhadap bidang XY, maka D sama dengan nol. Demikian pula bidang perpotongannya bisa tegak lurus terhadap bidang XZ dan YZ. Oleh karena itu, untuk mencari titik potongnya, kita pilih sepasang persamaan yang D tidak sama dengan nol. Jadi penyelesaian persamaan pertama dan ketiga adalah:

Solusi persamaan kedua dan ketiga:

Jika ujung-ujungnya berpotongan, ada empat kasus yang mungkin terjadi:

· Garis lurus yang dibatasi oleh simpul dari sisi-sisinya berpotongan, tetapi sisi-sisinya sendiri tidak berpotongan;

· Sisi-sisinya berpotongan pada salah satu simpulnya. Jika tepi ab memotong cd di titik a (Gbr. 8), maka cd dihilangkan, dan tepi baru ca dan ad ditambahkan ke dalam daftar;

Gambar 8

· Sisi-sisinya berpotongan pada titik sudut yang baru. Jika tepi ab memotong cd di beberapa titik m (Gbr. 9), ab dan cd dihilangkan, dan tepi baru am, mb, cm, md ditambahkan ke daftar;

Gambar 9

· Sisi-sisinya berpotongan dengan dua simpul (Gbr. 10).

Gambar 10

Dengan demikian, semua tepi yang ortogonal terhadap ketiga proyeksi ditambahkan ke model wireframe. Langkah selanjutnya adalah menambahkan tepi yang tidak ortogonal terhadap proyeksi apa pun.

2.5 Membuat tepi non-ortogonal

Untuk membuat semua kemungkinan sisi yang tidak ortogonal terhadap bidang proyeksi mana pun, perlu memproyeksikan simpul ke masing-masing bidang XY, XZ, dan YZ. Proyeksi berarti menyamakan salah satu koordinat titik tiga dimensi dengan nol. Jadi, ketika memproyeksikan ke bidang XY, koordinat z sama dengan nol, ketika memproyeksikan ke XZ, koordinat y sama dengan nol, dan ketika memproyeksikan ke XZ, koordinat y sama dengan nol. YZ, koordinat x sama dengan nol.

Setelah itu, untuk setiap simpul model wireframe, simpul-simpul dari proyeksi yang sesuai diurutkan (untuk XY, ​​untuk XZ, untuk YZ). Untuk setiap simpul ke-i dari proyeksi, koordinat simpul-simpul yang sesuai dengan bidang tempat model diproyeksikan dialokasikan, yang dihubungkan oleh tepi ke simpul ke-i (simpul-simpul yang berdekatan). Dalam model wireframe, tepi dibuat menghubungkan simpul ke-i dan semua simpul dengan koordinat dua dimensi yang dipilih.

Gambar 11 menunjukkan contoh proyeksi beberapa objek (a,b,c) dan hasil yang dicapai pada saat langkah 2.4.2.

Gambar 11 (a) - tampak depan, (b) - tampak atas, (c) - tampak samping, (d) - model gambar rangka saat ini

Pada tahap algoritma saat ini, perlu untuk mengembalikan tepi FL dan CO. Dari model terlihat jelas bahwa untuk itu perlu memproyeksikan model pada bidang YZ (proyeksi lateral). Dalam hal ini, koordinat y dan z setiap titik dibandingkan dengan koordinat matriks yang bersangkutan. Misalnya, titik C pada koordinat ini sama dengan titik D pada proyeksi. Untuk simpul D, ditemukan semua simpul yang dihubungkan oleh tepi ke D. Pada proyeksinya, ini adalah simpul E, N, M. Setelah itu, model wireframe memuat semua simpul yang koordinat y dan z-nya (dalam hal ini) sama ke koordinat y dan z dari simpul E, N atau M. Dari simpul C yang diperiksa, semua kemungkinan sisi digambar ke simpul yang ditemukan, jika sisi tersebut belum ada. Dengan demikian, tepi CA, CE, CK, CM, CH, CO, CN akan ditambahkan ke model wireframe (Gbr. 12).

Gambar 12

Dengan demikian, tepi CO yang diperlukan, yang tidak ortogonal terhadap proyeksi apa pun, ditambahkan ke daftar tepi. Semua sisi lainnya kemungkinan besar tidak termasuk dalam semua proyeksi dan akan dihapus pada langkah algoritme berikutnya. Operasi tersebut dilakukan untuk setiap titik model, serta untuk setiap proyeksi.

2.6 Menghapus tepi tambahan

Pada tahap eksekusi algoritme ini, terdapat sejumlah besar tepi dalam model kerangka semu yang tidak termasuk dalam proyeksi. Untuk menghapusnya, Anda perlu memproyeksikan simpul ke masing-masing bidang XY, XZ dan YZ dan membandingkan sisi-sisinya) dengan, dan masing-masing. Jika tepi proyeksi model bertepatan dengan salah satu tepi proyeksi yang sesuai, tetapi tidak melampaui batasnya, maka tepi tersebut akan tetap ada dalam daftar, jika tidak maka akan dihapus.

Selain algoritma untuk membangun model pseudo-frame suatu objek dari tiga proyeksi 2D, yang diusulkan oleh Markowsky dan Wesley, makalah ini mengusulkan algoritma untuk memproses garis putus-putus yang dapat digunakan untuk proyeksi yang relatif asimetris terhadap pusat.

Awalnya, diasumsikan bahwa objek, yang model pseudo-frame-nya dibuat selama algoritma, simetris terhadap pusatnya, karena hanya tiga proyeksinya yang diketahui. Pada langkah sebelumnya, tepian yang termasuk dalam proyeksi dapat dibuat, namun tidak disertakan dalam model wireframe akhir.

Mari kita pertimbangkan kemungkinan memulihkan model wireframe dari objek asimetris. Misalkan bangun tersebut simetris hanya terhadap dua bidang XY dan YZ. Untuk setiap tepi proyeksi bertitik, daftar tepi dibuat bertepatan dengan tepi bertitik. Jika Anda menghapus tepi pada sisi terdekat dan terjauh dari setiap bidang, situasi mungkin muncul di mana tepi yang diperlukan pada tepi terjauh akan terhapus. Oleh karena itu, diusulkan untuk menghapus tepi dengan koordinat z terkecil dari daftar yang dihasilkan untuk proyeksi frontal. Untuk proyeksi lateral, hapus tepi dengan koordinat x terbesar. Untuk proyeksi atas, hilangkan tepi dengan koordinat y terbesar.

Jadi, dari tiga proyeksi dua dimensi, sebagai hasil algoritma, diperoleh model pseudo-frame dengan asumsi bahwa pada tepi terjauh objek dapat terbentuk tepi-tepi yang termasuk dalam proyeksi, tetapi mungkin bukan milik proyeksi. objeknya. Pengguna diberi kesempatan untuk secara interaktif menghapus tepi yang tidak perlu.

3. Pengembangan program

3.1 format DXF

DXF TM adalah format file terbuka untuk pertukaran data antara aplikasi desain berbantuan komputer (CAD). Itu dibuat untuk Autocad oleh Autodesk dan didukung oleh hampir semua sistem CAD pada platform PC. Selain format DWG, ini adalah salah satu format file paling umum untuk bertukar informasi grafis, namun DWG adalah format berpemilik, sedangkan Autodesk menyediakan spesifikasi gratis untuk DXF. Format DXF berisi semua informasi tentang suatu gambar dalam bentuk data berlabel. Artinya berbagai data diwakili oleh bilangan bulat.

Format DXF terdiri dari tujuh bagian berikut (lihat Lampiran A Gambar 3):

· HEADER - berisi informasi dasar tentang gambar. Misalnya, nama program tempat file dibuat, versi program, koordinat maksimum dan minimum pada gambar dapat disimpan di sini (lihat Lampiran A, Gambar 4).

· CLASSES - berisi informasi tentang instance kelas yang dideklarasikan dalam aplikasi, yang digunakan di bagian BLOK, ENTITAS, dan OBJEK.

· TABEL - menyimpan array data, seperti tabel lapisan, tabel gaya, tabel tipe garis (lihat Lampiran A, Gambar 5).

· BLOK - menyimpan data tentang primitif yang digabungkan menjadi blok. Blok tersebut memiliki pengidentifikasi dan nama unik dan dapat digunakan di bagian ENTITIES (lihat Lampiran A, Gambar 7).

· ENTITAS - menyimpan data tentang primitif (lihat Lampiran A, Gambar 6).

· OBJEK - berisi data tentang objek non-grafis yang digunakan dalam aplikasi yang ditulis dalam AutoLISP dan ObjectARX.

· THUMBNAILIMAGE - menyimpan gambar dari apa yang ada pada gambar.

3.2 Format masukan

Data masukan disajikan dalam bentuk file tiga proyeksi: tampak depan, tampak atas, tampak samping, dalam format DXF. Program perlu mengetahui proyeksi setiap file, sehingga proyeksi tersebut harus diberi nama “FV.dxf” atau “fv.dxf”, “TV.dxf” atau “tv.dxf”, “SV.dxf” atau “sv. dxf” " masing-masing. Proyeksi harus dijelaskan dengan garis. Penting untuk diperhatikan bahwa garis yang terletak di luar tepi proyeksi harus digambarkan menggunakan garis putus-putus (Gbr. 13).

Gambar 13 Proyeksi huruf “T”. (a) -tampak atas, (b) -tampak depan, (c) -tampak samping

Program ini mengenali garis putus-putus yang memiliki substring "DASHED" di namanya. Semua jenis garis lainnya dikenali sebagai normal.

3.3 Jejak

Sebagai hasil dari program, model bingkai 3D dari suatu objek terbentuk, dijelaskan oleh tiga proyeksi yang diperoleh pada masukan ke program (Gbr. 14).

Gambar 14 Hasil program. (a) - tampak atas, (b) - tampak depan, (c) - tampak samping, (d) - model bingkai semu yang dihasilkan.

Karena hasil dari algoritma yang dijelaskan adalah model pseudo-frame, pengguna dapat memilih dan menghapus tepi yang menurutnya tidak diperlukan. Dalam hal ini, fungsi “Undo” dan “Redo” diimplementasikan menggunakan kelas “NSUndoManager”.

3.4 Memilih alat pengembangan

Pekerjaan ini mengusulkan untuk mengembangkan aplikasi yang berjalan di bawah sistem operasi OS X. Mengingat hal ini, bahasa Objective C berorientasi objek dan lingkungan pengembangan Xcode dipilih sebagai bahasa pengembangan. Kerangka kerja DXFReader dipilih untuk bekerja dengan file DXF. Saat mengurai file, ia mengembalikan array primitif yang terdapat dalam file dan datanya. Untuk menampilkan proyeksi dan model wireframe di layar, metode kerangka “QuartzCore” digunakan.

3.5 Diagram kelas

Gambar 15 Diagram kelas aplikasi yang dikembangkan untuk memulihkan objek 3D wireframe dari proyeksi 2D

Kelas utama dari program ini adalah "Dokumen", di mana objek kelas "Wireframe" dibuat dan metode "kawat" dipanggil, di mana model wireframe dibuat. Selain itu, "Dokumen" menangani antarmuka pengguna. Semua data tentang proyeksi dan model wireframe disimpan dalam instance kelas “Model”. Kelas pada grup “Views” adalah kelas yang memproses tampilan proyeksi dan model wireframe itu sendiri. “View1” menampilkan tampilan depan, “View2” menampilkan tampilan atas, “View3” menampilkan tampilan samping, “ShowView” memproses tampilan wireframe menggunakan metode yang akan dijelaskan di bagian berikutnya. Kelas-kelas dalam grup "Operasi" berisi metode kelas untuk bekerja dengan simpul (kelas "Vertikal") dan tepi (kelas "Tepi"), serta beberapa operasi matematika (kelas "AAMath").

3.6 Menampilkan model gambar rangka

Saat mendeskripsikan suatu gambar, matriks simpul berukuran A digunakan untuk menampilkannya di layar.

dimana koordinat x, y, z dari titik ke-i,

n - jumlah simpul.

Elemen keempat garis tersebut adalah koordinat homogen k, dan untuk lebih jelasnya kita asumsikan k=1. Selama transformasi, elemen ini diubah dan disesuaikan. Jadi, dalam koordinat homogen, setiap titik direpresentasikan sebagai

Untuk memperoleh koordinat real selama transformasi, setiap baris matriks A perlu dibagi dengan elemen keempat baris tersebut.

Program ini mengimplementasikan transformasi grafik komputer tiga dimensi seperti

· Rotasi di sekitar sumbu koordinat;

· Penskalaan sumbu;

· Pergeseran sepanjang sumbu koordinat.

Untuk melakukan transformasi bersesuaian, matriks A perlu dikalikan dengan matriks transformasi bersesuaian.

Rotasi pada sumbu Ox dengan sudut diwakili oleh matriks:

Rotasi di sekitar sumbu Oy dengan suatu sudut diwakili oleh matriks:

Penskalaan sepanjang sumbu diwakili oleh matriks:

di mana d adalah faktor skala.

Pergeseran sepanjang sumbu koordinat diwakili oleh matriks:

di mana dx adalah koefisien pergeseran sepanjang sumbu Ox,

dy - koefisien pergeseran sepanjang sumbu Oy,

dz - koefisien pergeseran sepanjang sumbu Oz.

Perlu dicatat bahwa setelah proses restorasi, angka tersebut sepenuhnya berada di kuadran pertama bidang XZ (Gbr. 16).

Gambar 16 Contoh hasil program sebelum ditampilkan di layar

Untuk kenyamanan bekerja dengan suatu gambar, pusatnya perlu digeser ke titik asal koordinat; untuk melakukan ini, Anda perlu mengalikan matriks A dengan matriks,

Hanya koordinat x dan y dari matriks A yang ditampilkan di layar. Karena di NSView pusat koordinat berada di titik kiri bawah jendela, saat menampilkan gambar secara normal, variabel drawX ditambahkan ke setiap koordinat x, dan drawY variabel ditambahkan ke setiap koordinat y. Awalnya, drawX sama dengan setengah lebar jendela “ShowView”, dan drawY sama dengan setengah tinggi jendela “ShowView”. Nilai-nilai ini berubah seiring dengan perubahan posisi pusat koordinat.

Kesimpulan

Tugas-tugas berikut diselesaikan dalam pekerjaan:

· Mempelajari format penyajian gambar teknik yang ada;

· Algoritma yang ada untuk merekonstruksi model wireframe tiga dimensi dari tiga proyeksi ortogonal dua dimensi dipelajari;

· Sebuah algoritma untuk menghilangkan tepi berlebih pada permukaan wajah yang dijelaskan oleh proyeksi, ditunjukkan pada proyeksi dengan garis putus-putus, diusulkan;

· Sebuah aplikasi telah dikembangkan yang mengambil tiga proyeksi 2D sebagai masukan (tampak atas, tampak depan, tampak samping) dalam format DXF dan mengembalikan model wireframe 3D yang benar dari objek tertentu sebagai keluaran.

Hasil pekerjaannya adalah program untuk memulihkan objek 3D wireframe dari proyeksi 2D untuk sistem operasi OS X. Program ini mengimplementasikan pembuatan otomatis model pseudo-frame; pengguna dapat memperoleh model wireframe yang diperlukan dengan menghilangkan tepi pada hasilnya model pseudo-frame yang menurutnya tidak diperlukan.

Di masa depan, kami berencana mempelajari algoritme untuk memulihkan objek padat dari proyeksi 2D dan menambahkan fungsionalitas ini ke program. Dimungkinkan juga untuk mempelajari proses rekonstruksi objek tiga dimensi dari sekumpulan foto.

Sumber yang digunakan

1. Aldefeld, B. (1983). Tentang pengenalan otomatis struktur 3D dari representasi 2D. Desain Berbantuan Komputer, 15(2), 59-72.

2. Zözek, A. & Gülesin, M. (2004). Rekonstruksi model 3D dari tampilan ortografi 2D menggunakan ekstrusi padat dan revolusi. Jurnal Teknologi Pengolahan Bahan, 152, 291-298.

3.Format DXF. (nd). Diakses pada 10 Februari 2014, dari http://www.autodesk.com/techpubs/autocad/acad2000/dxf/dxf_format.htm

4. Furferi, R., Governi, L., Palai, M., & Volpe, Y. (2011). Pengambilan Model 3D dari analisis gambar mekanik. Jurnal Internasional Mekanika, 5(2), 91-99.

5. Governi, L. & Furferi, R. & Palai, M. & Volpe, Y. (2013). Rekonstruksi geometri 3D dari tampilan ortografis: Sebuah metode yang didasarkan pada pemrosesan gambar 3D dan perpindahan data. Komputer di industri, 64, 1290-1300.

6. Idesawa, M. (1973). Sebuah sistem untuk menghasilkan angka solid dari tiga tampilan. Banteng JSME, 16, 216-225.

7. Lee, H. & Han, S. (2005). Rekonstruksi padatan revolusi yang berinteraksi 3D dari pandangan ortografik 2D. Desain Berbantuan Komputer, 37, 1388-1398.

8. Markowsky, G. & Wesley, M. (1980). Menyelesaikan wireframe. Jurnal Penelitian dan Pengembangan IBM, 24(5), 582-597.

9. Shum, SSP, Lau, WS, Yuen, MMF, & Yu, KM (1997). Rekonstruksi padat dari tampilan ortografik buram menggunakan ekstrusi tambahan. Grafik Komputer, 26(6), 787-800.

10. SourceForge.net: DXFReader - Proyek Web Hosting - Perangkat Lunak Sumber Terbuka. (2009, 22 Februari). Diakses pada 10 Januari 2014, dari http://dxfreader.sourceforge.net

11. Wesley, MA & Markowsky, G. (1981). Menyempurnakan proyeksi, IBM Journal of Research and Development, 25(6), 934-954.

12. Maltsev A.I. Dasar-dasar aljabar linier. -- Ed. ke-3, direvisi, M.: “Nauka”, 1970. -- 400 hal.

Aplikasi

Gambar 1 Struktur file DXF

Gambar 2 Struktur bagian HEADER dalam file DXF

Gambar 3 Struktur bagian TABLES pada file DXF

Gambar 4 Struktur bagian ENTITIES pada file DXF

Menggambar. Struktur bagian BLOK dalam file DXF

Diposting di Allbest.ru

...

Dokumen serupa

    Algoritma grafik komputer modern. Algoritma untuk konstruksi gambar. Model iluminasi global Whitted. Pemilihan dan pembenaran bahasa pemrograman dan lingkungan. Kelas tambahan properti objek tiga dimensi. Ketentuan penggunaan program.

    tugas kursus, ditambahkan 24/06/2009

    Otomatisasi pekerjaan desain dan konstruksi serta penggunaan AutoCAD untuk menghasilkan gambar tiga dimensi. Kemampuan untuk mengonversi dan mengedit model, memperoleh gambar datar bagian-bagian, dan menyesuaikan sistem dengan kebutuhan pengguna.

    tugas kursus, ditambahkan 13/10/2010

    Tipologi properti suatu objek, hubungannya dan model representasi informasi. Gambaran mata pelajaran berupa model logis dan fisik. Persyaratan untuk sistem basis data. Keuntungan arsitektur tiga tingkat. Proses mengidentifikasi objek.

    kuliah, ditambahkan 19/08/2013

    Dasar-dasar pemrograman dalam bahasa VB.NET. Lingkup penerapan gambar tiga dimensi. Format penyimpanan untuk paket grafik teknik. Manfaat pemodelan 3D. Pengembangan program untuk memutar gambar tiga dimensi di VB.NET dan VRML.

    tugas kursus, ditambahkan 03/11/2013

    Pengertian konsep grafik komputer tiga dimensi. Fitur pembuatan objek 3D menggunakan operasi Boolean, permukaan yang dapat diedit, berdasarkan primitif. Pemodelan objek tiga dimensi menggunakan paket software Autodesk 3ds Max.

    tesis, ditambahkan 13/04/2014

    Menyusun panduan pengguna untuk memulihkan informasi Anda yang hilang sendiri. Metode pemulihan otomatis sederhana menggunakan utilitas khusus dan pemulihan memori manual menggunakan editor.

    tesis, ditambahkan 27/04/2010

    Komponen utama lingkungan Delphi yang digunakan dalam program untuk mengompresi dan memulihkan file. Kode program, membagi array menjadi beberapa interval. Memeriksa elemen tertentu dari kata kode. Cari kata kode di sisanya. Hasil pengujian aplikasi.

    tugas kursus, ditambahkan 19/12/2010

    Studi tentang kemungkinan menggunakan 3D studio Max dalam proses mempelajari disiplin "Perkuatan dan penyetelan mobil". Membuat model berdasarkan proyeksi kubus. Penggunaan IT baru di berbagai kelas, kelebihannya dibandingkan sistem pelatihan standar.

    artikel, ditambahkan 16/04/2012

    Analisis umum proses teknologi yang dilaksanakan oleh unit, tujuan dan kondisi pelaksanaannya. Pengembangan diagram blok objek kontrol. Identifikasi model saluran untuk mengubah pengaruh koordinat. Implementasi model dan kecukupannya.

    tugas kursus, ditambahkan 29/09/2013

    Tahapan perkembangan komputer grafis. Konsep umum tentang grafik tiga dimensi. Organisasi proses konstruksi proyeksi. Model kawat, pemotongan muka non-depan, rotasi. Implementasi perangkat lunak konstruksi gambar. Konstruksi model yang kompleks.

  • Sergei Savenkov

    semacam ulasan "pendek"... seolah-olah mereka sedang terburu-buru di suatu tempat