タグ付けされた質問 「linear-algebra」

線形代数は、ベクトル空間とそのような空間間の線形マッピングに関する数学の分岐です。タグは通常、ベクトルの計算に関する質問に使用されます。

3
他のオブジェクトのオフセットに基づいてオブジェクトを回転するにはどうすればよいですか?
Y軸を中心に回転するタレットの3Dモデルがあります。この砲塔には、オブジェクトの中心から大きく外れた大砲があります。砲塔ではなく大砲で指定されたターゲットを狙います。ただし、タレットを回転させることしかできないため、目的ごとに達成するためにどの方程式を適用する必要があるかわかりません。 次の画像は私の問題を示しています。 ターゲットに砲塔「LookAt()」がある場合、大砲から発するレーザーは、そのターゲットを完全に見逃してしまいます。 これが完全にトップダウンのシナリオであり、大砲が砲塔と正確に平行である場合、私のロジックは、偽のターゲットは実際のターゲットに等しい位置に加えて、砲塔と大砲。しかし、実際のシナリオでは、カメラの角度は60度であり、大砲はわずかに回転しています。 次の図は、シナリオを示しています。 正確な理由はわかりませんが、同じオフセットを適用すると、タレットから特定の距離を狙っているときにしか機能しないようです。 ロジックに欠陥がありますか?ここに基本的なものがありませんか? 最終編集:@JohnHamiltonの最新アップデートが提供するソリューションは、この問題を完全に正確に解決します。これで、誤った実装を説明するために使用したコードと画像を削除しました。

3
正投影と遠近法以外の3D投影法はありますか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 質問はほとんどタイトルにあります。OpenGLなどの3Dシステムで使用できる、正投影法と遠近法以外の注目すべき3D投影法はありますか? 特に、ゲームデザインで特定の用途があるものはありますか?

6
ゲームプログラマ向けの優れた線形代数の本とは何ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 優れた物理学を備えた優れたゲームを作成するには、線形代数の学習を開始する必要があると言われました。 私は線形代数の本を読んでいますが、それは私にはまったく異質です。著者は線形方程式(2つの方程式、2つの変数)を解くことから始めて、学校でそれについて学んだことを覚えていますが、ほとんどすぐにネクロノミコンから直接得られると思われる他のものに飛びつきます。 基礎から始めて、良い数学を学ぶためにどの本を読むことができますか? 助けてくれてありがとう。

3
2Dベクトルに対する垂線を見つけるにはどうすればよいですか?
プレイヤーがマウスカーソルの位置に向かって前方に移動するトップダウンゲームを作成しています。プレイヤーの移動コードの一部として、プレイヤーの現在の対面ベクトルに垂直なベクトルを決定する必要があります(ストラフの動作を実装するため)。 特定の2Dベクトルの垂直ベクトルを計算するにはどうすればよいですか?

6
3Dグラフィックプログラミングの数学トピック[終了]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 4年前に閉鎖されました。 ロックされています。この質問とその回答はロックされています。なぜなら、質問はトピックから外れていますが、歴史的に重要だからです。現在、新しい回答やインタラクションを受け入れていません。 3Dグラフィックプログラミングには、次の数学トピックが必要であることを理解しています。私は数学コースでそれらのいくつかを始めました。誰かが私にそれらがどのように適用されるかを説明するリソースの方向に向けることができますか?どのグラフィック/ゲームの問題を解決するために使用されていますか? ベクトル数学 行列演算 四元数 線形代数 私が見る限り、これらはすべて線形代数/行列のトピックです。他に必要なトピックはありますか?

3
変換マトリックスの効果を逆にするにはどうすればよいですか?
私は最近、GLFWを介してOpenGLとC ++を使用するゲームに取り組んでいます。 ゲームでは、砲塔を搭載した飛行船があります。飛行船はワールド空間座標内を動き回り、砲塔はそれを「追従」します。 砲塔には、視線/照準の方向のための独自の座標空間があります。基本的に、砲塔が方向を目指すとき、(0,0,1)飛行船の移動方向と平行に向けられます。 タレットにワールド空間ターゲットを与えるために、ワールド空間座標を取得し、それらをタレット空間座標に変換するマトリックスがあります。 タレットが発砲すると、ワールドスペースに発射物をスポーンさせたいのですが、変換マトリックスを使用してタレットスペース座標をワールドスペースに戻すエレガントな方法はありますか? より一般的な質問の方法は次のとおりです。空間Mから空間Aへの座標を取る行列がある場合B。使用するための簡単な方法があるMから座標を取得するBにはA?

4
ラインコリジョンで2Dラインを検出する方法
私は数学が少し後戻りしているFlash ActionScriptゲーム開発者ですが、物理学は面白くてクールです。 参考のために、これは私が作っているものと類似したゲームである:Untangledフラッシュゲーム 私はこのもつれのないゲームをほぼ完全に論理的に完成させました。しかし、2本の線が交差する場合、異なる色を表示するために、交差または「もつれた」線が必要です。赤。 線分衝突を検出するためのアルゴリズムを提案できれば、本当に親切な人になります。私は基本的に「算術的」よりも「視覚的に」考えるのが好きな人です:) 編集:アイデアをより明確に伝えるために、いくつかの図を追加したい PS私は次のような関数を作成しようとしています private function isIntersecting(A:Point, B:Point, C:Point, D:Point):Boolean 前もって感謝します。

