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

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

1
ゴルフボールの軌道方程式に空気抵抗を追加する
VB.NET 2005で2Dゴルフゲームを開発していますが、ボールに影響を与えるはずの空気または風の抗力を実装する方法に行き詰まっています。 すでに私は発射物のためのこれらの方程式を持っています: v0v0v_0は、ヒットまたは発射されたときのゴルフボールの初速度 垂直成分と水平成分、ゴルフボールの速度: vバツvy= v0c o s (θ )= v0s i n (θ )− gt ∗vx=v0cos(θ)vy=v0sin(θ)−gt∗ \begin{align} v_x &= v_0 cos(\theta) \\ v_y &= v_0 sin(\theta) - gt* \end{align} ゴルフボールの垂直および水平距離: バツy= v0c o s (θ )t= v0s i n (θ )t − (0.5 )gt2x=v0cos(θ)ty=v0sin(θ)t−(0.5)gt2 \begin{align} x &= v_0cos(\theta)t …

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, …

3
慣性テンソルの計算
少し複雑で長い質問ですが、認めますが、まだよく理解できていないので、できる限り説明していきます。 ショートバージョン:オブジェクトの形状に基づいて慣性テンソルを計算するための一般的なc ++ / physx式はありますか? ロングバージョン: 物理学では、x、y、zの慣性テンソルを指定する必要があります。現在、それを行う方法は、質量に基づいた比率にすぎません。したがって、オブジェクトがX軸で長く、YとZで細く、質量が10000の場合、ZとYを7000に、Xを3000に設定します(これは正確ではありませんが、あくまでも参考です)。 これは比較的うまく機能しますが、最大の問題は、どこかに関節の不安定性がある場合、何が最もうまく機能するかを理解するまでテンソルで推測し続けなければならないことです。非常に大きな物理シミュレーションがあり、20以上のジョイントのうち1つが他のすべてのジョイントの安定性を失わせている場合、これは非常に時間がかかる可能性があります。 私が取り組んでいるのは、オブジェクトの境界ボックスを取り、うまくいけば比較的正確なテンソルを計算する関数です。私はhttp://en.wikipedia.org/wiki/List_of_moment_of_inertia_tensorsから数学の一部を取り、基本的に以下のようなローテーションで以下のように機能する関数を作成しました。 または、次のように回転が端にある場合: したがって、これは私たちが行ってきた方法と同様の結果を私に与えるようですが、それが一般的な使用で機能することを確認せずにこの方法に切り替えたくありません。以下は、立方体と中央のピボットを含む最初の画像に基づく関数のコードです。 NxVec3 CalculateInertiaTensor( VisBoundingBox_cl boundingBox, float m ) { float width = boundingBox.GetSizeX(); float height = boundingBox.GetSizeZ(); float depth = boundingBox.GetSizeY(); float xTensor = 0.083f * m*(height*height + depth*depth); float yTensor = 0.083f * m*(width*width + depth*depth); float zTensor = …


6
単調に減少しないノイズ関数(のファミリ)はありますか?
一定の時間にBに到達するように、ポイントAからポイントBに移動するオブジェクトをアニメーション化する関数が欲しいです。オブジェクトは直線に沿って移動するため、必要なのは1次元のみです。 数学的には、次のような連続的なf(x)、x∈[0,1]を探していることを意味します。 f(0)= 0 f(1)= 1 x <y→f(x)≤f(y) 「ほとんど」の点では、f(x + d)-f(x)はdと明確な関係を持ちません。(この関数は一様に増加するわけではなく、そうでなければ予測可能でもありません。これは、微分の度合いが定数ではないと言うことにも相当すると思います。) 理想的には、実際にこれらの機能のファミリーを持ち、いくつかのシード状態を提供する方法が欲しいです。私の現在の使用には、少なくとも4ビットのシード(16の可能な関数)が必要ですが、それ以上のものを提供することはあまり自由ではありません。 累積エラーに関するさまざまな問題を回避するために、この関数はいかなる種類の内部状態も必要としない方がいいと思います。つまり、プログラミングの「関数」ではなく、実際の関数にしたいのです。

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

1
頂点のセットから平面の法線ベクトルを取得するにはどうすればよいですか?
私はHLSL / C ++の小さなプロジェクトでグラフィック作業をやりくりしており、頂点ポリゴンから対面ベクトルを取得する方法がわかりません。数式が見つからないようです。 位置はP1、P2、P3です。 たとえば、P1.x、P1.y、P1.zのVertexPointクラスと呼びましょう。

