Vektörlerde bu kadar farklı / karmaşık / faydalı olan nedir?


21

Bu gerçek bir soru olarak düşünülmezse beni affet, ama gerçekten kafam karıştığı bir şey.

Diğer oyun geliştiricilerin, vektörleri kullanmanın ne kadar yararlı olduğu hakkında konuştuğunu sürekli duyuyorum, ama aynı zamanda herkesin vektör matematikten korktuğu ve vektörlerin göz korkutucu göründüğü. Onlar hakkında bir şeyler öğrenmek için bulamadım.

Yani, en sonunda baktım Vector Wikipedia'da ve şaşırdım. Bir şekilde yanılmıyorsam, bir vektör (sadelik uğruna, 2B diyelim), sadece bir x ve y koordinatıdır. Yanlış anladıysam, lütfen beni düzelt.

İşte benim sorum şu: bu, iki (veya üç) boyutlu koordinatın herhangi bir temsilinin bir vektör olduğu anlamına gelmiyor mu? Eğer öyleyse, o zaman bir vektör ve koordinatlar aynı şeydir. Ve bu bir oyun yaratmak için hemen hemen imkansız olmadan koordinatları kullanarak, bu yüzden nasıl vektörler kafa karıştırıcı ya da oyun programlama herhangi bir miktar yapmış birine yeni edilir?

Bu, bazı açıklamaları kullanabileceğim bir şey. Herhangi bir yardım takdir edilmektedir.


5
Vektörler 3B'de dönüş yapmaya başlayana kadar oldukça basittir ... sonra kuaterniyonlara ihtiyacınız vardır ve bunlar aklınızı başınızdan alacak.
Alistair Buxton

Vektör kavramı gerçekten kafa karıştırıcıdır. Ben matematik, in istediler math.stackexchange.com/questions/429363 , math.stackexchange.com/questions/384927 ama net bir yanıt almıştı. Saf bir hayal kırıklığı. Ekleyebilirsin.
Val

1
Bu cevaplardaki tüm kötü benzetmelerle insanların kafasını karıştırması şaşırtıcı değil.
Alistair Buxton

Yanıtlar:


29

Bir matematiğin seni vektörel noktalar veya koordinatlar olarak adlandırdığını duymasına izin verme!

Bir 2D vektörü, x ve y bileşenine sahiptir , koordinat değil. Vektörler bir konum tanımlamaz, bir yön ve büyüklük tanımlarlar.

İnsanların neden onlar tarafından korktuğunu söyleyemem, muhtemelen insanların genel olarak matematikten korkmaları aynıdır, çünkü herkes bunun hakkında bir şey bilmeden çok zor olduğunu söylüyor!

Vektörler ve koordinatlar aynı şey değil. Benzer görünüyorlar, ancak kullanılma şekilleri çok farklı.

Koordinatlar dünyadaki bir pozisyonu tanımlar. Vektörler bir yön ve büyüklüğü tanımlar. İkisi sıklıkla birlikte kullanılır. Örnek olarak:

Bir karakterin bir konumu ve hızı vardır. Konum bir koordinat ve hız bir vektördür. Hızı pozisyona eklemek, karakteri vektörün büyüklüğü ile tanımlanan bir mesafede vektör yönünde hareket ettirecektir (vektörün büyüklüğünün hız olduğunu unutmayın, bu bize bir yön ve hız verir).

Veya bu örnekte:

görüntü tanımını buraya girin

İki karakterin konumları vardır ve lazer atış bir vektördür. İki konum arasındaki bir vektör (3,1). Bu, X ekseni boyunca +3 ve Y ekseni boyunca +1 hareket ettiği anlamına gelir. Büyüklüğün Sqrt ((X X) + (Y Y)) ile bulunduğu yer.

Vektör matematiğe iyi bir genel bakış Wolfire blogunda bulunabilir.


7
Birisi bir vektörü nokta veya koordinat olarak çağırdığında sinirlenen sadece matematikçiler değildir. Biz fizikçiler seni de mahveder.
TASAGENT

2
+1 Ama eğer nit toplama işlemi yapıyorsam, hız bir vektördür ve hız bu vektörün büyüklüğüdür.
Ergwun

