3Dベクトルがポイントを表す場合、どのように長さを設定できますか?


27

ベクトル演算を理解しようとしています(特にUnityエンジンでの使用)。ベクトルがポイント(位置と方向)のみを表す場合でも、ベクトルがどのように長さ(大きさ)を持つことができるのかわかりませんか?

それは、大きさが単に原点(0、0、0)からの距離であることを意味しますか?それとも何か不足していますか?


14
数値とも呼ばれるスカラーを考えてください。絶対値、差、割合などを意味する場合があります。
Peter

1
Normalizedコンテキストでは、は保持するDirectionMagnitude1を持つ新しいベクトルを意味します。つまり、 Normalizedベクトルは元のベクトルをスケーリングすることによって作成されます。
-Theraot

@Theraot、ありがとうございます、その文は私を大いに助けてくれました!
モハメッドヌールディン

19
そうではありません。変位を表します。位置ベクトルと見なした場合にのみ、あるを指します。その場合、(0、0、0)からの変位を示します。そのような位置ベクトルの長さは、原点から原点までの距離です。
ポリノーム

1
@ピーター私はあなたに反対しなければならないのではないかと心配しています。ベクトルの標準的な代数的定義は、ほとんど点を意味しません位置ベクトルを使用してポイントを表すことができますが、それらポイントでないため、そのように考えると便利なことがよくあります。「5メートル」は常に距離(または長さ)であり、時間や色にはなりません。異なるシンボルを使用すると便利なことがよくあります-私は個人的にベクトルを表すために(5、5、5)を使用することは決してなく、常に(5、5、5)^ T(転置のためのT)を使用するか、適切な列表現を使用しますサポートされている場所。ベクトルと言うのポイントであるため、不正確さが生じます。
ポリグノーム

回答:


20

それは、大きさが単に原点(0、0、0)からの距離であることを意味しますか?

TL; DRの答えであってもよい:はい、あなたはそのようにそれを想像することができます。

しかし、これが間違った理解に結びつかないかどうかはわかりません。


ベクトルはポイントではなく、2つの間に重大な違いがあります!

ベクトルが通常「矢印」として表されるという事実は、間違った印象を与える可能性があります。実際、ベクトルは単一の矢印ではありません。ベクトルは、同じ長さと方向を持つすべての矢印のセットであると言うのがより正確です。(通常描かれている矢印は、これらすべての矢印の1つの代表にすぎません)。しかし、ここで数学の退屈な詳細に行き過ぎたくありません。

さらに重要なことは、ポイントとベクトルの間に決定的な違いがあり、それはグラフィックプログラミングでポイントまたはベクトルを変換するときに明らかになります。私はUnityに慣れていませんが、ドキュメントを一目見ただけで、Matrix4x4クラスのポイントとベクトルの最も重要な違いをモデル化しています。2つの異なる機能があります。

違いは、大まかに言って、ベクトルは変換されないのに対し、ポイントは変換されることです。次の4x4マトリックスを想像してください。

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)に関する翻訳について説明しています。さて、次の擬似コードがある場合

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

その後tp、(3,4,5)になりtvますが、wheras はまだ(2,3,4)になります。ベクトルを変換しても変更されません(上記のように、同じ大きさと方向を持つすべての矢印のセットであるため)。


Unityがベクターポイントの両方にVector3クラスを使用するという事実は正当なものですが、混乱を招く可能性があります。他のライブラリはとを区別して区別し、時には。Point3DVector3DTuple3D


3
「ベクトルは、同じ長さと方向を持つすべての矢印のセットです」と数学的に意味がありますか?あなたはいくつかの同値類について話しているように聞こえますが、ベクトル空間は同値類として定義されていると私が読んだことのないものです。—いずれにせよ、あなたは非常に重要な... ahem、pointを提起します。ベクトル空間とアフィン空間は区別されます。これらはそれぞれ、すべてのベクトル/すべての点のタイプの数学名です。
左辺

3
A vector is, in fact, not a single arrow、あなたは正しいです、Vector3を単一の矢印として表すことは、まさに私を混乱させたものです。この重要な文に言及して+1。
モハメッドヌールディン

@leftaroundaboutベクトルにはさまざまな定義があります(「n個のタプル」など)。線形代数で、すべての矢印のセットと、「同等の長さおよび方向を持っている」という関係を想像してください。この関係によってすべての矢印のセットを因数分解すると、等価クラスが生成されます。私は数学的な詳細については選びたくありませんでした(私は数学者でもありません)が、ベクトルが「(0,0,0)で始まる矢印」ではないことを明確にしたいと考えました。ポイント(...)は次のとおりです。ベクトルには「位置」がありません。
-Marco13