5
Vector3で演算子 '> ='を使用できないのはなぜですか?
私は私がように参照する2つの位置の間を移動するための四角形を取得しようとしている_positionAとします_positionB。どちらもタイプVector3です。長方形はうまく動きます。ただし、到達_positionBしても、本来のように反対方向に移動することはありません。 コードをもう一度見てみました。オブジェクトが移動ifすると、コード内のステートメントは、rectsの位置がに等しいフレームを逃したという結論に達しました_positionB。rectsの位置がより大きいか等しい 場合は、コードを変更して方向を逆にすることにしました_positionB。私のコードは長すぎないので、以下に表示します。 using UnityEngine; using System.Collections; public class Rectangle : MonoBehaviour { private Vector3 _positionA = new Vector3(-0.97f, -4.28f); //Start position private Vector3 _positionB = new Vector3(11.87f, -4.28f); //End position private Transform _rect_tfm; private bool _atPosA = false, _atPosB = false; public Vector2 speed = new Vector2(1f, 0f); private …
9 unity  c#  vector  mathematics  vector  matrix  unity  c#  transformation  java  3d  terrain-rendering  shading  ios  opengl-es  opengl  rendering  optimization  python  scripting  minecraft-modding  modding  pc  3d-meshes  mesh  culling  point-cloud  networking  interpolation  mathematics  game-design  ai  game-mechanics  animation  unreal-4  skeletal-animation  3dsmax  unity  c#  3d  opengl  c++  textures  unity  ide  cocos2d  cocos2d-x-js  unity  c#  mono  il2cpp  c++  game-loop  timer  linux  flash  actionscript-3  java  glsl  c++  vector  entity-component  c++  directx11  windows  visual-studio  libgdx  mouse  unity  c#  architecture  storage  unity  c#  rotation  coordinates  quaternion  vrpn  movement  vector  unreal-4  unity  shaders  unity  gui  text  bug  shooter  3d  animation  rendering  voxels  c++  mmo  multithreading  linux  textures  procedural-generation  terrain-rendering  multiplayer  mmo  game-state  java  android  libgdx  opengl  procedural-generation  unity  gui  3d  animation  tools  geometry-shader  mobile  advertisements  unity  c#  animation  scripting  unity  animation  unityscript  coroutines  unity  shaders  lighting  camera 

2
一定時間の誘導ミサイル
プレイヤーとミサイルでゲームを構築しています。 P1からP2までミサイルを発射したい。ミサイルがP2に到達するには、常に正確に5秒かかる必要があります。ミサイルもP2を追跡する必要があります。P2がさらに離れると、ミサイルはタイミング制約を満たすために速度を上げる必要があります。P2が左に移動する場合、ミサイルは左に移動する必要があります(速度も変更します)。P2がP1に近づくと、ミサイルは減速する必要があります。 これは可能ですか?これを達成するための最良の方法は何ですか? 私は現在Vector2Dクラスを持っていません(これは実際にはゲームではありませんが、類推はうまくいきます)。したがって、可能であれば、それを必要としないソリューションが欲しいです。 編集:これは実際にはミサイルでもありません。:) ありがとう!

2
誰かが二重輪郭を説明できますか?
私はボクセルレンダリングを理解しようとし、デュアルコンターリング(DC)を検討してきました。 これまでのところ私はこれを理解しています: グリッドポイントのセットに対して密度関数を実行します(つまり、ノイズ関数) グリッドのどのエッジにエンドポイント間の変更が含まれているかを見つける これらのエッジから交差点(つまり、ベクトル)を作成します これが私が行き詰まっているところで、次は法線を生成することですが、どうやって?このトピックを見ると、この画像は通常トリミングされます。 研究を行うと、法線は等値面から生成されることが示されます。ノイズから等値面、法線に行くと思うのは正しいですか?もしそうなら、各ステップをどのように達成しますか? 私の理解では、次のステップはDCペーパーの次のとおりです。 符号の変化を示す各エッジについて、エッジを含む4つの立方体の最小化する頂点を接続する四角形を生成します。 この見積もりは上の画像で表されていますか? 最後に、次のステップは、交点と法線を使用してQEFを実行することです。これにより、頂点データが生成されます。これは正しいです?