2
@ Val: Saçma sapan demem. Sorunun, vektörlerin sadece x ve y koordinatları olduğu yanılgısına değiniyor. Cevabı 'vektör uzayının elemanlarından' bahsederek daha resmi ya da doğru yapmak, insanların neden vektör cebirini korkutucu bulduğunu açıklamaktan başka kimsenin yararına olmaz.
Marcks Thomas

3
Vektörler, yalnızca uygularsanız (0,0) nerede olacağınızı söyleyebilecekleri bir konumdur. Vektörler bir konumu değiştirebilir, ancak kendi başlarına konum bilgisi içermez. Ne dediğini anlıyorum. Bahsettiğimiz farkın bu soru için önemli olmadığını düşünüyorum. Bu, vektörlerin oyun geliştirmede kullanılma şeklidir. Giriş için teşekkürler.
MichaelHouse

4
@Val: herhangi bir iyi lineer cebir dersi Byte56 ile aynı fikirde olacaktır: vektörler uzayda konumlarla aynı değildir . “3 mil kuzey ve 1 mil doğu”, “1 mil güney” e; ancak “Beyaz Saray'ın konumunu” “Pentagon'un konumuna” eklemek mantıklı değildir. Referans noktasını (0,0) olarak belirledikten sonra, noktaları belirlemek için vektörleri kullanabilir ve bunun tersi de olabilir; bu nedenle, bazı gösterimlerde benzer görünüyorlar; ama onlar farklı. Özet olarak: affine uzayı ve vektör uzayı karşılaştırın .
PLL

9

Korkutma faktörü, normalleşme, nokta ve çapraz ürünler gibi daha karmaşık işlemlerle uğraşmaya başladığınızda ve aralarında dönüşüm yapmak için matrisli çoklu koordinat sistemleri kullandığınızda ortaya çıkabileceğini düşünüyorum. Güçlü bir geometriye ve cebir geçmişinize sahip olsanız bile, bunların ilk başta anlaşılması kolay değildir.

Ayrıca, en azından ABD'de, tipik lise matematik sırasından geçen insanlar, çizgiler, eğimler, açılar vb. Gibi geometri hakkında düşünmeye alışkındırlar. bunun yerine vektörler ve matrisler açısından düşünün. Doğrusal cebir kavramları bu kadar gergin değildir, fakat insanların okulda öğrenmesi muhtemel olan klasik geometride kullanılanlardan biraz daha farklı kavramlar dizisidir.


BTW, vektörlerle nokta arasındaki fark, üzerlerinde gerçekleştirebileceğiniz işlemlerde yatmaktadır. Her ikisi de (belirli bir koordinat sisteminde) bir bileşen listesiyle temsil edilmesine ve bu nedenle "aynı" görünmesine rağmen, izin verilen işlemler aynı değildir. Örneğin, iki vektör ekleyebilir veya bir vektörü skaler ile çarpabilirsiniz. Bunu puanlarla yapamazsınız - veya en azından, bunu yapmanın bir anlamı yoktur. Ancak iki noktayı çıkarabilirsiniz ve sonuç bir noktadan diğerine bir vektördür. Yeni bir nokta elde etmek için bir vektöre bir nokta da ekleyebilirsiniz.

Noktalar ve vektörler de dönüşümler açısından farklı davranırlar. Yani, vektörler değilken noktalar çeviriye tabidir. Bir konum (nokta) ve bir hız (vektör) ile hareket eden bir nesne örneği düşünün; nesneyi farklı bir yere çevirirseniz, konumunu değiştirirsiniz, hızını değiştiremezsiniz.

Aslında, bu akıl yürütme çizgisini daha da ilerletmek için sadece vektörler yoktur; Koordinatörler ve bivektörler gibi , aynı zamanda bir koordinat sistemindeki bileşenlerin bir listesine sahip olma açısından bir vektöre "benzeyebilecek" ancak var olan işlemler ve dönüşümlere tepki gösterme biçimleri bakımından farklı davranan başka varlıklar da vardır. Bunların hepsi Grassmann cebiri denilen bir matematik alanına aittir . Bunun ötesinde, daha genel olabilir ve tensör cebirini düşünebilirsiniz . Bu olsa gelişmiş şeyler.


