ベクターの何が違うのか、複雑なのか、役に立つのか?


21

これが本当の質問と見なされない場合はご容赦ください。しかし、それは私が本当に混乱しているものです。

他のゲーム開発者がベクターの使用が非常に有用であるという話を絶えず聞いていますが、ベクターの数学に誰もがどのように脅かされているのか、ベクターは気が遠くなるように思えます。私はそれらについて学ぶことを一度もしなかった。

だから、ついにウィキペディアでベクターを見て、驚いた。私が何らかの形で誤解しない限り、ベクトル(簡単にするために、2Dであると言います)は、xとy座標です。 誤解している場合は、修正してください。

だからここに私の質問があります:それは2(または3)次元座標の表現がベクトルであることを意味しないのですか?その場合、ベクトルと座標は同じものです。また、座標使用せずにゲームを作成することはほとんど不可能です。したがって、ベクターは、ゲームプログラミングをある程度行った人にとって、混乱したり、新しいものになるのでしょうか。

これは、いくつかの説明を使用できるものです。どんな助けも大歓迎です。


5
ベクトルは、3Dで回転を開始するまでは非常に単純です...その後、クォータニオンが必要になり、それらが気になります。
アリスターバクストン

ベクトルの概念は本当に紛らわしいです。私は数学、中に求めているmath.stackexchange.com/questions/429363math.stackexchange.com/questions/384927が、明確な回答を得ませんでした。それは純粋な欲求不満です。追加できるかもしれません。
ヴァル

1
これらの答えのすべての悪い類推で、人々が混乱するのは不思議ではありません。
アリスターバクストン

回答:


29

数学の専攻にベクターのポイントまたは座標の呼び出しを聞かせないでください!

2Dベクトルには、座標ではなくxおよびy コンポーネントがあります。ベクトルは位置を定義せず、方向と大きさを定義します。

なぜ人々が彼らに脅かされているのか、それはおそらく一般的に人々が数学に脅かされているのと同じ理由であるとは言えません。

ベクトルと座標は同じものではありません。見た目は似ていますが、使用方法は大きく異なります。

座標は世界の位置を定義します。ベクトルは方向と大きさを定義します。それらの2つはしばしば一緒に使用されます。例として:

キャラクターには位置と速度があります。位置は座標であり、速度はベクトルです。位置に速度を追加すると、ベクトルの大きさで定義された距離でベクトルの方向にキャラクターが移動します(ベクトルの大きさは速度であるため、方向と速度が得られます)。

または、この例では:

ここに画像の説明を入力してください

2つのキャラクターには位置があり、レーザーショットはベクトルです。2つの位置間のベクトルは(3,1)です。つまり、X軸に沿って+3移動し、Y軸に沿って+1移動します。Sqrt((X X)+(Y Y))で等級を見つけることができます。

ベクトル数学の優れた概要はWolfireブログで見つけることができます


7
誰かがベクターをポイントまたは座標と呼ぶと動揺するのは数学者だけではありません。私たちの物理学者もあなたを台無しにします。
TASagent

2
+1しかし、私がピッキングの場合、速度はベクトルであり、速度はそのベクトルの大きさです。
エルグン

2
@Val:それはナンセンスだとは言いません。ベクトルは単なるx座標とy座標であるという質問の誤解に対処します。「ベクトル空間の要素」に言及することで答えをより形式的または正確にすることは、人々がベクトル代数を威圧する理由を説明するのを助ける以外には何の役にも立ちません。
マルクストーマス

3
ベクトルは、(0,0)に適用した場合にどこにいるかを示すという点でのみ位置します。ベクトルは位置を変更できますが、位置情報は含まれていません。私はあなたが言っていることを理解しています。私たちが話している違いは、この質問にとって重要ではないと思います。これは、ベクターがゲーム開発で使用される方法です。ご意見ありがとうございます。
マイケルハウス

4
@Val:優れた線形代数の講義はByte56と一致します。ベクトルは空間内の位置と同じではありません。「北3マイル、東1マイル」を「南1マイル」に追加するのは理にかなっています。しかし、「ホワイトハウスの位置」を「ペンタゴンの位置」に追加しても意味がありません。基準点を(0,0)として固定すると、ベクトルを使用して点を決定できます。逆も同様です。そのため、一部の表現では、それらは似たように見えます。しかし、彼らは異なっています。抽象的に:アフィン空間ベクトル空間を比較します
PLL

9

正規化、内積、外積などのより複雑な操作を処理し、マトリックス間で複数の座標系を使用して変換を開始すると、脅迫要因が発生する可能性があると思います。これらは、強力なジオメトリと代数の背景を持っている場合でも、最初は必ずしも理解しやすいとは限りません。

