Saya mencoba memahami aritmatika vektor (dan khususnya penggunaannya dalam mesin Unity). Saya tidak dapat mengetahui bagaimana vektor dapat memiliki panjang (besarnya) meskipun hanya mewakili titik (posisi dan arah)?
Apakah itu berarti bahwa besarnya hanyalah jaraknya dari titik asal (0, 0, 0)? Atau apakah saya melewatkan sesuatu?
Normalized
dalam konteks berarti vektor baru yang mempertahankanDirection
tetapi memilikiMagnitude
1. Yaitu,Normalized
vektor dibuat dengan penskalaan vektor asli.Jawaban:
The tl; dr jawaban mungkin: Ya, Anda bisa membayangkannya seperti itu.
Tapi saya tidak yakin apakah ini mungkin tidak mengarah pada pemahaman yang salah.
Vektor bukan titik, dan ada perbedaan penting antara keduanya!
Fakta bahwa vektor biasanya direpresentasikan sebagai "panah" mungkin memberikan kesan yang salah. Faktanya, vektor bukanlah panah tunggal. Akan lebih tepat untuk mengatakan bahwa vektor adalah himpunan semua panah yang memiliki panjang dan arah yang sama . (Panah yang biasanya dilukis hanyalah salah satu dari semua panah ini). Tapi saya tidak ingin melangkah terlalu jauh ke detail matematika yang membosankan di sini.
Lebih penting lagi, ada perbedaan penting antara titik dan vektor, yang menjadi jelas dalam pemrograman grafis ketika Anda mengubah titik atau vektor. Saya tidak terbiasa dengan Unity, tetapi dari pandangan sekilas pada dokumentasi, mereka memodelkan perbedaan paling penting antara titik dan vektor di
Matrix4x4
kelas. Ini memiliki dua fungsi berbeda:Matrix4x4.MultiplyVector
danMatrix4x4.MultiplyPoint
Perbedaannya adalah, secara garis besar, bahwa vektor tidak diterjemahkan, sedangkan intinya adalah. Bayangkan matriks 4x4 berikut:
Ini menjelaskan tentang (1,2,3) terjemahan. Sekarang, ketika Anda memiliki kodesemu berikut
Maka
tp
akan menjadi (3,4,5), sementaratv
masih akan menjadi (2,3,4). Menerjemahkan vektor tidak mengubahnya (karena, seperti yang disebutkan di atas, itu adalah himpunan semua panah dengan besaran dan arah yang sama).Fakta bahwa Unity menggunakan
Vector3
kelas untuk keduanya, vektor dan untuk poin, adalah sah, tetapi mungkin membingungkan. Perpustakaan lain berdedikasi membedakan antaraPoint3D
danVector3D
, kadang-kadang dengan basis umum sepertiTuple3D
.sumber
A vector is, in fact, not a single arrow
, Anda benar, mewakili Vector3 sebagai panah tunggal adalah persis apa yang membingungkan saya. +1 untuk menyebutkan kalimat kritis ini.vector
berarti array atau banyak! Dalam C ++ Anda dapat memilikistd::vector<Vector3>
misalnya. Avector
dariVector
s.Tepat seperti itu.
Antara lain, vektor dapat merepresentasikan titik (posisi), arah dan / atau kecepatan, tergantung pada konteksnya.
Jika Anda memiliki variabel ini:
Biasanya hanya mewakili posisi, yaitu di mana ia berada di ruang 3d.
Jika Anda memiliki variabel ini:
Biasanya mewakili arah. Biasanya, vektor ini adalah vektor satuan, yaitu vektor dengan panjang 1 (tetapi tidak selalu diperlukan). Vektor satuan dan vektor Normalisasi adalah hal yang sama, keduanya panjang 1. Vektor ini sering digunakan dengan vektor lain untuk mengubah posisi mereka.
Saat menormalkan vektor, Anda kehilangan panjangnya (besarnya), tetapi arahnya tetap sama. Ada situasi ketika Anda hanya membutuhkan arah (mis. Ketika Anda ingin memindahkan objek ke arah itu), dan memiliki besaran (non-unit-length) dalam vektor akan menghasilkan hasil perhitungan yang tidak terduga.
Jika Anda memerlukan vektor normal untuk perhitungan tunggal, Anda dapat menggunakannya
myVec3.normalized
, itu tidak akan mempengaruhimyVec3
, dan jika Anda sering menggunakan vektor yang dinormalisasi itu, Anda mungkin harus membuat variabel:untuk menghindari panggilan berulang ke
normalized
metode.Dan jika Anda melihat variabel:
Biasanya mewakili kekuatan / kecepatan: vektor-vektor ini mewakili arah dan besarnya (panjangnya) adalah penting. Mereka juga dapat diwakili dengan
Vector3 mDirection;
dan afloat mSpeed;
.Semua ini digunakan sehubungan dengan asal mereka, yang dapat (0, 0, 0), atau dapat menjadi Posisi lain.
sumber
myVec3.normalized
mengembalikan Vector3 baru , memiliki arah yang sama tetapi besarnya 1.myVec3
tidak berubahthese vector are unit vectors
menjadidirection vectors are unit vectors
sesuatu? Karena seperti sekarang pembaca mungkin bingung berpikir yangthese
merujuk pada kedua contoh sebelumnya,mPosition
danmDirection
. (Begitulah cara saya membacanya pada awalnya.)Anda dapat melihatnya seperti itu, tetapi hanya melihatnya seperti itu dapat menyebabkan pemahaman yang salah.
Pertama-tama, vektor bukanlah sebuah titik, dan sebuah titik bukanlah vektor.
Perbedaan antara vektor dan titik adalah sama dengan antara durasi dan waktu dalam sehari . Yang pertama adalah interval waktu, yang terakhir adalah satu titik waktu. Jelas bahwa 6 jam tidak sama dengan jam 6. Anda tidak akan mengatakan "Perlombaan berlangsung jam 1" dan Anda juga tidak akan mengatakan "Mari kita bertemu jam 13". Perlombaan berlangsung satu jam - suatu interval - dan Anda bertemu pada pukul 13 - titik waktu tertentu.
Hal yang sama berlaku untuk vektor dan titik. Vektor adalah intervall - perpindahan jika Anda mau. Itu menunjuk ke arah tertentu, dan ya, ia memiliki panjang.
Poin dan vektor karena itu terkait, sama seperti durasi dan waktu dalam sehari. Perlombaan dimulai pada pukul 13 dan berakhir pada pukul 15. Keduanya adalah poin waktu. Tapi jam 15 - 13 jam = 2 jam, durasi. Perlombaan berlangsung dua jam, bukan jam 2.
Hal yang sama berlaku untuk poin. Perbedaan antara titik A dan B dilambangkan sebagai ⃗v = B - A, di mana ⃗v menunjukkan vektor dan A dan B menunjukkan titik.
Sekarang, ada sesuatu yang disebut vektor posisi . Anda dapat mempertimbangkan vektor sebagai titik pada tingkat tertentu, ketika Anda mengatakan bahwa vektor menunjuk dari titik asal ke titik lainnya. Dengan kata lain: Jika semua teman Anda tahu bahwa Anda menyebut waktu hari sebagai jangka waktu sejak tengah malam (jam 0), Anda dapat mengatakan "Kami bertemu pada jam 6". Mereka akan tahu bahwa jam 0 + 6 jam = jam 6 dan karenanya, kapan harus bertemu denganmu. Inilah yang sebenarnya dilakukan oleh angkatan laut. "Kami bertemu pukul enam ratus jam," artinya jam 6.
Jadi vektor <1,2,3> menunjuk ke titik (1,2,3), jika Anda menganggap titik asal sebagai titik jangkar, dan ya, panjang vektor ini adalah jarak titik tersebut dari titik asal.
Tapi vektor <1,2,3> juga poin dari (1,1,1) ke (2,3,4), dan dalam hal itu panjangnya menunjukkan jarak antara mereka dua titik.
Jadi, seperti yang Anda lihat, vektor memiliki panjang karena itu bukan titik, tetapi interval - perpindahan.
sumber
Vektor dapat mewakili garis antara dua titik dalam ruang 3d (arah dan jarak) atau lokasi dalam ruang 3d (panjang adalah jarak dari titik asal).
Jika Anda memiliki titik A, dan titik B, maka BA = AB = arah dan jarak yang harus Anda tempuh untuk berpindah dari A ke B.
sumber
Returns this vector with a magnitude of 1
jadi bukankah itu menghancurkan informasi yang disimpan dalam vektor? sebenarnya yangMagnitude
danNormalized
adalah apa yang membuat saya bingung.Apa yang dikatakan Unity tentang poin vs vektor tidak berarti dalam jangka panjang, karena API geometri hanya memilih definisi yang berbeda untuk membuat alat lebih mudah diakses, mereka tidak sesuai dengan bagaimana hal-hal ini dikonseptualisasikan dalam geometri. Lihatlah implementasi kelas, jika Anda bisa. Karena sewenang-wenang, untuk mengetahui definisinya adalah satu-satunya cara untuk memahami apa konsepnya. Pengungkapan penuh, saya tidak memiliki pengalaman Persatuan.
Vektor adalah titik dalam ruang vektor , di mana konsep titik dalam geometri dikodekan oleh elemen himpunan yang mendasarinya. Ruang vektor memiliki vektor yang dapat dibedakan, yang disebut asal atau 0 . Aljabar linier adalah upaya untuk menyandikan fragmen geometri euclid dengan asal secara aljabar.
Panah dan panjangnya
Gerakan melintasi ruang poin sering ditafsirkan sebagai semua panah dari sumber / sebelum poin ke target / setelah poin mereka.
Fungsi dari dua argumen dapat diterapkan ke satu argumen untuk menghasilkan fungsi dari satu argumen - kita dapat berbicara tentang x +, fungsi yang mengambil setiap vektor y ke vektor x + y . Ini adalah terjemahan yang dikaitkan dengan menambahkan x . Panah terkait berjalan dari titik y ke titik x + y . Lihat: aplikasi parsial , kari .
Jadi mengapa kita hanya menggunakan satu panah saja ? Panah dari titik asal ke vektor tertentu, x dalam x + - asal adalah identitas penambahan vektor. Jadi, kita dapat memulihkan terjemahan x + hanya dari nilainya x +0 = x .
Sebagai representasi grafis dari ruang, representasi panah harus dilakukan dengan kemampuan kami untuk secara visual atau fisik memperkirakan efek terjemahan dari nilai yang menentukannya. Kapan kita memiliki kemampuan itu?
Untuk memberikan ruang vektor norma menjadikannya ruang vektor normed adalah untuk memberikan gagasan tentang panjang vektor yang masuk akal sebagai jaraknya dari 0. Juga, ini adalah jarak yang memenuhi ketidaksetaraan segitiga, yang merupakan kendala kuat tentang bagaimana panjang dua vektor berhubungan dengan jumlah mereka. Dari panjangnya kita dapat mendefinisikan jarak untuk menjadikan ini ruang metrik , dan geodesik adalah jalur yang secara intrinsik lurus karena sesingkat mungkin. The norma euclidean menginduksi jarak euclidean dan geodesics adalah segmen garis panah, tetapi jika Anda menggambar tanda panah sebagai geodesics menggunakan norma-norma yang berbeda, Anda dapat memperkirakan efek geometris dari terjemahan dari geodesics untuk belajar tentang geometri.
Arti titik dan vektor
Dalam beberapa kasus dalam melakukan permainan geometri, ruang poin Anda bukan ruang vektor . Ruang dimensi affine n dapat tertanam dalam ruang dimensi projektif n . Peta afine dikurangi menjadi proyeksi. Proyeksi juga memungkinkan Anda melakukan FOV, w / c saya pikir tidak affine. Proyeksi memiliki manfaat:
The proyektif n -space atas lapangan dapat dibangun dari linear ( n +1) -space (ruang vektor), dengan memperlakukan poin dari ruang proyektif sebagai garis melalui asal dari ruang linear. Pesawat melalui asal pada gilirannya memberikan garis proyektif. Mengalikan vektor dengan matriks tetap adalah peta linier , untuk inilah perkalian matriks. Peta linear mempertahankan asal dan kompatibel dengan insiden. Secara khusus, jika f adalah automorfisme linier ( sesuai dengan matriks yang tidak dapat dibalik ( n +1) x ( n +1)), dan dua garis L, M melalui rentang asal bidang A , makaf L, f M adalah garis-garis melalui titik asal yang mencakup f A , sehingga f akan menjaga insiden pada ruang proyektif juga - matriks yang dapat dibalik memiliki proyektivitas yang terkait. Perkalian matriks mengkodekan komposisi peta linier, dan karenanya proyeksi.
Menghapus asal dari ruang linear, semua titik pada garis yang diberikan melalui asal adalah kelipatan skalar satu sama lain. Mengeksploitasi fakta ini, homogenisasi mengambil titik linier untuk berdiri di setiap titik projektif dan matriks yang dapat dibalik untuk berdiri di setiap transformasi proyektif (seperti dalam 2D ini -> peta affine 2D sebagai 3D -> video peta linear 3D ), sedemikian rupa cara para perwakilan ditutup di bawah produk matriks-matriks dan matriks-vektor dan memberi dan diberikan oleh hal-hal proyektif yang unik. Deskripsi konstruksi bidang proyektif dari bidang linier mengikat beberapa hal bersama.
Jadi, dalam pipeline matriks model-view-projection, kami menggunakan vektor untuk mewakili titik-titik ruang projektif kami, tetapi ruang projektif bukan ruang vektor, dan tidak semua vektor dalam ruang vektor yang kami gunakan mewakili titik-titik geometri kami (lihat gambar bidang affine di kanan ). Kami menggunakan matriks terjemahan alih-alih jumlah vektor jika kami ingin terjemahan. Kadang-kadang, orang menyebut vektor projektif atau afin poin, terutama saat menggunakan pengaturan di nada ini.
sumber
Panjang (atau besarnya) vektor adalah
square root of (x*x+y*y+z*z)
. Vektor selalu dianggap sebagai sinar yang lewat dari titik asal<0,0,0>
melalui titik yang dijelaskan dalam vektor<x,y,z>
Dokumentasi persatuan tentang ini ditemukan di sini .
sumber