1
3Dカメラの回転
許してください、しかし私は助けを必要としています、そして私は今数週間これに行き詰まっています、私は進歩を遂げておらず、どこへ行っても私は別の答えを見ます、私が試みるすべてがうまくいきません。私は十分なヒントとアドバイスを持っています。今、私はこれを理解することができないので、誰かが私に後戻りするための答えをくれる人を本当に必要としています。 この主題を最も混乱させたのは、誰もが異なる規則または規則のセットを使用する方法であり、それらの答えは、何であるかを定義せずに独自の規則に基づいています。 だからここに私が最も一般的で論理的であると思われるものに基づいて形成した一連の規則があります: 軸の右手の法則。 正のYは上向き、正のZは視聴者向き、正のXは右向きです。 シェーダーに送信されるときに転置される行メジャー行列。 ピッチ:X軸を中心とした回転 ヨー:Y軸を中心とした回転 ロール:z軸を中心とした回転 ローテーション順:ロール、ピッチ、ヨー(これは正しいですか?誰かがこれを確認できますか?) 正の回転値は、軸の正の端から見下ろすと、時計回りに回転します。 すべての軸にわたる0回転のデフォルトの方向は、負のYを指すベクトルです。 ..それらの慣例を考えると(間違っている場合は必ず私を訂正してください!) LookAt関数を記述しますか?(lookAt(ベクター位置、ベクターアイフォーカス、ベクターアップ)) 回転行列を計算します。(回転(x、y、z)) 私はこれらの2つの質問に少なくとも過去3週間以上答えてみました。LookAt&Rotation Matrix関数を少なくとも30回書き直しました。何百ものウェブサイトと多くの解答された質問を読み、他の人々のコードをコピーしました、そして私がこれまでに作った何もうまくいきませんでした、すべてが間違った結果を生み出しました。それらのいくつかは、正しい回転にさえ近くないいくつかの陽気に奇妙な出力を生成しました。 私は昨夜を除いて毎晩これに取り組んできました。繰り返し失敗することにとてもイライラしていて、私は立ち止まって休憩しなければならなかったからです。 正しい方法を教えてください。それから逆に作業して、それがどのように機能するかを理解できます。正しい答えが得られず、これが私を少し狂わせています! 私はJavaで書いていますが、任意の言語で書かれたコードを使用します。私の3Dレンダリングコードのほとんどは実際には非常に見事に機能しています。それは理解できない数学にすぎません。 更新:解決済み ご協力ありがとうございました!私は実際に私が実際に理解しているルックアット関数を手に入れました、そして私は幸せにすることができませんでした(誰かがぜひともそれを見たいと思っているなら)。 ピッチ/ヨー/ロール変数に基づいて回転行列を作成することを再試行しましたが、再び失敗したようですが、フリールックカメラのオイラー角を使用しようとしてダンプすることにしました。代わりに、クォータニオンクラスを作成し、そのパスを下る方が幸運かもしれません。それ以外の場合は、球座標としてピッチ/ヨーを使用し、回転には新しい機能のLookAt関数を使用します。 他の誰かが同様の問題に直面していて質問をしたい場合は、遠慮なくお問い合わせください。 助けてくれてありがとう!

3
Slerping回転ミラー
次のコードを使用して、ターゲットを監視するためにゲームキャラクターを回転させます。 transform.rotation = Quaternion.Slerp(startQuaternion, lookQuaternion, turningNormalizer*turningSpeed/10f) startQuaternionは、新しいターゲットが指定されたときのキャラクターの現在の回転です。 lookQuaternionは、キャラクターが見るべき方向であり、次のように設定されています。 destinationVector = currentWaypoint.transform.position - transform.position; lookQuaternion = Quaternion.LookRotation(destinationVector, Vector3.up); turnNormalizerはTime.deltaTimeインクリメントされるだけturningSpeedで、エディターで指定される静的な値です。 問題は、ほとんどの場合、キャラクターが正常に回転する一方で、180度に近づかなければならないときに問題が発生することです。次に、時々それがジッターして回転をミラーリングします: この不十分に描かれた画像では、キャラクター(右側)が左側の円に向かって回転し始めます。左または右に回転するだけでなく、この「ミラーダンス」が開始されます。 新しいフェーシングに向かって回転し始めます その後、突然同じ角度にスナップしますが、反対側で回転し続けます ターゲットを見るまで、この「ミラーリング」を長時間実行します。これは、四元数、slerping / lerpingなどの問題ですか? EDIT1: どうやら、問題は回転自体から発生するのではありません。より可能性の高い問題は、キャラクターが回転しているときに面に向かって移動することです。キャラクターが動くことを許可されているとき、向きとターゲットの間の角度を制限することで、ジッター/ミラーリング回転が減少し、時には解消されます。 もちろん、これはさらに多くの疑問を投げかけますが、なぜ問題なくキャラクターが同時に移動および回転できないのですか?運動に使用されるコード: transform.Translate(Vector3.forward * runningSpeed/10f * Time.deltaTime);

2
ドローンターゲティング
「ドローン」と2D平面上のターゲットポイントを想像してください。8つのパラメーターがあります。 P = my position Q = target position V = my velocity I = my moment of inertia w = my angular velocity s = my angular position T = max thrust U = max torque (ターゲットは静止しているとだけ言います) ドローンの仕事は、最大トルクと最大推力に従って、できるだけ早く目標に到達することです。これは2D平面のみであるため、トルクを適用する方法は2つしかありません。推力は、機体の向きに対して一方向にのみ進むように制限されており、ドローンを回転させずに狙うことはできません。抵抗を無視して、2Dの宇宙空間に漂っているように見せかけることができます。ドローンが時間間隔t(おそらく0.01秒ごとなど)で方程式をチェックし、パラメータを接続して、それに応じてトルクと推力を調整するとします。推力とトルクの方程式はどうあるべきですか?

5
直線はポリゴンと呼ばれますか?
ポリゴンの定義によれば、ポリラインの最初と最後のポイントが接続されている場合、それはポリゴンと呼ばれます。下の画像を参照してください。P1、...、P5ポリラインがあります。P5からP1に線を引くと、ポリゴンと呼ばれますか?私はここで混乱しています。

2
太陽の動きのための機能?
したがって、地平線に設定された太陽スプライト(x = 0、y = worldheight / 2)が与えられた場合、太陽を昇らせてから降らせる関数を考案しようとしています。 これを行う最良の方法はsin関数ですが、それを使用する方法はわかりません。 y = sin(x)を使用する場合、完全な曲線の場合、xの速度は一定であるのに対し、xは0からpiの範囲でなければなりません。 考えや提案はありますか? 編集:みんなありがとう!

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