1
Kafamın büyük bir kısmı, insanların neden vektörlerin bu kadar karmaşık olduğunu düşündüğü idi, bu yüzden yardımcı oldu. Belki de onları basit buluyorum çünkü liseden geometri almadan önce programlamada aslında geometri kullanıyordum.
starscape

1
Birkaç cevapta kullanılan konum vs hız örneği, konum (nokta), hız (vektör) ve ivme (vektör) olduğunda bozuluyor. Hızı değiştirirseniz, hızlanma değişmez, ancak ikisi de vektördür. Vektör ile nokta arasındaki fark, doğru olsa da, bir dikkat dağıtıcıdır - pratikte tüm oyunlar, kökene tamamen bağlı olan vektörler olarak depolar (belki bir sahne grafiği kullanıyorsanız dolaylı olarak).
Alistair Buxton 27.03

1
@AlistairBuxton Amacınızı takip etmiyorum - koordinat sisteminizi çevirirseniz, ne bir nesnenin hızı ne de hızlanma değişir, ama koordinatları döndürürseniz, o zaman hem hız hem de hızlanma döndürülür. Bu yüzden hiçbir şeyin "bozulduğu" yeri göremiyorum.
Nathan Reed

2
@AlistairBuxton Ve "vektör olarak depo pozisyonları" diye bir şey yoktur. Oyun depolamak iki pozisyon ve bir özellikle sayısal bileşenleri listeleri gibi vektörleri koordinat sistemi. Bu onları aynı şey yapmaz. Bir benzetme yapmak için: girişler ve şamandıralar ikili bitlerin bir listesi olarak saklanır, fakat farklı anlamlara gelir ve farklı işlemlere sahiptir.
Nathan Reed

1
@Val Tamamen temelsizsiniz. Bir vektör [p-pozisyonu, v-hızı] değildir. İçinde hem nokta hem de hız yok. Sadece [x-hızı, y-hızı, z-hızı] (bir hız vektörü için). Mesele şu ki, bu [x-pozisyonu, y-pozisyonu, z-pozisyonundan] farklı bir şey olduğu yönünde.
Nathan Reed,

7

Vektörler o kadar da kötü değil. İnsanların aşina olmadıkları bir parça matematik var.

Birincisi ve en önemlisi, bir Vektör uzayda bir konumu temsil etmemektedir. Bu kavramsal olarak çok önemlidir. Bir vektör 'Kuzey' gibi bir yönü ve bir büyüklüğü temsil eder. Normal XY koordinatlarının normal olduğu bir haritada, 'Kuzey' vektörü (0,1) (Y Ekseni üzerinde) olacaktır. Bu, menşei nereye koyduğunuza bir birim yukarıda olan pozisyonla (0,1) karıştırılmamalıdır. Bir vektör bir yön ve büyüklüktür .

Yer değiştirme (hareket) bir vektördür (iki birimi yukarı ve bir birimi sağa hareket ettirmek gibi), Konum değildir.

Vektörler, kendi başlarına, insanların bir problemi olduğu değildir. Genellikle vektörler üzerinde matrisler ve işlemler var.

Örneğin, bir Vektörü 'Dönme Matrisi' olarak adlandırılan özel bir matris ile çarparsanız, vektör, matris tarafından belirtilen miktarda döndürülür. Ek olarak, bazı kişilerin Matrix çarpımı ile ilgili sorunları var. Eğer aşina değilseniz, araştırın.

Ayrıca, bu matrisleri (veya işlemleri) birlikte 'istifleyebilirsiniz'. Gibi X ekseni etrafında 90 derece döndürün, ardından Y ekseni etrafında 90 derece döndürün. Birincisi Matrix M ve ikincisini N olarak adlandırırsak, işlem v * M * N olur. Bununla birlikte, Matrix çarpımı değişmeli değildir, bu nedenle v * N * M ile aynı değildir.

Grafik programlamada, vektörler ve diğer matrislerde düzenli olarak çok daha karmaşık işlemler gerçekleştirirsiniz. FoV için dönüşümler ve koordinatlarınızı ekran boşluğuna koymak vb. Gerçekten de fena değil, ama yeni insanlar için korkutucu olabilir.

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.