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

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

3
Lerping関数でTime.deltaTimeを使用する理由
私の理解では、Lerp関数は、との間の3番目の値()を使用して、2つの値(aとb)の間を補間します。で、値aがで、返される値は、返されます。値0.5で、途中の間とが返されます。t01t = 0t = 1bab (次の図は、滑らかなステップで、通常は3次補間です) 私はフォーラムを閲覧していて、この回答で次のコード行を見つけました。transform.rotation = Quaternion.Slerp(transform.rotation, _lookRotation, Time.deltaTime); 「なんてばかだ、彼にはわからない」と私は思ったが、40以上の賛成票があったので、試してみて、十分に機能した。 float t = Time.deltaTime; transform.rotation = Quaternion.Slerp(transform.rotation, toRotation, t); Debug.Log(t); との間0.01でランダムな値を取得し0.02ましたt。関数はそれに応じて補間すべきではありませんか?これらの値が重なるのはなぜですか?Lerpについて私が理解していないのは何ですか?

3
攻撃対防御と勝者は誰ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 私はモバイルで新しいシンプルなゲームを作成している最中で、次の部分に数日間費やしました。 簡単にするために、私には2人の戦闘機がいるとしましょう。それらの唯一の属性は、攻撃と防御です。最初の攻撃で重要なのは、彼の攻撃と相手の防御です。およびその逆。 彼らは装備、アイテム、スタミナ、健康を持っていません。ただ攻撃対防御。 例: 戦闘機1: 攻撃:50、防御:35 戦闘機2: 攻撃20、防御:80 戦闘プロセスは勝者を決定する単一の攻撃になります。したがって、複数の攻撃やラウンドはありません。私はそれを確定的にしたくはありませんが、予想外のライトバージョンを追加します。攻撃力の低い戦闘機は、防御力の高い別の戦闘機に勝つことができます(もちろん、毎回ではありません) 私の最初のアイデアは、それを線形にし、均一な乱数ジェネレータを呼び出すことでした。 If Random() < att1 / (att1 + def2) { winner = fighter1 } else { winner = fighter2 } 攻撃50と防御80の例では、攻撃側の戦闘機は約38%の勝率になります。しかし、予想外のことは遠すぎて最悪の戦闘機がたくさん勝つように思えます。 似たような状況でどのように取り組んできたのかと思っていました。 PS私はこのQnAやその他の情報源で多くのことを検索しましたが、SEには広すぎるとして言及されている同様の質問を見つけました。しかし、それらには多くの属性、武器、アイテム、クラスなどがあり、複雑すぎる可能性があります。私のバージョンは、SEのQnAスタイルに合わせてはるかにシンプルだと思います。

2
変換行列からオイラー角を抽出する方法は?
エンティティ/コンポーネントゲームエンジンを簡単に実現できます。 Transformコンポーネントには、ローカル位置、ローカル回転、グローバル位置、グローバル回転を設定するメソッドがあります。 変換が新しいグローバル位置に設定されている場合、ローカル位置も変更され、ローカル位置が更新されます。このような場合は、現在の変換ローカル行列を親の変換ワールド行列に適用するだけです。 それまでは問題ありませんが、更新されたローカル変換行列を取得できます。 しかし、変換でローカル位置と回転値を更新する方法に苦労しています。私が考えている唯一の解決策は、変換のlocalMatrixから並進と回転の値を抽出することです。 翻訳の場合は非常に簡単です。4番目の列の値を取得するだけです。しかし、回転はどうですか? 変換行列からオイラー角を抽出する方法は? そのような解決策は正しいですか?: Z軸を中心とした回転を見つけるには、localTransformのX軸ベクトルとparent.localTransformのX軸ベクトルの差を見つけて、結果をDeltaに格納します。次に、localRotation.z = atan2(Delta.y、Delta 。バツ); XとYを中心とした回転についても同じですが、軸を交換する必要があります。

4
時差等角図:画面上の点の地図座標を計算します
これについてはすでに多くのリソースがあることはわかっていますが、自分の座標系に一致するリソースが見つからないため、これらのソリューションを自分のニーズに合わせるのに非常に苦労しています。私が学んだことは、これを行う最良の方法は変換行列を使用することです。それを実装することは問題ありませんが、座標空間をどのように変換する必要があるのか​​わかりません。 これが私の座標系を示す画像です: 画面上の点をこの座標系に変換するにはどうすればよいですか?

