3B vektör bir noktayı temsil ediyorsa, uzunluğu nasıl olabilir?


27

Vektör aritmetiğini (ve özellikle Unity motorunda kullanımını) anlamaya çalışıyorum. Bir vektörün sadece bir noktayı (konum ve yönü) temsil etmesine rağmen nasıl bir boyuta (büyüklüğüne) sahip olduğunu çözemiyorum?

Bu, büyüklüğün sadece başlangıç ​​noktasından olan mesafesi olduğu anlamına mı geliyor (0, 0, 0)? Yoksa bir şey mi kaçırıyorum?


14
Sayı olarak da bilinen bir skaler düşünün. Mutlak bir değer, bir fark, yüzde, vb.
Peter

1
NormalizedBağlamda 1 değerini koruyan Directionancak 1 Magnitudeolan yeni bir vektör anlamına gelir . Yani, Normalizedorijinal vektör ölçeklendirilerek vektör oluşturulur.
Theraot

@Theraot, Çok teşekkür ederim, bu cümle bana çok yardımcı oldu!
Mohammed Noureldin

19
Öyle değil. Bir yer değiştirmeyi temsil eder. Sadece işaret bunun bir düşünün eğer bir noktaya pozisyon vektörü o (0, 0, 0) dan değiştirmeyi gösterir ki bu durumda,. Böyle bir konum vektörünün uzunluğu, noktanın orijine olan uzaklığıdır.
Polygnome 15

1
@Peter, korkarım size katılmıyorum. Bir vektörün standart cebirsel tanımları hemen hemen bunun bir anlamı olmadığı anlamına gelir . çünkü bu şekilde düşünmeye onun genellikle yararlıdır pozisyon vektörler için kullanılabilir temsil noktaları, ancak olan noktalar değil. "5 metre" her zaman bir mesafedir (veya uzunluk), asla bir zaman veya renk olmaz. Farklı semboller kullanmak genellikle yararlıdır - Kişisel olarak bir vektörü belirtmek için asla kullanmazdım (5, 5, 5) , her zaman kullanırım (5, 5, 5) ^ T (devredilmiş T) veya uygun sütun gösterimi kullanırdım desteklendiği yerde. Çünkü bir vektör demek bir noktanın yanlış olduğunu ortaya koymaktadır.
Polygnome

Yanıtlar:


20

Bu, büyüklüğün sadece başlangıç ​​noktasından uzaklık olduğu anlamına mı geliyor (0, 0, 0)?

Tl; dr cevap olabilir: Evet, bunu böyle hayal edebilirsiniz.

Ancak bunun yanlış bir anlayışa yol açıp açmayacağından emin değilim.


Bir vektör bir nokta değildir ve ikisi arasında çok önemli bir fark vardır!

Bir vektörün genellikle "ok" olarak temsil edilmesi, yanlış bir izlenim verebilir. Bir vektör aslında tek bir ok değildir . Bir vektörün, aynı uzunluk ve yöne sahip olan tüm okların seti olduğunu söylemek daha kesin olacaktır . (Genellikle boyanan ok, bütün bu okların sadece bir temsilcisidir). Fakat burada matematiğin sıkıcı detaylarına çok fazla inmek istemiyorum.

Daha da önemlisi, bir nokta ile bir vektör arasında , noktayı veya vektörü dönüştürdüğünüzde grafik programlamasında belirgin olan önemli bir fark vardır . Birlik hakkında bilgi sahibi değilim, ancak belgelere kısa bir bakışta Matrix4x4sınıftaki bir nokta ile bir vektör arasındaki en önemli farkı modelliyorlar. İki farklı işlevi vardır:

Fark, kabaca konuşursak, bir vektörün çevrilmediği, oysa ki nokta. Aşağıdaki 4x4 matrisini düşünün:

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

(1,2,3) hakkında bir çeviri açıklar. Şimdi, aşağıdaki sözde kodunuz olduğunda

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