2
vector配列または複数を意味するという用語のコンピューターサイエンスの使用により、さらに複雑になります!C ++ではstd::vector<Vector3>、たとえばを使用できます。A vectorVector秒。
user1118321

ああ、これ何を意味するアフィン空間から出発して、あるXあなたは、任意の2点(のための定義、PQ)の矢印SAX)として最短パス(最小集積絶対誘導体と、すなわち微分可能関数)S: [0,1]→ Xように、S(0)= PおよびS(1)= Q。次に、ベクトルの空間は、同値類の集合であるAX)/〜ここでSσ場合∂ S /∂ T =∂ σ/∂ トンのすべてのためのT ∈] 0,1 [?これは理にかなっていますが、微分はすでにそれらに依存しているため、これをベクトルの定義として使用できるとは思いません。
左辺り

36

それは、大きさが単に原点(0、0、0)からの距離であることを意味しますか?

それはまさにそれです。

とりわけ、ベクトルは、コンテキストに応じて、ポイント(位置)、方向、および/または速度を表すことができます。

この変数がある場合:

Vector3 mPosition;

通常は、3D空間のどこに位置するかだけを表します。

この変数がある場合:

Vector3 mDirection;

一般的に方向を表します。通常、これらのベクトルは単位ベクトル、つまり長さ1のベクトルです(ただし、常に必要なわけではありません)。単位ベクトルと正規化ベクトルは同じもので、両方とも長さ1です。これらのベクトルは、他のベクトルと一緒に使用して位置を変更することがよくあります。

ベクトルを正規化すると、その長さ(大きさ)は失われますが、方向は変わりません。方向だけが必要な場合(たとえば、その方向にオブジェクトを移動したい場合)、ベクトルに(単位長ではない)大きさがあると、予期しない計算結果が発生します。

単一の計算に法線ベクトルが必要な場合、を使用できますがmyVec3.normalized、影響myVec3はありません。正規化されたベクトルを頻繁に使用する場合は、おそらく変数を作成する必要があります。

Vector3 myVec3Normalized = myVec3.normalized;

normalizedメソッドの繰り返し呼び出しを避けるため。

変数が表示された場合:

Vector3 mVelocity;

通常、力/速度を表します。これらのベクトルは方向表し、その大きさ(長さ)は重要です。彼らはまた、で表すことができるVector3 mDirection;float mSpeed;

これらはすべて、(0、0、0)のローカル原点、または別のポジションに関連して使用されます。


4
それはベクトルに含まれる情報の一部を破壊し、その情報は大きさです。ただし、方向は同じままです。

6
@Eldyそれの音符にすることをより正確にmyVec3.normalized返す新しいのVector3を、同じ方向が、大きさ1を持つことがmyVec3変更されていません
Caleth

4
NPSF3000 @これらのは次のようになりグッジャウンス、それを超え名のコンセンサスはありません。私たちは皆、ジャークが一般的ではないことを喜んでいます。
-Theraot

1
@ NPSF3000位置の4次、5次、6次微分は、スナップ、クラックル、ポップにする必要があると示唆する人もいます!:-D en.wikipedia.org/wiki/Snap,_Crackle_and_Pop#Physics
gbmhunter

1
に変更these vector are unit vectorsするdirection vectors are unit vectorsか、何かですか?なぜなら、今のところ、読者はthese上記の両方の例を参照していると混乱しているかもしれないmPosition から mDirectionです。(それは私が最初にそれを読む方法です。)
Supr

8

それは、大きさが単に原点(0、0、0)からの距離であることを意味しますか?

あなたそれをそのように見ることができますが、そのように見るだけでは間違った理解につながる可能性があります。


まず、ベクトルは点ではなく、点はベクトルではありません。

ベクトルポイントの違いは、期間時刻の違いと同じです。前者は時間間隔であり、後者は単一の時点です。6時間は6時と同じではないことは明らかです。「レースは1時まで続く」とは言わず、「13時間で会いましょう」とも言わないでしょう。レースは1時間(間隔)続き、特定の時点である13時に会います。

同じことがベクトルとポイントにも当てはまります。ベクトルは、intervall-あなたがする場合の変位です。それは特定の方向を指し、はい、それは長さを持っています。

したがって、時間と時刻のように、ポイントとベクトルは関連しています。レースは13時から始まり、15時で終わります。両方とも時点です。しかし、15時-13時= 2時間、期間。レースは2時ではなく2時間続きます。

同じことがポイントにも当てはまります。点Aと点Bの差は、⃗v= B-Aで表されます。wherevはベクトルを表し、AとBは点を表します。

現在、位置ベクトルと呼ばれるものがあります。ベクトルが原点から特定の他のポイントを指していると言う場合、ベクトルをある程度ポイントと見なすことができます。言い換えると、すべての友人が、午前0時(0時)以降の時間として時間を呼び出すことを知っている場合、「6時間で会います」と言うことができます。彼らは、0時+ 6時間= 6時であるため、いつ会うかを知っています。これは実際に海軍が行うことです。「私たちは6時で会います」とは6時を意味します。

したがって、ベクトル<1,2,3>はポイント(1,2,3)を指します。原点をアンカーポイントと見なす場合、はい、このベクトルの長さは原点からのそのポイントの距離です。

しかし、ベクトル<1,2,3> (1,1,1)から(2,3,4)を指し、その場合、その長さはそれらの 2点間の距離を示します。


ご覧のとおり、ベクトルは長さを持っています。なぜなら、それは点ではなく、間隔、つまり変位だからです。



5

ベクトルは、3D空間の2点間の方向(方向と距離)または3D空間の位置(長さは原点からの距離)を表すことができます。

ポイントAとポイントBがある場合、BA = AB = AからBに到達するために移動する必要がある方向と距離。


ありがとうございますが、Vector3.Normalizedを使用することはどういう意味ですか?ドキュメントには次のReturns this vector with a magnitude of 1ように書かれています:では、ベクターに保存されている情報は破壊されませんか?実際、MagnitudeそれNormalizedは私を混乱させたものです。
モハメッドヌールディン

空間内のポイントであるか、速度を示す矢印であるかはすべて頭の中にあります。同じデータが両方を表します。
雑多な

@MohammedNoureldin正規化されたベクトルは、単位長の1つです。はい。ベクトルを正規化すると、長さまたは大きさの情報が失われます。両方が必要な場合(多くの場合に有用)、ベクトルの長さを取得してから正規化します。
イアンヤング

1

ジオメトリAPIはツールをよりアクセスしやすくするために明確な定義を選択するだけであり、これらがジオメトリでどのように概念化されているかに対応しないため、Unityがポイントとベクトルについて言うことは長期的には無意味です。可能であれば、クラスの実装を見てください。それはarbitrary意的であるため、その定義を知ることが概念が何であるかを理解する唯一の方法です。完全な開示、Unityの経験はありません。

ベクトルは、ジオメトリ内のポイントの概念が基礎となるセットの要素によってエンコードされるという点で、ベクトル空間内のポイントです。ベクトル空間には、原点または0と呼ばれる識別可能なベクトルあります。線形代数は、ユークリッドジオメトリの断片を代数的にエンコードする試みです。

矢印とその長さ

ポイントのスペースを横切る動きは、ソース/前のポイントからターゲット/後のポイントへのすべての矢印として頻繁に解釈されます

2つの引数の関数を1つの引数に適用して、1つの引数の関数を生成できます。各ベクトルyをベクトルx + yに変換する関数x +と言えます。これは、xを追加して関連付けられた翻訳です。関連する矢印は、ポイントyからポイントx + yまで続きます。参照:部分適用カリー化

では、なぜ1つの矢印だけを使用するのでしょうか?特定のベクターへの原点からの矢印は、XにおけるX + -原点は、ベクトル加算のアイデンティティです。そのため、値x +0 = xから変換x +を復元できます。

スペースのグラフィック表示として、矢印表示は、それを決定する値から翻訳の効果を視覚的または物理的に推定する能力に関係しています。いつその能力がありますか?

ベクトル空間与えるノルムその製造ノルム線型空間での概念を提供することにある長さだけでなく、0からの距離として理にかなっているベクターのを、これは三角不等式を満足する距離となります2つのベクトルの長さとそれらの合計の長さとの関係に関する強い制約。長さから、我々はできる距離を定義し、この作るために距離空間、および測地線は、それはできるだけ短くしますストレートという点で本質的だパスです。ユークリッドノルムはユークリッド距離を誘導し、測地線は矢印の線分ですが、あなたは使用して測地線としての矢印を描く場合は別の規範を、測地線から翻訳の幾何学的効果を推定して、幾何学について学ぶことができます。

ポイントとベクトルの意味

ゲームジオメトリを実行する場合、ポイントのスペースはベクトルスペースではありません。次元のアフィン空間N を埋め込むことができる寸法の射影空間においてN。アフィンマップは投影性に還元されます。プロジェクティビティもFOVを可能にします。w/ cアフィンではないと思います。Projectivitiesには利点があります:

フィールド上の射影n空間は、射影空間の点を線形空間の原点を通る線として扱うことにより、線形(n +1)空間(ベクトル空間)から構築できます。原点を通る平面は、順に射影線を与えます。ベクトルと固定行列の乗算は線形マップです。これが行列乗算の目的です。線形マップは原点を保持し、発生率と互換性があります。特にあれば、fはある線形同型に対応する可逆(N +1)×(N +1)行列)と、2つのラインL、M原点スパンを通る平面A、次いでf L、f Mf Aにまたがる原点を通る線なので、fは射影空間への入射も保持します-可逆行列には射影性が関連付けられています。行列の乗算は、線形マップの構成、したがって射影性をエンコードします。