3
偏った保守的なランダムウォーク
とのどちらかとして保存されたスプライトがVelocityありPositionますVector2。各Updateサイクルで、速度が位置に追加されます。 スプライトに3番目のベクトルを与えたいと思いTargetます。新しいターゲットは、どの反復でも指定できます。スプライトが本質的にランダムウォークパターンで移動するようにしたいのですが、2つのパラメーターを公開する必要があります。 典型的なランダムウォークは、任意の距離までの距離を増加または減少させる可能性がありますTarget(さらに、接線方向の動きのわずかな可能性)。私はランダムウォークにバイアスをかけることができなければなりませんが、それでもランダムではありますが、スプライトが「決定する」方向がより近くなるようにする必要がありますTarget。 ランダムウォークは「スムーズ」である必要があります。スプライトの方向が急激に変わることはありません。これは、プレイヤーにとって「ちらつき」または「震え」のように見えるためです。平均化するとゆっくりと近づきながら、ランダムに移動しながら、このように、または徐々に変化します。 これを行うための良い、簡単な方法は何ですか?可能であれば、答えをVector2 RandomWalk(Vector2 target)メソッドとして提供します。 NextGaussian(mean, stdev)役立つ方法があれば、すでに利用可能なメソッドがあります。

5
カメラの背後にあるポイントを正しく投影するにはどうすればよいですか?
興味のあるポイントの上に感嘆符を付ける3Dゲームを作成しています。 2D画面のどこにマーカーを配置するかを見つけるために、マーカーを配置する3Dポイントを手動で投影しています。 次のようになります。 よさそうだ。マーカーが画面の外側にある場合は、座標をクリップして画面に合わせます。次のようになります。 これまでのところ、アイデアはかなりうまくいっています。ただし、対象のポイントがカメラの背後にある場合、結果のX、Y座標が反転し(正/負など)、次のように画面の反対側の隅にマーカーが表示されます。 (投影されてからクランプされた点がマーカーの先端です。マーカーの回転を気にしないでください) 錐台の後ろの座標がXとYで反転しているので、それは理にかなっています。したがって、私がしていることは、カメラの後ろにある座標を反転することです。しかし、座標を反転する必要があるときの正確な条件はまだわかりません。 これは現在、私の投影コードは次のようになっています(C#でSharpDXを使用)。 public override PointF ProjectPosition(float viewportWidth, float viewportHeight, float y) { var projectionMatrix = Matrix.PerspectiveFovRH(GetCalibratedFOV(Camera.FOV, viewportWidth, viewportHeight), viewportWidth / viewportHeight, Camera.Near, Camera.Far); var viewMatrix = Matrix.LookAtRH(new Vector3(Camera.PositionX, Camera.PositionY, Camera.PositionZ), new Vector3(Camera.LookAtX, Camera.LookAtY, Camera.LookAtZ), Vector3.UnitY); var worldMatrix = Matrix.RotationY(Rotation) * Matrix.Scaling(Scaling) * Matrix.Translation(PositionX, PositionY, …

2
どのようにして変換行列から方向を抽出できますか?
4x4の変換行列Mがあり、Mで変換したときの球の形状を確認したい(球は原点にあり、半径は1です)。 Mに(0,0,0,1)を乗算するだけで中心を見つけることができます。 ただし、Mは球を押しつぶして回転させることができるため、半径が問題になります。結果として得られる楕円体の新しい半径を見つけるにはどうすればよいですか?オリエンテーションを見つける方法はありますか? 具体的には、変換された球を囲む境界球のサイズを知る必要があります。言い換えると、| M * V-M *(0,0,0,1)|の最大値は何ですか。ここで、Vは単位ベクトル(元の球上の点)です。

2
ポイントが2つの平行線の間にあるかどうかをテストするにはどうすればよいですか?
私が設計しているゲームでは、原点からマウスの方向に向かって爆発する爆発があります。この爆風の幅は常に同じになります。 画面の下部(現在のもの)に沿って正方形が移動します。正方形は、プレーヤーが制御する爆風の影響を受けます。 現在、私はこれらの正方形の角が爆風の2つの境界線内にあるかどうかを見つける方法を模索しています。これを行う最善の方法は、爆風が完全に水平であるかのように原点の周りに正方形の角を回転させ、角のY値が爆風の幅以下であるかどうかを確認することであると考えました彼らは影響を受ける地域内にあることを意味しますが、私は解決できません

4
非整列衝突回避(ステアリング)を使用しているときにオブジェクトの衝突が移動する
まれなケースだと思うのに、未調整の衝突回避に問題があります。2つのオブジェクトを互いに近づけるように設定しましたが、オフセットはわずかです。そのため、1つのオブジェクトがわずかに上方向に移動し、1つのオブジェクトがわずかに下方向に移動しています。 私の位置合わせされていない衝突回避ステアリングアルゴリズムでは、オブジェクトの前線と、これら2つの線が最も近い他のオブジェクトの前線上の点を見つけています。これらの最も近い点が衝突回避距離内にあり、それらの間の距離が2つのオブジェクトの境界球の2つの半径よりも小さい場合、オブジェクトは適切な方向に離れるはずです。 問題は、私の場合、線上の最も近い点が実際の衝突点から本当に遠くにあると計算されることです。これは、オブジェクトが通過するときに、各オブジェクトの2本の前進線が互いに離れるからです。問題は、これが原因でステアリングが行われず、2つのオブジェクトが部分的に衝突することです。 衝突点を正しく計算する方法について何か提案はありますか?おそらく、2つのオブジェクトのサイズを考慮に入れているのでしょうか。

2
レイキャスティングチュートリアル/ベクトル数学の質問
私はhttp://lodev.org/cgtutor/raycasting.htmlでこの素晴らしいレイキャスティングチュートリアルをチェックしていて、おそらく非常に単純な数学の質問があります。 DDAアルゴリズムで、光線が1つのx側から次のx側へ、または1つのy側から次へと移動する距離であるdeltaDistXおよびdeltaDistY変数の計算を理解できません。 y側、世界地図を構成する正方形のグリッド内(下のスクリーンショットを参照)。 チュートリアルでは、それらは次のように計算されますが、あまり説明されていません。 //length of ray from one x or y-side to next x or y-side double deltaDistX = sqrt(1 + (rayDirY * rayDirY) / (rayDirX * rayDirX)); double deltaDistY = sqrt(1 + (rayDirX * rayDirX) / (rayDirY * rayDirY)); rayDirYとrayDirXは、キャストされた光線の方向です。 これらの数式をどのように取得しますか?ピタゴラスの定理がその一部であるように見えますが、どういうわけかここに関与する分割があります。ここで不足している数学的知識について誰かが私に手掛かりを与えたり、それがどのように導出されたかを示すことによって式を「証明」したりできますか?

4
シェーダーでベクトルを別のベクトルで回転する
地形の各ポイントの法線を含む地形サーフェスがあります。 地形に適用する2番目の詳細法線マップがあります。 これらの法線は3スペースです。 両方の法線のY値は 常に正です。 両方の法線のX、Z値は、正/負/ゼロにすることができます。 2番目のベクトル(オレンジ)を回転させる1番目の法線ベクトル(青)は、ほぼ水平にすることができます。 計算が簡単/高速になれば、おおよそのソリューションで大丈夫です。 上の画像では、青い表面法線(1番目の法線マップから)、オレンジ色の法線マップ法線(2番目の法線マップから)、および目的の緑の法線が表示されています。 オレンジ色のベクトルの回転量は、青の法線ベクトルがXZ平面(DirectX座標系のようにYが上にある)と形成する角度とほぼ(または可能であれば正確に)等しくなければなりません。 次に、2番目のシナリオを示します。 上の画像では、青い表面法線がほぼ水平なので、2番目の法線マップがほぼ垂直な表面に適用されているため、オレンジ色の法線マップベクトルはさらに回転しています。 ローテーションはHLSLシェーダーで実装されています。 2番目の青い法線の方向に基づいて1番目のオレンジの法線を回転させる方法を教えてください。 編集:たぶん私は正接だけでなく正接と正接が必要ですか? これが私が正常になる方法です: float4 ComputeNormals(VS_OUTPUT input) : COLOR { float2 uv = input.TexCoord; // top left, left, bottom left, top, bottom, top right, right, bottom right float tl = abs(tex2D(HeightSampler, uv + TexelSize * float2(-1, -1)).x); float …

1
C ++で行列をどのように表す必要がありますか?
私は自分に3D数学を教えており、その過程で自分の基本的なエンジン(一種)を構築しています。私のC ++マトリックスクラスを構造化する最良の方法は何だろうと思っていました。いくつかのオプションがあります: 個別のメンバー変数: struct Mat4 { float m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34, m41, m42, m43, m44; // methods } 多次元配列: struct Mat4 { float[4][4] m; // methods } ベクトルの配列 struct Mat4 { Vec4[4] m; // methods } それぞれに良い面と悪い面があると思います。 以下からのグラフィックスとゲーム開発のための3D数学入門、第2版の P.155: 行列は1ベースのインデックスを使用するため、最初の行と列には1の番号が付けられます。たとえば、a12(a「a12」ではなく「1つ2つ」と読む)は、最初の行、2列目の要素です。これは、0ベースの配列インデックスを使用するC ++やJavaなどのプログラミング言語とは異なることに注意してください。行列には列0または行0がありません。実際の配列データ型を使用して行列が格納されている場合、このインデックスの違いにより混乱が生じる可能性があります。このため、幾何学的な目的で使用される型の固定サイズの小さな行列を格納するクラスでは、float a11floatなどの言語のネイティブ配列サポートを使用する代わりに、各要素にのような独自の名前付きメンバー変数を与えるのが一般的ですelem[3][3]。 …

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