Sonra tp(3,4,5) tvolacak, yine de olacak (2,3,4). Bir vektörün çevrilmesi onu değiştirmez (çünkü yukarıda belirtildiği gibi, aynı büyüklük ve yöne sahip tüm oklar kümesidir).


Birlik kullanıyor olması Vector3sınıfı hem de vektörler için ve noktaları, meşru olmakla birlikte, kafa karıştırıcı olabilir. Diğer kütüphaneler , bazen ortak bir üsle Point3Dve Vector3Dbazen arasında bir ayrım yapar Tuple3D.


3
Matematiksel olarak “bir vektörün aynı uzunlukta ve yöne sahip tüm oklar kümesi” olduğuna emin misiniz? Bazı denklik sınıflarından bahsediyor gibisiniz, ancak vektör boşlukları, denklik sınıfları olarak tanımlanan okuduğum bir şey değil. - Ne olursa olsun, çok önemli ... ehem, yükseltmek noktayı vektör uzayı arasındaki ayrım ile, afin mekanlarda tüm vektörlerin türleri için matematiksel adları / tüm noktaların, sırasıyla,.
leftaroundabout

3
A vector is, in fact, not a single arrow, haklısın, Vector3'ü tek bir ok olarak temsil etmek beni tamamen şaşırttı. Bu kritik cümleden bahsettiği için +1.
Mohammed Noureldin

@leftaroundabout Vektörler için farklı olası tanımlar vardır ("bazı n-tuple ..." ya da öylesine değil). Doğrusal cebirde, tüm okların kümesini ve (eşdeğer! -) ilişkisinin "Aynı uzunluk ve yöne sahip olduğunu" hayal edin. Tüm oklar kümesini bu ilişkide çarpanlara ayırmak denklik sınıflarını verir. Matematiksel algılar hakkında nitpick yapmak istemedim (aynı zamanda matematikçi de değilim), ama bir vektörün "(0,0,0) 'da başlayan bir ok" olmadığını açıkça belirtmeyi umuyorum. (...) noktası şudur: Bir vektörün "konumu" yoktur.
Marco13

2
Bilgisayar bilimi terimini vector, dizi veya çoklu demek için kullanması daha da karmaşık hale geldi ! C ++ 'da std::vector<Vector3>örneğin olabilir. Bir vectorbölgesinin Vectors.
user1118321