線形空間から原点を削除すると、原点を通る特定の線上のすべてのポイントは、互いにスカラー倍数になります。この事実を利用して、ホモジナイゼーションは、各射影点に代わる線形点と、各射影変換に代わる可逆行列を選択します(この2D-> 2Dアフィンマップは3D-> 3D線形マップビデオのように)。行列行列および行列ベクトル積の下で代表が閉じられ、一意の射影的なものによって与えられ、与えられる方法。線形平面からの射影平面構築に関するこの説明は、いくつかのことを結び付けます。

したがって、model-view-projectionマトリックスパイプラインでは、ベクトルを使用して射影空間のポイントを表しますが、射影空間はベクトル空間ではなく、使用するベクトル空間内のすべてのベクトルが点を表すわけではありませんジオメトリの(右のアフィン平面の写真を参照)。変換が必要な場合は、ベクトル和の代わりに変換行列を使用します。しばしば、人々は射影ベクトルまたはアフィンポイントベクトルを呼び出します。特にこの方法でセットアップを使用する場合です。


2
+1。しかし、私の直感では、使用している言語を理解しているほとんどの人は、元の質問に対する答えをすでに認識しているため、カジュアルな読者向けに答えを調整することをお勧めします。
ピーター

@ピーターすべてに対処するのは難しいと感じました。もっとアクセスしやすいようにしたいのですが、入念にせずにそれを行う方法がわかりません。ただし、OpenGLを初めて使用していたとき、同次行列、遠近行列、および加算による翻訳の代替として翻訳行列がどのように発見されるのかについて疑問に思っていました。形式主義は言語であり、正しい言い回しを与えることで、概念を議論する方法が出てくると思います。ただし、簡潔にするのは非常に不透明なので、これはWikiの読書リストに似ています。
ロキ時計

