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

形状、サイズ、図形の相対的な位置、および空間の特性の問題に関係する数学の分野。

4
特定のエリアの建物を手続き的に生成する
私とチームは、ゲームの開始時にプレイヤーにランダムなファクトリーを提供するファクトリービルダーゲームに取り組んでいます。「公平性」の感覚を確保するために、ランダムに生成されたファクトリーは、(プレースホルダー値)30の数単位以内の領域を持つことが理想です。 これらの仕様を満たすために基本的なランダム長方形ジェネレーターを書くのは比較的簡単ですが、私たちの目標は、おそらく2、3、または4つの交差する長方形で構成される工場をより複雑にし、より複雑な形状を生成することです(L U、およびO形の建物)。 ランダムな長方形を生成し、基本的な代数を使用して2番目の長方形を埋めようとしましたが、これまでのところ2つ以上の長方形を実装することはできませんでしたが、それでも2つの長方形のデザインの結果に満足できませんでした。 より関連性の高い情報:2Dトップダウンメカニックの一部はファクトリースタイルであるため、部屋には適切な長さと幅を持たせて、現在JavaとLuaで使用できるようにします(必要に応じて、いずれかの組み込みライブラリを使用できます) 前もって感謝します! 編集:「良い」または「悪い」出力を言うと、悪い出力は、プレーヤーが使用できないスペースがある出力になります。工場の形状は、プレーヤーがコンベアベルトなどの工場の機械を配置できる場所を制限します。理想的には、工場には幅が1〜2ブロックしかない領域はなく、形状は1〜2ブロックの線が1辺に「垂れ下がる」1つまたは2つの大きな長方形であってはなりません。適切な出力は、すべての床面積が「実行可能」であるため、すべての領域が少なくとも3〜4ブロック幅です。優れた出力は必ずしも複雑である必要はありません(1つまたは2つの長方形でも構いません)が、1-2を超える長方形で構成される場合は、かなりのチャンスがあるはずです。


4
隣接する三角形を作成するためのアルゴリズム
一度クリックしてシーンにノードを配置できるシステムがあります。3つのノードを配置すると、三角形が形成されます。将来のノードを配置すると、そのノードを2つの最も近い既存のノードに結合することにより、新しい三角形が作成されます。 これはほとんどの場合正常に機能しますが、2つの最も近いノードの1つは多くの場合使用すべきものではないため、非常に鋭角な三角形の近くで使用すると欠陥があります。 たとえば、次の画像を参照してください。マゼンタの三角形が最初に配置されます。次に、Xとマークされた位置をクリックすると、青いオーバーレイがある新しい三角形が表示されます。私が欲しいのは、緑のオーバーレイがある新しい三角形です。(つまり、この例では、マゼンタの三角形と対称です。明確化:緑とマゼンタの三角形は重なりません-緑の三角形は青の三角形の下で左端のノードまで延びています) 三角形がこのように重ならないように、新しい三角形を作成するときに使用する既存の2つの頂点を決定するにはどうすればよいですか? 編集:最も近いエッジを検索すると、より良い結果が得られますが、完璧な結果は得られません。この状況を考慮してください: 「最近傍」テストはあいまいで、ABまたはACを返すことができます(両方のXに最も近い点がAにあるため)。望ましい結果はACになり、エッジが重ならないACX三角形を形成します。この結果をどのように確認できますか?(可能な場合、浮動小数点の精度の問題を考えると、最も近いエッジテストでは必ずしも2つが正確に等距離にあるとは限らないので、タイブレーカーとして個々のエッジオーバーラップテストを実行する必要はありません。)


1
複数の長方形をより少ない数の長方形に「修復」するためのアルゴリズム?
さまざまな形と色の長方形のグリッドがあり、同じ色のレイアウトを表す長方形の数を減らしたい(最適に近いほど良い、最適である必要はない)とします。 上の画像は非常に単純化されたケースであり、長方形間の空白は視覚化のみを目的としています-実際には密に詰め込まれています。 これを行うのに役立つアプローチまたはアルゴリズム名(Googleに満足)とは何ですか?