1
ワームゲームから2Dサイドオンウェーブエフェクトを再作成します
私はワームから波/水の効果を再現しようとしています(ここhttp://youtu.be/S6lrRqst9Z4?t=31sを参照してください)実際にはスプライトではなく、正弦波のようなものによって手続き的に生成されていることがわかります。 誰かがこのようなものを以前に作成したことがありますか?または私はそれについてどうやって行くのですか?

1
UnityのOnCollisionEnterで表面の法線が得られないのはなぜですか?それらを取得する最も信頼できる方法は何ですか?
Unityのonコリジョンイベントは、発生したコリジョンに関するいくつかの情報を提供するCollisionオブジェクトを提供します(ヒット法線を持つContactPointsのリストを含む)。 しかし、得られないのは、衝突したコライダーの表面法線です。これは説明するためのスクリーンショットです。赤い線はからContactPoint.normal、青い線はからRaycastHit.normalです。 これは、簡素化されたAPIを提供する情報を隠すUnityのインスタンスですか?または、標準の3Dリアルタイム衝突検出技術でこの情報が収集されないのですか? そして質問の2番目の部分について、衝突の表面法線を取得するための確実で比較的効率的な方法は何ですか? レイキャスティングによって表面の法線が得られることはわかっていますが、これをすべてのシナリオで実現するには、いくつかのレイキャストを行う必要があるようです(接触点と通常の組み合わせで最初のキャストのコライダーが欠落するか、すべての平均を行う必要があるかもしれません)最良の結果を得るための接触点の法線)。 私の現在の方法: Collision.contacts[0].point通常のヒットに沿ってバックアップします 否定ヒットダウンレイキャスト通常のためfloat.MaxValueに、Collision.collider それが失敗した場合、通常の否定されていない状態でステップ1と2を繰り返します。 それが失敗する場合は、ステップ1〜3を試してください。 Collision.contacts[1] 成功するまで、またはすべての接点がなくなるまで4を繰り返します。 あきらめて、戻りVector3.zeroます。 これはすべてをキャッチしているようですが、これらすべてのレイキャストは私をうるさくします、そしてこれが十分なケースで機能することをテストする方法がわかりません。もっと良い方法はありますか? 編集 これが本当に3Dコリジョンでの方法である場合、一般的な場合の理由の概要は、Unityに固有の何かと同様に歓迎されます。

2
3Dゲームでターゲットを撃つアルゴリズム
Descent Freespaceを覚えている人にとっては、非ホーミングミサイルやレーザーを撃つときに敵を狙うのに役立つ優れた機能がありました。追跡している船の前に十字線があり、動いているところを撃つためにどこを撃つべきかを教えてくれました。目標。 私は/programming/4107403/ai-algorithm-to-shoot-at-a-target-in-a-2d-game?lq=1からの回答を使用しようとしましたが、それは2D用なので試してみましたそれを適応させます。 最初に計算を分解してXoZ平面の交点を解決し、x座標とz座標を保存してから、XoY平面の交点を解決し、y座標を最終的なxyzに追加してから、クリップスペースに変換してテクスチャを配置しました座標。しかし、もちろん、期待どおりに機能しないか、質問を投稿しなかったでしょう。 XoZ平面でxを見つけた後とXoYでxが同じではないので、何かが間違っていることに気づきます。 float a = ENG_Math.sqr(targetVelocity.x) + ENG_Math.sqr(targetVelocity.y) - ENG_Math.sqr(projectileSpeed); float b = 2.0f * (targetVelocity.x * targetPos.x + targetVelocity.y * targetPos.y); float c = ENG_Math.sqr(targetPos.x) + ENG_Math.sqr(targetPos.y); ENG_Math.solveQuadraticEquation(a, b, c, collisionTime); 初回のtargetVelocity.yは実際にはtargetVelocity.z(targetPosの場合も同じ)で、2回目は実際にはtargetVelocity.yです。 XoZ後の最終的な位置は crossPosition.set(minTime * finalEntityVelocity.x + finalTargetPos4D.x, 0.0f, minTime * finalEntityVelocity.z + finalTargetPos4D.z); XoY以降 crossPosition.y …
11 mathematics  ai  aiming 

3
オブジェクトを別のオブジェクトの円周に沿って移動するにはどうすればよいですか?
私は数学が足りないので痛いですが、あなたにとってはこれは簡単なことでしょう。単純な円形のパス上で、オブジェクトを他のオブジェクトの年齢や周囲に沿って移動したい。現在のところ、私のゲームアルゴリズムは、スプライトを障害物の端に移動および配置する方法を知っており、さまざまな条件に応じて次のポイントが移動するのを待ちます。 したがって、ここでの数学的な問題は、中心(cX、cY)、オブジェクトの位置(oX、oY)、および移動に必要な距離(d)がわかっているときに、(aX、aY)および(bX、bY)の位置を取得する方法です。
11 java  mathematics 

5
誰かが、乗法/連結における列と行の主な関係(の理由)の意味を説明できますか?
私はビューマトリックスと投影マトリックスの作成方法を学び、マトリックスの2つの標準について混乱しているため、実装が困難になり続けています。 私は行列を乗算する方法を知っています。乗算の前に転置すると結果が完全に変わるため、異なる順序で乗算する必要があることがわかります。 私が理解していないのは「表記規則」だけの意味です - こことここの記事から、著者はマトリックスの保存方法やGPUへの転送方法に違いはないと主張しているようですが、2番目その行列は明らかに、行優先のメモリでのレイアウト方法と同等ではありません。また、プログラム内の入力されたマトリックスを見ると、4番目、8番目、12番目の要素を占める翻訳コンポーネントが表示されています。 とすれば: 「列優先の行列で後乗算すると、行優先の行列で前乗算と同じ結果が得られます。」 なぜ次のコードスニペットで: Matrix4 r = t3 * t2 * t1; Matrix4 r2 = t1.Transpose() * t2.Transpose() * t3.Transpose(); DOESのR = R2!と理由のためにPOS3 = POSを行います!: Vector4 pos = wvpM * new Vector4(0f, 15f, 15f, 1); Vector4 pos3 = wvpM.Transpose() * new Vector4(0f, 15f, 15f, 1); 乗算プロセスは、行列が行メジャーか列メジャーかによって異なりますか、それとも次数のみですか(同等の効果を得るためですか?) …


