タグ付けされた質問 「mathematics」

数学の問題は、ゲームの開発で使用される算術、幾何学、微積分、公式およびその他の計算を扱います。

2
モジュラー宇宙船制御
私は宇宙船を使った物理ベースのゲームを開発しています。 宇宙船は、関節で接続された円から構成されます。一部のサークルにはエンジンが取り付けられています。 エンジンは円の中心を中心に回転し、推力を生み出すことができます。船のエンジンごとに回転と推力を設定することで、船を一方向に動かしたり、ある点を中心に回転したりしたい。 これを達成するために各エンジンに必要な回転と推力を見つけるにはどうすればよいですか?

2
楕円軌道モデリング
私は単純な2Dゲームで軌道で遊んでいます。このゲームでは、船が宇宙空間を飛び回り、巨大なものに引き付けられます。船の速度はベクトルに保存され、ニュートンの万有引力の法則を考慮して、必要に応じてフレームごとに加速度が適用されます。点の質量は移動しないので(現在は1つしかありません)、楕円軌道を期待します。 代わりに、私はこれを見ます: 私はほぼ円形の軌道で試してみましたが、質量を大幅に(100万倍)異ならせようとしましたが、常にこの回転軌道を取得しています。 コンテキスト用の(D)コードを次に示します。 void accelerate(Vector delta) { velocity = velocity + delta; // Velocity is a member of the ship class. } // This function is called every frame with the fixed mass. It's a // method of the ship's. void fall(Well well) { // f=(m1 * m2)/(r**2) // …

2
インバースキネマティクスに関する文献:関節の限界とその先
最近、私はインバースキネマティクスで遊んでいて、その結果にかなり感銘を受けました。当然、さらに詳しく説明したいと思いますが、どこから始めればよいかわかりません。特に、関節制限を導入したいと思います(つまり、プリズムジョイントの場合は、どれだけ移動できるか、ヒンジジョイントはどの角度にする必要があるかなど)。 現在、さまざまな関節タイプのヤコビ行列を作成する方法を理解しています。共同制限を実装するためのさまざまな方法について、特に(できれば無料で、できれば理解しやすい)文献を探しています。また、インバースキネマティクスの使用方法に関するさまざまなアイデアを見つけたいと思います。


1
車両の予測軌道?
私が開発しているゲームでは、この例では速度Vで北上している車両(1)が目標(2)に到達できるかどうかを計算する必要があります。例は上から問題を描写しています: 実際には2つのシナリオが考えられます。Vが一定である(結果として軌道4、円弧)、または車両に加速/減速する能力がある(軌道3、らせん弧)。 車両が(行き過ぎるのではなく)目標に到達できるかどうかを簡単に確認できる方法があるかどうか知りたい。私が考えることができる唯一のことは、時間の経過に伴う車両の位置を統合することなので、私は特に軌道#3に興味があります。 編集:もちろん、車両には常に操縦する能力がありますが、操縦半径はその速度に応じて変化します(最大横g力と考えてください)。 EDIT2:(実生活のほとんどの車両と同様に)ゲーム内のものにも最小ステアリング半径があることにも注意してください)。


4
アルキメデスのらせんの周りを一定の速度で粒子を移動する
粒子をらせん状に一定速度で動かしたい。これは一定の角速度ではないことに注意してください。これはかなり困難であることがわかっているので、ここでは自分の方法について説明します。 問題のスパイラルは、極方程式r = ϑとパラメトリック方程式を使用した古典的なアルキメデスのスパイラルx = t*cos(t), y = t*sin(t)です。これは次のようになります。 粒子をらせんの周りに移動したいので、単純に、粒子の位置をtの値として、速度をtの増加として与えることができます。このようにして、粒子は一定の角速度でらせんの周りを動きます。ただし、これは、中心から離れるほど、その(非角)速度が速くなることを意味します。 したがって、tの増加に速度を持たせる代わりに、弧の長さの増加として速度を求めます。スパイラルの弧の長さを取得する最初の課題ですが、原因私は使用していアルキメデスの螺旋があまりにも非常識ではないという事実に、弧の長さの関数である。ここでa = 1。これにより、シータ値を円弧長に変換できますが、これは私が必要としているものとは正反対です。したがって、弧長関数の逆を見つける必要があります。そのハードルで、Wolfram-Alphaは失敗しました。 それで、弧長関数の逆を見つけることは可能ですか?シータの負の値を除外する場合、関数は1対1のマッピングです。 おかげで、 ローリー

3
2つの接続されたラインセグメントのちょうど中間にある単位ベクトルを見つける
素早く簡単な質問のようですが、私が探しているものを正確に見つけることができませんでした: 2つの接続されたラインセグメントの角度のちょうど50%であるラインに沿って指している単位長ベクトルを計算する方法は? 画像は何千もの言葉を話します(これは私の説明よりも優れています!) 基本的に、2つの赤い線分(実際には3つの点であり、したがって接続が保証されている)を前提として、青い単位ベクトルを計算します。 赤いセグメントは任意の長さであり、結果は単位である必要はありません。 結果のベクトルを特定の方向(入力セグメントに対して)にポイントさせる方法があると便利です。これは、これを解決できると思うので、必須ではありません-入力ラインセグメントが最終的に形成されるためです。 nゴン。 どんな例でもC ++では理想的ですが、他の言語も歓迎します。 ポインタに感謝します。
8 c++  2d  mathematics 

1
オブジェクトを回転させてプレイヤーに向けます
これはおそらく単純なベクトルの質問ですが、どうすればよいかわかりません。 ベクターの位置にオブジェクトがあります(ox,oy)。可能性のあるすべての更新で、ユーザーは画面上を歩き回り(px,py)、いつでもその位置にいます。オブジェクトが常にプレーヤーに面するようにするにはどうすればよいですか?角度を度単位で取得する必要があります。 これは私がいじくり回してきたものですが、方向はすぐにユーザーがいる場所を指していません。代わりに、ユーザーが歩いている方向に徐々に増加します。 objVec.Normalize(); playerVec.Normalize(); obj.Rotation = MathHelper.ToDegrees((float)Math.Acos(Vector2.Dot(objVec, playerVec))); 私はそれが完全に間違っているかもしれないので、どんな助けでもありがたいです!

3
ケプラー軌道:時間の経過とともに軌道上の位置を取得
スペースシミュレーション関連のゲームを開発しています。次のように、バイナリスターの動きを実装するのに問題があります。 2つの星は重心を周回し、軌道は楕円形です。 基本的に、任意の位置での角速度を決定する方法は知っていますが、経時的な角速度は知りません。したがって、与えられた角度で、星の位置を非常に簡単に計算できます(http://en.wikipedia.org/wiki/Orbit_equationを参照)。 時間をかけて星の位置を取得したいと思います。楕円のパラメトリック方程式は機能しますが、正しい速度が得られません { X(t) = a×cos(t) ; Y(t) = b×sin(t) }。 それは可能ですか、どのように行うことができますか?

5
(シンプルな)恒星系の構築[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 2年前休業。 私は現在、宇宙ベースの戦略ゲーム(したがって宇宙船が動き回る)を可能にするために、いくつかの恒星系(いくつかの中心の星、次に衛星のある惑星を意味する)を簡単にシミュレートする方法を検討しています。これはすべて時間ベースである必要があります(したがって、各システムの状態は時間とともに異なります) たとえば、次のように、このトピックの背後にある数学にかなり苦労しています。- 楕円関連の数学 -時間を考慮して惑星AからBへのパスを作成する(それぞれの位置は時間とともに変化します)... そのためのリソースを知っていますか?それについての本を買ってもかまわない... 補足:現時点では、これらすべてを表示する方法は問題ではありません。そのための簡単な計画を立てます(基本的には2Dに固執し、宇宙船/惑星の詳細はなく、マーカーのみの「高レベルビュー」)。

5
座標系をZアップからYアップに変更する
Blenderの座標系は、ZがYではなく上向きであるという点で、私が慣れ親しんでいるものとは異なります。上向き? 明確化: オブジェクトの位置は行列として定義されるため、行列内の平行移動/回転/スケール情報を切り替えるだけでは簡単な作業ではありません。(少なくともそれは私にとって簡単な仕事のようには見えません)

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]。 …

1
AABB-AABB衝突、どちらの顔に当たる?
オブジェクトが衝突したときにスライドできるようにするには、次のことを行う必要があります。 彼らが衝突するAABBのどの面を知っています。 その面の法線を計算します。 法線を返し、プレイヤーの速度に適用するインパルスを計算します。 質問 2つのAABBが衝突していることを知りながら、衝突したAABBの面を計算するにはどうすればよいですか?1つはプレーヤーで、もう1つはワールドオブジェクトです。 これは次のようになります(白で囲まれた問題の衝突)。 ご協力ありがとうございました。

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