Ah, ne anlama benzeşik bir boşluk başlayarak olan X herhangi iki nokta (için tanımlar, s , q ), bir ok sbir ( X ) olan en kısa yol (minimum entegre mutlak türevi ile örneğin türevlenebilir fonksiyonu) s : [0,1] → X öyle ki s (0) = p ve s (1) = q . Daha sonra vektörlerin alan eşdeğerlik sınıfları dizi bir ( X ) / ~ burada s ~ σ ise ∂ s / ∂ t = ∂ σ/ ∂ t hepsi için t ∈] 0,1 [? Bu mantıklı, ancak bunu vektörlerin tanımı olarak kullanabileceğinizi düşünmüyorum, çünkü farklılaşma zaten onlara bağlı.
leftaroundabout

36

Bu, büyüklüğün sadece başlangıç ​​noktasından uzaklık olduğu anlamına mı geliyor (0, 0, 0)?

Bu tam olarak böyle.

Diğer şeylerin yanı sıra, bir vektör, bağlama bağlı olarak bir noktayı (bir konum), bir yönü ve / veya hızı temsil edebilir.

Eğer bu değişkene sahipseniz:

Vector3 mPosition;

Genel olarak sadece konumu, yani 3B alanda bulunduğu yeri temsil eder .

Eğer bu değişkene sahipseniz:

Vector3 mDirection;

Genel olarak yönü temsil eder. Tipik olarak, bu vektör birim vektörlerdir, yani 1 uzunluk vektörleridir (ancak her zaman gerekli değildir). Bir birim vektör ile normalize edilmiş bir vektör aynı şeydir, ikisi de 1 uzunluğundadır. Bu vektörler, konumlarını değiştirmek için genellikle diğer vektörlerle birlikte kullanılır .

Bir vektörü normalleştirirken, uzunluğunu (büyüklüğünü) kaybedersiniz, ancak yön aynı kalır. Sadece yöne ihtiyaç duyduğunuz durumlarda (örneğin, bir nesneyi o yönde hareket ettirmek istediğinizde) ve vektörde (birim uzunluk olmayan) büyüklük olması beklenmedik hesaplama sonuçları verir.

Tek bir hesaplama için normal bir vektöre ihtiyacınız varsa, kullanabilirsiniz myVec3.normalized, etkilemez myVec3ve bu normalleştirilmiş vektörü sık sık kullanmayı planlıyorsanız, muhtemelen bir değişken oluşturmalısınız:

Vector3 myVec3Normalized = myVec3.normalized;

normalizedyönteme tekrarlanan çağrıları önlemek için .

Ve eğer değişkenleri görürseniz:

Vector3 mVelocity;

Genel olarak bir kuvveti / hızı temsil eder: bu vektörler bir yönü temsil eder ve büyüklükleri (uzunlukları) önemlidir. Ayrıca Vector3 mDirection;ve a ile de temsil edilebilirler float mSpeed;.

Bunların tümü (0, 0, 0) olabilen veya başka bir Pozisyon olabilen yerel kökenleri için kullanılır.


4
Vektörde yer alan bilgilerin bir kısmını yok eder ve bu bilgi büyüklüğüdür. Ancak yön aynı kalır.

6
O nota daha doğru olduğunu @Eldy o myVec3.normalizedgetiriler bir yeni vector3, aynı yönde fakat büyüklüğünü 1. olan myVec3değişmez
Caleth

4
@ NPSF3000 Bunlar bir sarsıntı ve bir sıçrama olur , bunun ötesindeki adlar üzerinde bir fikir birliği yoktur. Hepimiz sevindiz gerizekalı yaygın değildir.
Theraot

1
@ NPSF3000 Bazıları pozisyonun 4., 5. ve 6. türevlerinin çabuk, çatırtı ve pat olması gerektiğini öne sürüyor! :-D en.wikipedia.org/wiki/Snap,_Crackle_and_Pop#Physics
gbmhunter 30:17

1
Belki değiştirmek these vector are unit vectorsiçin direction vectors are unit vectorsya da bir şey? Hemen bir okuyucu karışabilir düşünce olarak nedeniyle these, hem önceki örneklerle ifade eder, mPosition ve mDirection . (İlk başta böyle okurum.)
Supr

8

Bu, büyüklüğün sadece başlangıç ​​noktasından uzaklık olduğu anlamına mı geliyor (0, 0, 0)?

Sen olabilir bu şekilde görüyorum ama sadece bu şekilde görünce yanlış anlaşılmasına yol açabilir.


Her şeyden önce, bir vektör bir nokta değildir ve bir nokta bir vektör değildir.

Bir arasındaki fark vektörünün bir nokta bir arasında aynı süre ve günün saati . İlki bir zaman aralığıdır, ikincisi zaman içinde tek bir noktadır. Açıkçası 6 saat saat 6 ile aynı değil. "Yarış saat 1 sürer" demedi ve "13 saatte buluşalım" demezdiniz. Yarış bir saat sürer - aralıklarla - ve saat 13: 00'te buluşursunuz - zamanın belli bir noktası.

Aynısı vektörler ve nokta için de geçerlidir. Bir vektör bir intervall - eğer istersen bir yer değiştirme. Belirli bir yöne işaret eder ve evet, bir uzunluğu vardır.

Bu nedenle puanlar ve vektörler, günün süreleri ve saatleri gibi ilişkilidir. Yarış saat 13'de başlıyor ve saat 15'de bitiyor. Her ikisi de zaman içindeki noktalardır. Ancak saat 15 - 13 saat = 2 saat, bir süre. Yarış iki saat sürüyor, saat 2 değil.

Aynısı noktalar için de geçerlidir. A ve B noktaları arasındaki fark ⃗v = B - A olarak gösterilmektedir, burada ⃗v bir vektörü gösterir ve A ve B noktaları belirtir.

Şimdi, pozisyon vektörü denen bir şey var . Sen olabilir derken, belirli bir dereceye kadar bir vektör bir noktaya düşünün bir diğer belirli bir noktaya kökenli vektörler puan. Başka bir deyişle: Eğer bütün arkadaşlarınız günün saatlerini gece yarısından itibaren (0'da) süreler olarak aradığınızı biliyorsa, "6 saatte buluşuyoruz" diyebilirsiniz. Saat 0 + 6 saat = 6 saat olduğunu ve bu nedenle sizinle ne zaman buluşacaklarını bilirlerdi. Aslında deniz zamanlarının yaptığı budur. "Saat altı-saatte buluşuyoruz" demek, saat 6'da.

Bu nedenle <1,2,3> vektörü noktaya (1,2,3) işaret eder, başlangıç ​​noktasını bağlantı noktası olarak görürseniz ve evet, bu vektörün uzunluğu bu noktanın başlangıç ​​noktasından uzaklığıdır.

Fakat vektör <1,2,3> ayrıca (1,1,1) ila (2,3,4) arasındadır ve bu durumda uzunluğu, bu iki nokta arasındaki mesafeyi belirtir .


Yani, görebileceğiniz gibi bir vektörün uzunluğu vardır, çünkü bu bir nokta değil, aralıktır - bir yer değiştirme.


İlgili okuma: Torsors
Buster

5

Bir vektör, 3B uzayda iki nokta (yön ve mesafe) veya 3B uzayda bir konum (uzunluk, başlangıç ​​noktasından uzaklık) arasındaki bir çizgiyi temsil edebilir.

A ve B noktalarına sahipseniz, BA = AB = A'dan B'ye gitmek için seyahat etmeniz gereken yön ve mesafe


Teşekkürler, ama sonra Vector3.Normalized kullanmak ne anlama geliyor? Belgeler şöyle diyor: Returns this vector with a magnitude of 1Öyleyse bu vektöre kaydedilen bilgileri yok etmiyor mu? Aslında bu Magnitudeve Normalizedbeni şaşırttı.
Mohammed Noureldin

Uzayda bir nokta ya da hızı gösteren bir ok olup olmadığı tamamen kafanızdadır. Aynı veri her ikisini de temsil eder.
Omnifarious

@MohammedNoureldin Normalize bir vektör, birim uzunluğundan biridir (1). Evet, bir vektörü normalleştirirseniz, uzunluk veya büyüklük bilgilerini kaybedersiniz. Her ikisine de ihtiyacınız varsa (birçok durumda yararlıdır), vektörün uzunluğunu alırsınız, sonra normalleştirirsiniz.
Ian Young

1

Unity'nin noktalar ve vektörler hakkında söylediği şey uzun vadede anlamsızdır, çünkü geometri API'leri aracı daha erişilebilir kılmak için farklı tanımlar seçer, bu şeylerin geometride nasıl kavramsallaştırıldığına karşılık gelmezler. Yapabiliyorsanız, sınıf uygulamalarına bir göz atın. Çünkü keyfi, tanımını bilmek kavramın ne olduğunu anlamanın tek yolu. Tam açıklama, Birlik tecrübem yok.

Bir vektör, vektör uzayındaki bir noktadır, çünkü geometrideki bir nokta kavramı, alt küme elemanları tarafından kodlanır. Bir vektör uzayının başlangıç ​​noktası veya 0 olarak adlandırılan ayırt edici bir vektörü vardır . Doğrusal cebir, cebirsel kaynaklı bir öklid geometrisi parçasını kodlama girişimidir.

Ok ve uzunluğu

Noktalar arasındaki hareketler sıklıkla kaynaktan / noktalardan hedeflerine / noktalarına kadar tüm oklar olarak yorumlanır .

İki bağımsız bir işlevi bir bağımsız değişken bir fonksiyonu üretmek için bir bağımsız değişken uygulanabilir - biz konuşabilir X , + nın her biri vektör alır fonksiyon y vektörü için x + y . Bu, x / w ile ilgili çeviridir . İlişkili oklar, y noktalarından x + y noktalarına gider . Bakınız: kısmi uygulama , kurutma .

Peki neden sadece bir oku kullanıyoruz ? Belirli bir vektöre kökenli noktalarından ok X içinde X + -, vektörün ilave özdeşliğidir. Böylece x + çevirisini yalnızca x +0 = x değerinden kurtarabiliriz .

Alanın grafiksel bir gösterimi olarak, ok gösteriminin bir çevirinin etkisini belirleyen değerden görsel veya fiziksel olarak fazladan tahmin etme kabiliyetimizle ilgisi var. Bu yeteneğe ne zaman sahibiz?

Vektör uzayına normlu bir vektör uzayı yapan bir norm vermek, 0'dan uzaklıkları kadar anlamlı olan bir vektörün uzunluğuna ilişkin bir kavram sağlamaktır. iki vektörün uzunluklarının toplamlarının uzunluğu ile ilgili olduğu konusundaki güçlü kısıtlama. Uzunluk itibaren biz yapabilirsiniz mesafeyi tanımlamak bu hale getirmek için metrik uzay ve jeodezik mümkün olduğunca kısa var o düz özünde olan bir yoldur. Öklides norm Öklides mesafeyi neden ve geodezikler okların hat kesimleri, ama okları çizerseniz geodezikler kullanma gibi farklı normlarıgeometri hakkında bilgi edinmek için jeodezilerden çevirinin geometrik etkisini tahmin edebilirsiniz.

Nokta ve vektörün anlamı

Bazı durumlarda oyun geometrisi yaparken , puan alanınız bir vektör uzayı değildir . Boyut benzeşik bir boşluk n gömülebilir boyuta bir yansıtmalı boşlukta n . Afin haritaları projeksiyonları azaltır. Projeksiyonlar ayrıca FOV yapmanıza izin verir, w / c affedilmez olduğunu düşünüyorum. Projeksiyonların faydaları:

Bir alan üzerindeki yansıtıcı n- uzamı, yansıtıcı boşluğun noktaları, doğrusal boşluğun orijini boyunca çizgiler olarak işlenerek, doğrusal ( n + 1) boşluğundan (vektör boşluğu) oluşturulabilir. Menşei geçen uçaklar sırayla yansıtıcı çizgiler verir. Vektörleri sabit bir matris ile çarpmak doğrusal bir haritadır , bu matris çarpımı içindir. Doğrusal haritalar, orijini korur ve görülme oranı ile uyumludur. Özellikle, f a, doğrusal otomorfizm ( karşılık gelen bir ters çevrilebilir ( n + 1) x ( n ve iki çizgi +1) matris) L, M kökenli açıklığı içinden geçen bir düzlem A , daha sonraf L, f Mf A'nın orijini geçen çizgilerdir , bu nedenle f , projektif alandaki insidansı da koruyacaktır - tersinir bir matrisin bir projeksiyon özelliği vardır. Matris çarpımı, doğrusal haritaların kompozisyonunu ve dolayısıyla projeksiyonları kodlar.

Kökeni doğrusal boşluktan kaldırarak, orijinden belirli bir çizgideki tüm noktalar birbirinin skaler katlarıdır. Bu gerçeği kullanarak, homojenizasyon , her bir projektif nokta için duracak bir doğrusal nokta ve her bir projektif dönüşüm için (bu 2B -> 2B afin haritaları 3B -> 3B doğrusal haritalar videosu gibi) duracak bir matris alır. Temsilcilerin, matris-matris ve matris-vektör ürünleri altında kapatılması ve benzersiz projektif şeyler vermesi ve vermesi. Projektif düzlemin doğrusal düzlemden inşasının bu açıklaması bazı şeyleri birbirine bağlar.

Bu yüzden, model-görünüm-projeksiyon matris boru hattında, projektif uzayımızın noktalarını temsil etmek için vektörler kullanıyoruz, ancak projektif uzay bir vektör uzayı değil, kullandığımız vektör uzayındaki tüm vektörler noktaları temsil ediyor geometrimizden ( sağdaki afin düzleminin resmine bakınız ). Tercüme istiyorsak, vektör toplamı yerine çeviri matrislerini kullanıyoruz. Bazen insanlar, özellikle bu damarda bir kurulum kullanırken, yansıtıcı veya afin noktaları vektörlerini çağırırlar.


2
+1. Ancak benim içgüdülerim, kullandığınız dili anlayan çoğu kişinin asıl sorunun cevabının zaten farkında olduğudur, bu yüzden sıradan okuyucular için cevabı ayarlamanızı öneririm.
Peter,

@Peter ben her şeyi ele almak zor buldum. Daha erişilebilir hale getirmek istiyorum, ancak bunu ayrıntılı bir şekilde yapmadan nasıl yapacağımı bilmiyorum. Bununla birlikte, OpenGL ile ilk kez çalışırken homojen matrislerin anlamını, perspektif matrislerin anlamını ve çeviri matrislerinin toplanarak çeviriye alternatif olarak nasıl keşfedildiğini merak ettim, bu yüzden bu çok derin bir noktaya gelmiyor. Formalizm dildir ve doğru cümleleri verirken, kavramları nasıl tartışacağını düşünüyorum. Ancak, özlü olmak çok opaktır, bu yüzden bu bir Wiki okuma listesi gibidir.
Loki Clock

Bazı linkleri ekledim, özellikle de doğrusal haritalar olarak daha yüksek boyutta yapılan afin haritası videosu. Umarım bu yardımcı olacaktır.
Loki Clock,

Güzel. daha fazla yükseltme hak ediyor.
Peter

-1

Vektörün uzunluğu (veya büyüklüğü) square root of (x*x+y*y+z*z). Vektörler her zaman kökenli bir ışın geçişi olarak kabul edilmektedir <0,0,0> yoluyla vektöründe tarif edilen noktaya<x,y,z>

Bu konuda birliğin belgeleri bulunur buradan ulaşabilirsiniz .


Üzgünüz, ama bu tamamen yanlıştır. İki nokta A ve B'ye sahipsem, v = BA, A'dan B'ye giden vektördür. V bu durumda orijinden hiç geçmez. Bir vektör bir nokta değildir. için kullanılabilir temsil (konum vektörü gibi) bir nokta, ancak bir farklı bir şey. Lütfen cebirsel temelleri dümdüz edin.
Polygnome

Kargaşayı gidermek için cevabı güncelledim, ancak Vector3'ün Birlik'te neler olduğuna dair belgelere atıfta bulunuyorum ve cevabım sizinkiler de dahil olmak üzere tüm üst sıradaki cevaplarla aynıydı.
Stephan

Birlik belgelerini dikkatlice okursanız, kökünden hiç bahsetmediğini fark edersiniz , çünkü kökenin vektör uzunluğu ile hiçbir ilgisi yoktur. (1,1,1) ve (2,3,4) arasındaki vektör <1,2,3> 'dür ve sqrt uzunluğunda (1 ^ 2 + 2 ^ 2 + 3 ^ 3) = ~ 3,9 bu iki nokta arasındaki mesafedir. Hatta kökeni asla dokunmaz hiç . Ben muhtemelen Götürmezse, çünkü cevabım, sana yaramış düşünebildiğim nasıl karıştı hiç .
Polygnome
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.