Apa perbedaan antara transformasi titik dan transformasi vektor?

11

Inilah yang disampaikan oleh dosen saya dalam kursus:

Kami hanya mempertimbangkan 4 * 4 matriks. Ini digunakan untuk memutar, skala atau menerjemahkan objek (atau kombinasi dari operasi ini). Matriks juga digunakan kemudian dalam implementasi model kamera virtual. Jika Anda tidak tahu perbedaan antara transformasi vektor dan transformasi titik, cari.

Sepertinya saya tidak dapat menemukan jawaban dan membuat akun untuk situs web ini hanya untuk pertanyaan ini.

SA
sumber
1
Sebagai pelengkap semua jawaban lain dan karena orang lain telah menjawab pertanyaan ini secara panjang lebar di tempat lain, Anda dapat memeriksa: scratchapixel.com/lessons/…
user18490

Jawaban:

9

Inilah jawaban sederhana.

Dalam 4D, untuk dapat mengalikannya dengan matriks 4x4, vektor direpresentasikan sebagai (x, y, z, 0) dan titik direpresentasikan sebagai (x, y, z, 1).

Karena baris ke-4 dari matriks 4x4 mewakili terjemahan dari matriks, representasi di atas membuatnya sehingga titik dipengaruhi oleh terjemahan, tetapi vektor tidak.

Baik vektor dan titik dipengaruhi oleh rotasi, penskalaan, dll.

Peringatan:

Ada diskusi yang lebih dalam yang bisa didapat jika Anda mengharapkan vektor memiliki properti tertentu. Misalnya, jika Anda mengubah normal segitiga dengan matriks yang sama Anda mengubah simpul segitiga, kemungkinan tidak akan benar-benar menjadi vektor normal segitiga itu lagi. Ini karena vektor normal memiliki semacam hubungan terbalik dengan simpul dari mana mereka dihitung.

Alan Wolfe
sumber
Normal tidak berfungsi karena mereka bukan vektor. Tidak tahu intro yang bagus untuk konsep itu.
MB Reynolds
@ MBReynolds Dalam arti matematika, normals adalah sebagai vektor sebagai titik atau arah. Masalahnya di sini adalah bahwa transformasi yang kita terapkan pada titik-titik permukaan untuk mengubahnya tidak berlaku untuk normal.
nbro
2
normals permukaan adalah bivektor, bukan vektor. Kita dapat menemukan normal dengan produk silang dari dua vektor, hasilnya adalah bivektor. LIHAT PER Vogensen: gist.github.com/pervognsen/c6b1d19754c2e8a38b10886b63d7bf2d
MB Reynolds
4

Dari apa yang saya pelajari, karena saya juga seorang mahasiswa, adalah bahwa Anda ingin bekerja dengan matriks untuk rotasi mengobati, scaling dan terjemahan dengan cara yang sama, yaitu mengalikan dengan matriks (yaitu, a 4 × 4 matriks).4×44×4

Ingat bahwa tanpa ini matriks, terjemahan akan diwakili dengan menjumlahkan dengan vektor, sedangkan rotasi dan skala yang diwakili menggunakan perkalian dengan masing-masing vektor dan faktor skalar.4×4

Sekarang pertanyaannya adalah: bagaimana kita beralih dari sistem koordinat 3D ke sistem 4D ? Jawabannya adalah " koordinat homogen ".

Jadi apa maksudnya? Kami membangun matriks untuk mewakili rotasi, penskalaan dan terjemahan, sehingga kami hanya menggunakan perkalian matriks untuk mewakili transformasi (misalnya, rotasi, penskalaan, dll). Bagaimana kami membuatnya secara individual, ini lebih spesifik, tetapi Anda dapat melihatnya di web.4×4

Pada titik ini, kita memiliki matriks dan 3D vektor, tidak berguna lagi, karena Anda tidak bisa kalikan 4 × 4 matriks dan 3 D vektor, karena dimensi tidak cocok. Itu sebabnya, ketika kami bekerja dengan koordinat homegeneous, kami juga perlu mengubah titik 3D kami menjadi 4D yang sesuai.4×44×43D

Bagaimana kita melakukannya?