また、少なくとも米国では、典型的な高校の数学のシーケンスを経験した人々は、線、勾配、角度などの観点から幾何学について考えることに慣れています。彼らはある程度それらを学ばなくてはなりません。代わりにベクトルと行列の観点から考えてください。線形代数の概念がそんなに伸びているということではなく、人々が学校で学んだと思われる古典的な幾何学で使用されている概念とはやや異なる概念のセットであることです。


ところで、ベクトルとポイントの違いは、それらに対して実行できる操作にあります。両方が(特定の座標系で)コンポーネントのリストで表されるため、「同じ」ように見えますが、許可される操作は同じではありません。たとえば、2つのベクトルを追加したり、ベクトルにスカラーを掛けたりできます。ポイントでそれを行うことはできません-少なくとも、そうすることは意味がありません。ただし、2つのポイントを減算することができ、結果は1つのポイントから別のポイントへのベクトルになります。ベクトルにポイントを追加して、新しいポイントを取得することもできます。

点とベクトルも、変換に関して異なる動作をします。つまり、点は平行移動の対象ですが、ベクトルは平行移動の対象ではありません。位置(ポイント)と速度(ベクトル)で移動するオブジェクトの例を考えてみましょう。オブジェクトを別の場所に移動すると、その位置は変更されますが、速度は変更されません。

実際、この推論の行をさらに進めると、ベクトルだけではありません。covectorsbivectorsのような他のエンティティもあります。これらは、座標系にコンポーネントのリストがあるという点でベクトルのように見えますが、利用可能な操作と変換への反応の点で異なる動作をします。これらはすべて、グラスマン代数と呼ばれる数学の分野に属します。それ以上に、もっと一般的で、テンソル代数を考えることができます。ただし、これは高度なものです。


1
私の混乱の大部分は、人々がベクトルがとても複雑だと思った理由でした。高校のジオメトリを取得する前に、実際にプログラミングでジオメトリを使用していたため、おそらく単純なものだと思います。
13

1
いくつかの回答で使用される位置と速度の例は、位置(ポイント)、速度(ベクトル)、および加速度(ベクトル)がある場合に分類されます。速度を変更しても、加速度は変わりませんが、どちらもベクトルです。ベクトルとポイントの区別は正しいですが、注意散漫です-実際には、すべてのゲームは位置を暗黙的に原点に相対的なベクトルとして保存します(シーングラフを使用する場合は間接的に)。
アリスターバクストン

1
@AlistairBuxton私はあなたのポイントに従いません-座標系を変換すると、オブジェクトの速度も加速度も変化しませんが、座標を回転させると、速度と加速度の両方が回転します。そのため、どこで「故障」するかわかりません。
ネイサンリード

2
@AlistairBuxtonそして、「位置をベクトルとして保存する」というものはありません。ゲームは、特定の座標系で位置ベクトルの両方をスカラーコンポーネントのリストとして保存します。それは彼らを同じものにしない。類推すると、intとfloatは両方ともバイナリビットのリストとして格納されますが、意味は異なり、操作も異なります。
ネイサンリード

1
@Val基地から完全に外れています。ベクトルは[p位置、v速度]ではありません。内部にはポイントと速度の両方がありません。それはただ[x-velocity、y-velocity、z-velocity](速度ベクトルの場合)です。ポイントは、これが[x-position、y-position、z-position]とは異なる種類のものであることです。
ネイサンリード

7

ベクトルはそれほど悪くありません。人々がなじみのない数学が少しあります。

何よりもまず、ベクターは空間内の位置を表しません。これは概念的に非常に重要です。ベクトルは、「北」のような方向と大きさを表します。通常の数学XY座標を持つマップでは、「北」はベクトル(0,1)(Y軸上)です。これを位置(0,1)と混同しないでください。位置(0,1)は、原点を置く場所の1つ上の単位です。 ベクトルは方向と大きさです。

変位(移動)はベクトルです(2ユニットを上に移動し、1ユニットを右に移動するなど)。位置は移動しません。

ベクター自体は、人々が問題を抱えているものではありません。通常、それはベクトルの行列と演算です。

たとえば、ベクトルに「回転マトリックス」と呼ばれる特別なマトリックスを掛けると、マトリックスで指定された量だけベクトルが回転します。さらに、一部の人々はマトリックス乗算に問題があります。慣れていない場合は調べてください。

さらに、これらの行列(または操作)を「スタック」できます。X軸を中心に90度回転し、次にY軸を中心に90度回転します。最初のマトリックスMと2番目のマトリックスNを呼び出すと、演算はv * M * Nになります。ただし、行列の乗算は可換ではないため、v * N * Mと同じではありません。

グラフィックスプログラミングでは、ベクトルやその他の行列に対して定期的にかなり複雑な操作を行います。FoVの変換や、画面スペースなどに座標を配置することは、それほど悪くはありませんが、新しい人にとっては恐ろしいことです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.