いくつかのリンクを追加しました。特に、アフィンマップが線形マップとして高次元で行われているビデオを追加しました。うまくいけばそれが助けになるでしょう。
ロキ時計

いいね より多くの賛成に値する。
ピーター

-1

ベクトルの長さ(または大きさ)はsquare root of (x*x+y*y+z*z)です。ベクターは、常に原点から通過する光線と考えられる<0,0,0> 介してベクターに記載点<x,y,z>

これに関する統一ドキュメントは、ここにあります


申し訳ありませんが、これは完全に間違っています。2つのポイントAとBがある場合、v = BAはAからBに向かうベクトルです。この場合、vは原点をまったく通過しません。ベクトルは点ではありません。ポイントを(位置ベクトルとして)表現するために使用できますが、それ別のものです。代数の基礎をまっすぐにしてください。
ポリノーム

混乱を取り除くために回答を更新しましたが、UnityでVector3が何であるかについてのドキュメントへの参照を提供しており、私の回答はあなた自身を含む上位の回答すべてと一致していました。
ステファン

統一ドキュメントを注意深く読むと、原点はベクトルの長さとは関係ないため、原点に言及していないことに気付くでしょう。(1,1,1)と(2,3,4)の間のベクトルは<1,2,3>で、長さはsqrt(1 ^ 2 + 2 ^ 2 + 3 ^ 3)=〜3.9です。これらの2点間の距離です。それも、原点に触れることはありませんまったく。私はあなたがおそらくそれは、ないので、私の答えは、あなたと同意すると思う可能性がどのように混乱していますすべてで
ポリノーム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.