Kami membedakan antara vektor arah dan posisi . Vektor arah, seperti namanya, memiliki arah di mana mereka menunjuk; kami juga peduli dengan panjangnya, tetapi mereka tidak terpengaruh oleh terjemahan, karena kami tidak peduli dengan posisi mereka. Vektor posisi (atau hanya "poin") dapat diterjemahkan atau dipindahkan; mereka biasanya diwakili sehubungan dengan asal, yaitu sebagai vektor dari asal ke titik itu sendiri.

0401

3Dv=(v1v2v3)v=(v1v2v30)u=(u1u2u3)u=(u1u2u31)

3D4th10

nbro
sumber
(wx,wy,wz,w)w0(x,y,z)w=1wmenggunakan multiplikasi matriks 4D, juga.
Ilmari Karonen
2

Jika Anda mencari definisi vektor dan titik, maka vektor tersebut adalah:

Kuantitas, seperti kecepatan, sepenuhnya ditentukan oleh besarnya dan arah. http://www.thefreedictionary.com/vector

Dan intinya adalah:

Objek geometrik tanpa dimensi yang tidak memiliki properti kecuali lokasi. http://www.thefreedictionary.com/point

Jadi Anda bisa mengatakan bahwa vektor adalah arah dengan skala, dan titik adalah lokasi.

Jadi, jika Anda mengubah vektor Anda hanya memutar dan skala itu. Dengan sebuah titik, Anda juga menerjemahkannya (rotasi dan penskalaan titik berada di sekitar titik asal, karena titik tersebut hanya merupakan lokasi titik itu sendiri tidak dapat diputar).

Sebagian besar vektor dan titik dimasukkan ke dalam wadah yang sama, vektor dengan 4 komponen. Satu-satunya perbedaan adalah komponen w. Jika komponen w adalah 0, maka itu adalah arah. Jika 1 maka vektor adalah sebuah titik.

Alasannya dapat ditemukan dalam matriks itu sendiri. Itu menggunakan cara Anda mengalikan vektor dengan 4 komponen dengan matriks 4x4. Jika Anda tidak tahu cara kerjanya, saya sarankan google cepat.

[rHait+scSebuahlerHait+scSebuahlerHait+scSebuahletrSebuahnslSebuahtsayaHainrHait+scSebuahlerHait+scSebuahlerHait+scSebuahletrSebuahnslSebuahtsayaHainrHait+scSebuahlerHait+scSebuahlerHait+scSebuahletrSebuahnslSebuahtsayaHain0001]

Seperti yang Anda lihat, jika komponen terakhir adalah 0, maka Anda memiliki perkalian dengan 0 dan karena itu hasilnya adalah 0 dan tidak ada terjemahan.

Ini membuatnya mudah dalam grafik komputer dengan objek poligon. Anda memiliki matriks transformasi yang sama untuk mengubah posisi tetapi juga normal. Karena normalnya memiliki komponen w ditetapkan ke 0 dan komponen posisi w adalah 1, normalnya hanya diputar (dan juga diskalakan yang dapat menyebabkan beberapa hal aneh, sehingga sebagian besar waktu normal dinormalisasi setelah itu. t sebenarnya merekomendasikan untuk menggunakan matriks yang sama untuk posisi dan rotasi karena hal-hal aneh! Lihatlah komentar @JarkkoL.) dan posisinya diterjemahkan (dan diputar dan diskalakan di sekitar titik asal).

Semoga saya tidak melakukan kesalahan: P, dan ini membantu Anda!

bram0101
sumber
2
Normalnya tidak ditransformasikan dengan matriks transformasi yang sama dengan posisi. Anda perlu menghitung kebalikan dari transpos dari sub-matriks 3x3 untuk mentransformasikan normals dengan benar untuk transformasi dengan penskalaan dan / atau skewing yang tidak seragam.
JarkkoL
@JarkkoL ya itu benar, Anda benar dengan itu. Cara terbaik adalah tidak menggunakan matriks yang sama, tetapi tergantung pada implementasinya, hal itu dilakukan. Seringkali orang tidak terlalu peduli dengan kemiringan normal, karena mereka tidak menggunakan penskalaan yang tidak seragam atau penskalaan sama sekali. Bagian tentang mengubah posisi dan normals itu lebih penting untuk menggunakan satu wadah.
bram0101