6
2つの移動するAABBが交差するかどうかを確認する最も速い方法は何ですか?
移動している2つのAABBがありますが、フレームの下で交差するかどうかを確認する最も速い方法は何ですか? 移動するということは、通常の矩形交差法で確認するだけではなく、ブール値のみを返し、ヒット時間などを返さない、単純で簡単なスイープテストを意味します。 私が思うのは、単純に次のようにすることです。 しかし、その六角形は非常に複雑であり、AABB-ポリゴンの交差を計算する方法がわかりませんが、もっと簡単な方法はありますか? あなたが最も気に入っているプログラミング言語であれば、簡単に移植できます。 ありがとう。

1
長方形のブロックから曲面を作成するにはどうすればよいですか?
以下のためにダイナマイトゲーム様、私はこのように、曲線をたどるブロックを作りたいです。 ブロックがボールに当たると消えます。 なんとか水平に描くことができましたが、パスをたどることができません。 どうすればいいですか?カスタム頂点を持つBox2Dオブジェクトを作成する必要がありますか?

4
錐台内に収まる最大の球を見つけるにはどうすればよいですか?
遠近法で描くことができる最大の球をどのように見つけますか? 上から見ると、次のようになります。 追加:右側の錐台に、私たちが何か知っていると思う4つのポイントをマークしました。錐台の8つの角すべて、および近端と遠端の中心の投影を解除できます。したがって、ポイント1、3、および4がわかります。また、ポイント2は3から4までの距離と同じ距離であることがわかります。センター?しかし、実際の数学とコードは私を免れます。 モデル(ほぼ球形で、ミニボールの境界球を持っている)をできるだけ大きく描きたい。 更新: boboboboとNathan Reedが示唆するように、 2平面上の円内アプローチを実装しようとしました。 function getFrustumsInsphere(viewport,invMvpMatrix) { var midX = viewport[0]+viewport[2]/2, midY = viewport[1]+viewport[3]/2, centre = unproject(midX,midY,null,null,viewport,invMvpMatrix), incircle = function(a,b) { var c = ray_ray_closest_point_3(a,b); a = a[1]; // far clip plane b = b[1]; // far clip plane c = c[1]; // camera var A …
12 geometry 

2
球の周りの任意の回転
ユーザーが球の表面を動き回れるようにするメカニズムをコーディングしています。球上の位置は現在、thetaおよびとして保存されますphi。ここでthetaは、現在の位置のz軸とxz投影の間の角度(つまりy軸を中心とした回転)でphi、y軸から位置までの角度です。私はそれを不十分に説明しましたが、本質的にはtheta = yaw、phi = pitch Vector3 position = new Vector3(0,0,1); position.X = (float)Math.Sin(phi) * (float)Math.Sin(theta); position.Y = (float)Math.Sin(phi) * (float)Math.Cos(theta); position.Z = (float)Math.Cos(phi); position *= r; これは正確だと思いますが、間違っているかもしれません。半径のあるワールド空間の原点で、球の表面の周りを任意の疑似2次元方向に移動できる必要がありますr。たとえば、ホールディングWは球体の周りをプレーヤーの向きに対して上方向に移動する必要があります。 球体上の位置/方向を表すためにクォータニオンを使用する必要があると思いますが、正しい方法を考えることはできません。球面形状は、私の強力なスーツではありません。 基本的に、次のブロックを埋める必要があります。 public void Move(Direction dir) { switch (dir) { case Direction.Left: // update quaternion to rotate left break; case Direction.Right: // update …

3
Minecraftのアニメーションはゲームにハードコーディングされていますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Game Development Stack Exchangeで話題になるようにします。 5年前に閉鎖されました。 Minecraftでアニメーションシステムがどのように機能するかを知りたいです。すべてのMobがゲームにハードコーディングされているように感じます。ノッチは本当にそこに座って、すべてのアニメーションボーンのマトリックスを手で作成しましたか? 私は楽しみのためにゲームを作り直すのが好きなので、彼がこれをどのようにしたか知りたいです。また、彼が本当にそれらをハードコーディングした場合...より良い方法はありますか?

4
長方形の周りをどのように補間しますか?
点が長方形の周りを移動するような豪華なアニメーションを作りたいのですが。一度にポイントの位置を見つけたいt。 長方形は次式で与えられX、Y、WidthおよびHeight。 これのアルゴリズムはありますか? sin/ cosをサークルに使用しました。長方形の同等のアプローチは何ですか?

1
テッセレーションとジオメトリシェーダー
私が間違っている場合は修正してください。ただし、ジオメトリシェーダージョブとテッセレーションシェーダージョブはどちらも、グラフィックパイプラインで頂点を生成するためのものです。私が知りたいのは、それらがどのように違うのか、そしてどちらをいつ使うべきかということです。

2
クリックアンドドラッグの動きを特定の領域に制限する方法
やや一般的なタイトルをお詫び申し上げます。私がやろうとしていることを成し遂げる方法については、あまり手がかりがありません。そのため、可能な解決策を研究することさえ難しくなっています。 私はある種のパスマーカーを実装しようとしています(たぶんそれに最適な名前があるかもしれませんが、これは私が思いつくことができる最高のものです)。 プレーヤーの前にはパスマーカーがあり、ターンの計画が完了したらプレーヤーがどのように移動するかを決定します。プレーヤーはマーカーをクリックして選択した位置にドラッグできますが、マーカーは定義された作業領域(灰色のビット)内でのみ移動できます。 そのため、次の2つの問題に悩まされています。 まず、その実行可能な領域をどのように正確に定義する必要がありますか?プレーヤーが実行可能な角度を形成するための開始点となる2つのベクトルを想像できます。これらの2つの弧は、プレーヤーの位置に中心がある円から発生する可能性がありますが、すべてをどのように配置するかは明確にわかりません一緒。 次に、マーカーを配置できる領域を定義した後、その領域内にのみマーカーを配置するように強制するにはどうすればよいですか?たとえば、プレーヤーがマーカーをクリックしてドラッグすると、マーカーは作業領域内を自由に移動できますが、領域の境界を離れてはなりません。たとえば、プレーヤーがマーカーを上向きにドラッグし始めると、マーカーが作業領域の端(下の最初の図)に到達するまで上向きに移動しますが、その後、プレーヤーが横向きにドラッグを開始する場合、マーカーはドラッグ中にドラッグに追従する必要がありますエリア内(下の2番目の図)。 これがあまり混乱しないことを願っています。みんなありがとう。 編集:これが違いを生む場合、私はマーマレードSDKでC ++を使用しています。

5
パスの長さをどのように決定しますか?
各プレイヤーに1つの指定されたパスに沿って移動する必要があるゲームがあります。ベジエ曲線を使用してパスを描画します。パスの実際の(直線的ではない)全長と、各プレイヤーが行った距離をどのように決定できますか?(始点とパス上の指定した点の間の距離。) 更新: パスはデカルト平面(2D)で表されます。

1
サークルライン衝突検出問題
私は現在ブレイクアウトクローンを開発しており、ボール(円)とレンガ(凸多角形)の間の衝突検出が正しく機能するようにするための障害にぶつかっています。私は、各線が凸多角形ブリックのエッジとエッジを表すサークルライン衝突検出テストを使用しています。 ほとんどの場合、Circle-Lineテストは適切に機能し、衝突点は正しく解決されます。 衝突検出は正しく機能しています。 ただし、ボールが実際にレンガと交差しているときに、負の判別式が原因で衝突検出コードがfalseを返す場合があります。 衝突検出に失敗しました。 私はこの方法の非効率性を認識しており、軸合わせの境界ボックスを使用して、テストされたレンガの数を削減しています。私の主な懸念は、以下のコードに数学的なバグがあるかどうかです。 /* * from and to are points at the start and end of the convex polygons edge. * This function is called for every edge in the convex polygon until a * collision is detected. */ bool circleLineCollision(Vec2f from, Vec2f to) { Vec2f lFrom, …

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