[解決済み] 2次元ベクトルの外積を計算する
質問
ウィキペディアより
<ブロッククオートの2つのベクトルに対する2項演算である。 三次元 ユークリッド空間では、2つの入力ベクトルを含む平面に垂直な別のベクトルが得られます。
定義が3つでしか定義されていないことを考えると、( または7、1、0 2次元のベクトル同士の外積はどのように計算するのでしょうか?
私は2つの実装を見たことがあります。一つは新しいベクトルを返し(ただし単一のベクトルしか受け付けない)、もう一つはスカラーを返します(ただし2つのベクトル間の計算です)。
実装1(スカラーを返す)。
float CrossProduct(const Vector2D & v1, const Vector2D & v2) const
{
return (v1.X*v2.Y) - (v1.Y*v2.X);
}
実装2(ベクトルを返す)。
Vector2D CrossProduct(const Vector2D & v) const
{
return Vector2D(v.Y, -v.X);
}
なぜ実装が異なるのですか?スカラーの実装は何に使うのでしょうか?ベクター実装は何に使うのか?
なぜかというと、私自身がVector2Dのクラスを書いていて、どのメソッドを使えばいいのかわからないからです。
どのように解決するのですか?
実装1は、入力ベクトルのZ値を暗黙のうちに0として、通常の3Dクロスプロダクトから生じるベクトルの大きさを返します(つまり、2D空間を3D空間内の平面として扱います)。 3次元のクロスプロダクトはその平面に垂直になるので、0 X & Y 成分を持ちます(したがって、返されるスカラーは3次元クロスプロダクト・ベクトルの Z 値です)。
なお、3次元のクロスプロダクトから得られるベクトルの大きさは 面積 は、2つのベクトル間の平行四辺形のため、実装1には別の目的があります。さらに、この面積は符号付きであり、V1からV2への回転が反時計回りに動くか時計回りに動くかの判定に使用できる。また、実装1はこれら2つのベクトルから作られる2x2行列の行列式であることにも注目すべきです。
実装2は、同じ2次元平面上で入力ベクトルに直交するベクトルを返します。 古典的な意味でのcross productではありませんが、quot;give me a perpendicular vector"という意味では一貫しています。
3次元ユークリッド空間は、2つの3次元ベクトルのクロスプロダクトが別の3次元ベクトルを返すという、クロスプロダクト操作の下で閉じていることに注意してください。 上記の2次元の実装は両方とも、何らかの形でそれと矛盾しています。
お役に立てれば幸いです...。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 2次元ベクトルの外積を計算する
-
[解決済み] ディープコピーとシャローコピーの違いは何ですか?
-
[解決済み】キャメルケースの頭字語【終了しました
-
[解決済み】Debug.Assert()はいつ使うべきですか?)
-
[解決済み】実存型とは何ですか?
-
[解決済み] さまざまなアプローチやコンセプトを理解するために学ぶべき重要な言語とは?[クローズド]
-
[解決済み] プログラミングにおける "Context "という言葉?[クローズド]
-
[解決済み] スタックオーバーフローを引き起こす最短のコードは何ですか?[クローズド]
-
[解決済み] 単項のブーリアン・トグル演算子を持つ言語はありますか?
-
[解決済み] 例外やエラーコードの規約 [終了しました]。