Jika vektor 3D mewakili suatu titik, bagaimana bisa memiliki panjang?

27

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?

Mohammed Noureldin
sumber
14
Pertimbangkan skalar, juga dikenal sebagai angka. Ini dapat berarti nilai absolut, perbedaan, persentase, dll.
Peter - Unban Robert Harvey
1
Normalizeddalam konteks berarti vektor baru yang mempertahankan Directiontetapi memiliki Magnitude1. Yaitu, Normalizedvektor dibuat dengan penskalaan vektor asli.
Theraot
@Theraot, Terima kasih banyak, kalimat itu sangat membantu saya!
Mohammed Noureldin
19
Tidak. Ini mewakili perpindahan. Ini hanya menunjuk ke beberapa titik jika Anda menganggapnya vektor posisi , dalam hal ini menunjukkan perpindahan dari (0, 0, 0). Panjang vektor posisi seperti itu adalah jarak dari titik ke titik asal.
Polygnome
1
@ Peter Aku takut aku harus tidak setuju denganmu. Definisi aljabar standar vektor cukup banyak berarti bukan titik. yang sering berguna untuk mempertimbangkan seperti itu karena vektor posisi dapat digunakan untuk mewakili poin, tetapi mereka yang tidak poin. "5 meter" selalu jarak (atau panjang), tidak akan pernah ada waktu atau warna. Seringkali berguna untuk menggunakan simbol yang berbeda - Saya pribadi tidak akan pernah menggunakan (5, 5, 5) untuk menunjukkan vektor , saya selalu menggunakan (5, 5, 5) ^ T (T untuk ditransposisikan) atau menggunakan representasi kolom yang tepat di mana didukung. Karena mengatakan vektor adalah poin yang menyebabkan ketidakakuratan.
Polygnome

Jawaban:

20

Apakah itu berarti bahwa besarnya hanyalah jarak dari titik asal (0, 0, 0)?

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 Matrix4x4kelas. Ini memiliki dua fungsi berbeda:

Perbedaannya adalah, secara garis besar, bahwa vektor tidak diterjemahkan, sedangkan intinya adalah. Bayangkan matriks 4x4 berikut:

1.0   0.0   0.0   1.0
0.0   1.0   0.0   2.0
0.0   0.0   1.0   3.0
0.0   0.0   0.0   1.0

Ini menjelaskan tentang (1,2,3) terjemahan. Sekarang, ketika Anda memiliki kodesemu berikut

Vector3 tp = matrix.MultiplyPoint (new Vector3(2,3,4));
Vector3 tv = matrix.MultiplyVector(new Vector3(2,3,4));

Maka tpakan menjadi (3,4,5), sementara tvmasih 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 Vector3kelas untuk keduanya, vektor dan untuk poin, adalah sah, tetapi mungkin membingungkan. Perpustakaan lain berdedikasi membedakan antara Point3Ddan Vector3D, kadang-kadang dengan basis umum seperti Tuple3D.