4
オブジェクトの速度が上がるにつれて速度が低下する方法
Flashでゲームを開発していますが、少し手助けが必要です。それは数学の問題と考えることができます。 オブジェクトが高速Xで飛んでいるため、オブジェクトが石と衝突する可能性があります。石にぶつかったときは、石を割って続行するための速度が遅いオブジェクトが必要です。ハードコードして次のように書くのは簡単ですmyVelocity -= 10;が、私の主な問題は、初期速度が高いほど速度を落とさないようにすることです。 たとえば、速度が300の場合は10を失い、200の場合は20を失います。 これはある種の式で行うことができますか?

2
遮断のベクトルを計算する方法は?
2次元空間と1つの友好的な宇宙船が静止していて、1人の敵が実際の位置、速度、方向がわかっている友好的な船に直接移動していません。 友好的な船は、敵と戦うために射程内にそれ自体を入れたいと思っています。 実際には、実際の位置を移動する船に直接ベクトルを設定し、フレームごとに再計算して、ある種の「丸い」飛行経路を作成しています。 私が欲しいのは、敵がそれまでのコースを変更しないと仮定して、射程距離に到達したときに敵が(おそらく)持つであろう位置に直接直線のパスを設定することです。 最初の「単純な」実装として、友人がすぐに0から最大にスピードアップできると想定すれば十分です。 優先される実装は、友人の加速機能を考慮したものであり、速度のためにインターセプトが不可能である場合を知っています。静止状態からだけでなく、あらゆる始動速度で機能するはずです。プラスは、それがブレーキングさえ考慮している場合です(光速での戦いは、与えられた宇宙では非常にエネルギー効率が悪いです)

1
反射角
私はこの「ブレイクアウトスタイル」のゲームを持っています。 中央に大砲、大砲の周りにブロック、ブロックの周りにパッドがあります。これはゲームがどのように見えるかです: ピクセルあたりの衝突を取得することができ、ボールはブロックとの接触時に次の計算で「反射」します。 Ball.Direction = 2 * (Block.Direction - Ball.Direction) + 180; 青い線はボールの方向、黒い線(ベースライン)はブロックの表面です。 方向はラジアンで表された角度です(もちろん度に変換できます)。 ボールは次のように動かされます: // Event.ENTER_FRAME x += Math.sin(Direction) * Velocity; y -= Math.cos(Direction) * Velocity; ここまでは順調ですね。 私の問題は、パッド(小さな色のブロックの周りにある3つの暗いブロックと大きなブロック)で発生します。 向きを変えると、表面の角度が変化します。 それ以上に、ボールも側面に当たるはずなので、打球の方向と新しいボールの移動方向をどのように測定できますか? ps:必要に応じて、コードと再生可能なswfを提供できます。 編集 OK、角度の問題はVectorsで解決されましたが、側面と後方衝突の問題はまだ残っています。 そのための別の質問を開き、ここにリンクします。

1
オブジェクトを回転させながらカーブに沿って移動する
オブジェクトを曲線に沿って移動したいのですが。カーブの特定のポイントで、オブジェクトの速度を変更して、オブジェクトをその軸に沿って回転させます。 飛行機が目的地に飛んでいるところを想像してみてください。それはそれが従わなければならないその道を持っている、それに加えて、それはその速度と向きをずっと調整します(ヘディング、髄、土手)。 私は親切に求めることができるスタートアップ情報、次の: どのような種類の曲線を滑らかにオブジェクトを補間するために使用します どのような式信頼性の高い、私はoject移動の速度を制御することができ、補間、およびシームレスになり、曲線の結び目の間の遷移のために使用します どのような情報をする必要があり、エクスポート 3Dオーサリングアプリケーションから これには四元数slerp()を使用する必要がありますか? このトピックを効率的にカバーしている本について知っているなら、それは最も効果的です。ありがとうございました。

3
ゲーム開発で見つける最も一般的なスプラインは何ですか?
ここでは、ゲーム開発で見られる最も一般的なスプライン、メソッドが曲線を補間するために必要なポイントの数、および曲線ポイントの補間を取得できるデータ型を作成する方法を挙げます。例:ベジェ曲線、Bスプライン、3次スプラインなど。 PS:あらゆる種類のスプライン補間をリストできるように、私はこれをコミュニティーwikiとして置いています。

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