Marco13
sumber
3
Apakah Anda yakin "vektor adalah himpunan semua panah yang memiliki panjang dan arah yang sama" masuk akal, secara matematis? Kedengarannya seperti Anda sedang berbicara tentang beberapa kelas kesetaraan, tetapi ruang vektor bukan sesuatu yang pernah saya baca didefinisikan sebagai kelas kesetaraan. - Apa pun, Anda menaikkan sangat penting ... ahem, titik , dengan perbedaan antara ruang vektor dan ruang affine , yang merupakan nama matematika untuk jenis semua vektor / semua titik, masing-masing.
leftaround sekitar
3
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.
Mohammed Noureldin
@leftaroundabout Ada beberapa definisi yang mungkin untuk vektor (lebih dari sekadar "n-tuple ..." atau lebih). Dalam aljabar linier, bayangkan himpunan semua panah, dan hubungan (ekivalensi! -) "Memiliki panjang dan arah yang sama". Memfaktorkan himpunan semua panah oleh relasi ini menghasilkan kelas ekivalensi. Saya tidak ingin tahu tentang detial matematika (saya juga bukan ahli matematika), tetapi berharap untuk menjelaskan bahwa vektor bukan "panah yang dimulai pada (0,0,0)". Intinya (...) adalah: Vektor tidak memiliki "posisi".
Marco13
2
Ini bahkan lebih rumit dengan penggunaan ilmu komputer dari istilah yang vectorberarti array atau banyak! Dalam C ++ Anda dapat memiliki std::vector<Vector3>misalnya. A vectordari Vectors.
user1118321
Ah, jadi yang Anda maksud adalah, mulai dari ruang affine X , Anda mendefinisikan untuk dua titik ( p , q ) panah sA ( X ) sebagai jalur terpendek (yaitu fungsi terdiferensiasi dengan turunan absolut minimal terintegrasi) s : [0,1] → X sedemikian rupa sehingga s (0) = p dan s (1) = q . Maka ruang vektor adalah himpunan kelas ekivalensi A ( X ) / ~ di mana s ~ σ jika ∂ s / ∂ t = ∂ σ/ ∂ t untuk semua t ∈] 0,1 [? Itu masuk akal, meskipun saya tidak berpikir Anda dapat menggunakan ini sebagai definisi vektor karena diferensiasi sudah tergantung pada mereka.
leftaroundabout
36

Apakah itu berarti bahwa besarnya hanyalah jarak dari titik asal (0, 0, 0)?

Tepat seperti itu.

Antara lain, vektor dapat merepresentasikan titik (posisi), arah dan / atau kecepatan, tergantung pada konteksnya.

Jika Anda memiliki variabel ini:

Vector3 mPosition;

Biasanya hanya mewakili posisi, yaitu di mana ia berada di ruang 3d.

Jika Anda memiliki variabel ini:

Vector3 mDirection;

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 mempengaruhi myVec3, dan jika Anda sering menggunakan vektor yang dinormalisasi itu, Anda mungkin harus membuat variabel:

Vector3 myVec3Normalized = myVec3.normalized;

untuk menghindari panggilan berulang ke normalizedmetode.

Dan jika Anda melihat variabel:

Vector3 mVelocity;

Biasanya mewakili kekuatan / kecepatan: vektor-vektor ini mewakili arah dan besarnya (panjangnya) adalah penting. Mereka juga dapat diwakili dengan Vector3 mDirection;dan a float mSpeed;.

Semua ini digunakan sehubungan dengan asal mereka, yang dapat (0, 0, 0), atau dapat menjadi Posisi lain.

Vaillancourt
sumber
4
Ini menghancurkan bagian dari informasi yang terkandung dalam vektor, dan informasi itu adalah besarnya. Namun, arahnya tetap sama.
6
@ Elly Ini lebih akurat bahwa untuk mencatat yang myVec3.normalizedmengembalikan Vector3 baru , memiliki arah yang sama tetapi besarnya 1. myVec3tidak berubah
Caleth
4
@ NPSF3000 Mereka akan brengsek dan bergabung , tidak ada konsensus tentang nama di luar itu. Kita semua senang, brengsek itu tidak umum.
Theraot
1
@ NPSF3000 Beberapa menyarankan turunan posisi ke-4, ke-5 dan ke-6 adalah snap, crackle dan pop! :-D en.wikipedia.org/wiki/Snap,_Crackle_and_Pop#Physics
gbmhunter
1
Mungkin berubah these vector are unit vectorsmenjadi direction vectors are unit vectorssesuatu? Karena seperti sekarang pembaca mungkin bingung berpikir yang thesemerujuk pada kedua contoh sebelumnya, mPosition dan mDirection . (Begitulah cara saya membacanya pada awalnya.)
Supr
8

Apakah itu berarti bahwa besarnya hanyalah jarak dari titik asal (0, 0, 0)?

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.

Polygnome
sumber
Bacaan terkait: Torsors
Buster
5

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.

Ian Young
sumber
Terima kasih, tapi lalu apa artinya menggunakan Vector3. Dinormalisasi? dokumentasi mengatakan:, Returns this vector with a magnitude of 1jadi bukankah itu menghancurkan informasi yang disimpan dalam vektor? sebenarnya yang Magnitudedan Normalizedadalah apa yang membuat saya bingung.
Mohammed Noureldin
Apakah itu titik di ruang angkasa atau panah yang menunjukkan kecepatan ada di kepala Anda. Data yang sama mewakili keduanya.
Mahakuasa
@MohammedNoureldin Vektor yang dinormalisasi adalah salah satu dari satuan panjang (yaitu 1). Ya, jika Anda menormalkan vektor, Anda kehilangan panjang, atau besarnya informasi. Jika Anda membutuhkan keduanya (berguna dalam banyak kesempatan), Anda mendapatkan panjang vektor, lalu menormalkannya.
Ian Young
1

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.

Jam Loki
sumber
2
+1. Tetapi firasat saya adalah bahwa kebanyakan orang yang mengerti bahasa yang Anda gunakan sudah menyadari jawaban atas pertanyaan awal, jadi saya sarankan untuk menyesuaikan jawaban untuk pembaca biasa.
Peter - Unban Robert Harvey
@ Peter saya merasa sulit untuk mengatasi semuanya. Saya ingin membuatnya lebih mudah diakses, tetapi tidak tahu bagaimana melakukannya tanpa elaborasi. Namun, ketika saya pertama kali bekerja dengan OpenGL saya bertanya-tanya tentang arti dari matriks homogen, matriks perspektif, dan bagaimana matriks terjemahan ditemukan sebagai alternatif terjemahan dengan menjumlahkan, jadi mungkin saja ini tidak terlalu jauh ke ujung yang dalam. Formalisme adalah bahasa, dan memberikan ungkapan yang tepat, saya pikir bagaimana mendiskusikan konsep akan muncul. Namun, sangat tidak jelas untuk ringkas, jadi ini lebih seperti daftar bacaan Wiki.
Jam Loki
Saya menambahkan beberapa tautan, khususnya video peta affine yang dilakukan dalam dimensi yang lebih tinggi sebagai peta linear. Semoga itu bisa membantu.
Jam Loki
bagus. layak mendapat lebih banyak upvotes.
Peter - Unban Robert Harvey
-1

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 .

Stephan
sumber
Maaf, tapi ini sepenuhnya salah. Jika saya memiliki dua titik A dan B, maka v = BA adalah vektor yang berpindah dari A ke B. v tidak melewati titik asal sama sekali dalam kasus ini. Vektor bukanlah sebuah titik. dapat digunakan untuk mewakili suatu titik (sebagai vektor posisi), tetapi itu adalah sesuatu yang berbeda. Tolong luruskan dasar-dasar aljabar.
Polygnome
Saya telah memperbarui jawaban untuk menghilangkan kebingungan, tetapi saya memberikan referensi ke dokumentasi tentang apa itu Vector3 di Unity, dan jawaban saya sejalan dengan semua jawaban berperingkat lebih tinggi termasuk milik Anda.
Stephan
Jika Anda membaca dokumentasi kesatuan dengan cermat, Anda akan melihat bahwa itu tidak pernah menyebutkan asal, karena asal tidak ada hubungannya dengan panjang vektor. Vektor antara (1,1,1) dan (2,3,4) adalah <1,2,3> dan memiliki panjang sqrt (1 ^ 2 + 2 ^ 2 + 3 ^ 3) = ~ 3,9, yang adalah jarak antara kedua titik tersebut. Bahkan tidak pernah menyentuh asalnya sama sekali . Saya bingung bagaimana Anda bisa berpikir jawaban saya setuju dengan Anda, karena tidak, sama sekali .
Polygnome