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

アルゴリズムは、計算、データ処理、および自動推論に使用されます。より正確には、アルゴリズムは、関数を計算するための明確に定義された命令の有限リストとして表現される効果的な方法です。

6
帰路能力のない迷路を解く
迷路を解決するプログラムを書く必要があります。Mazeにはグラフ構造があり、各ノード-一部の部屋とエッジ-が他の部屋に出ます。 仕様: ランダムな部屋から始めます。 迷路には行き止まりがあり、出口が0個か数個あります。 私たちはすべての迷路について何も知りません。現在の部屋の数とそこからのドアのリストだけです。 新しい部屋に入るとき、どこから来たのかわかりません(現在の部屋のどのドアから前の部屋に戻るか)。 出口に着いたときに認識できます。 現在の部屋からそこから利用可能なドアに移動する各ステップ。 たとえば部屋6にいる場合、ジャンプして開始することはできません。ロボットの動きのようなものです。 現在の部屋のIDを正確に知っています。現在の部屋の各ドアのIDを知っています(すべての迷路ではありません)。 ロボットを制御します。 私はすべての既知のアルゴリズムを調べましたが、すべて前の部屋に戻るには、少なくとも追加の機能が必要です。仕様によると、現在の部屋しか把握していないため、最短経路を検索するアルゴリズムを使用することはできません(実際には最短経路は必要ありません)。出口の方向がわからないため、左手(右手)のアルゴリズムは使用できません。おそらく、仕様を満たす唯一の解決策は、いくつかの時間の出口が見つかることを期待して、すべての部屋でランダムな出口を選択することです... このような迷路をよりスマートな方法で解決する方法はありますか?
11 algorithm  maze 

1
三角測量A *(TA *)パスファインディングアルゴリズム
Demyenが彼の論文Efficient Triangulation-Based Pathfinding(p 。 彼は、通常のA *アルゴリズムを三角測量に適応させ、最終ノードに到達/拡張した後でも、他のより最適なパスを検索する方法を説明しています。通常のA *は、最後のノードが展開されると停止しますが、三角グラフで使用される場合、これが常に最適なパスであるとは限りません。これはまさに私が抱えている問題です。 この問題は、78ページの図5.4に示されています。 論文(80ページ)に記載されているgおよびh値の計算方法を理解しています。 そして、検索停止条件は次のとおりです。 if (currentNode.fCost > shortestDistanceFound) { // stop break; } ここで、currentNodeは、開いているリスト(優先度キュー)からポップされた検索ノードであり、fスコアが最も低くなります。shortestDistanceFoundは、これまでに見つかった最短経路の実際の距離です。 しかし、以前に見つかったパスを今後の検索から除外するにはどうすればよいですか?もう一度検索すると、明らかに同じパスが見つかるからです。クローズリストをリセットしますか?何かを変更する必要がありますが、何を変更する必要があるのか​​わかりません。この論文には疑似コードが欠けているため、参考になります。

2
曲線にストロークを適用するときに自己交差を回避するにはどうすればよいですか?
私のコードにはいくつかのSpline2Dオブジェクトがあり、それぞれに特定の時間に指定された数量のベクトルを返すPosition、Velocity、およびAccelerationメソッドがあります。これらのベクトルを使用してジオメトリを作成し、曲線のグラデーションストロークを作成しましたが、急な曲線での自己交差に問題があります。例として、これが発生している1つの曲線を次に示します。 ワイヤーフレーム:http : //twitpic.com/2zplw1/full 塗りつぶし:http : //twitpic.com/2zpmnt/full ご覧のとおり、2番目の曲げでは、内側部分がそれ自体と交差しているため、醜いアーティファクトが発生しています。その自己交差を引き起こさずに曲線をストロークするための良いアルゴリズム/方法はありますか? 編集:もっと極端な例に加えて、私が達成したいことのモックアップ: ワイヤーフレーム:http : //twitpic.com/2ztwzi/full 塗りつぶし:http : //twitpic.com/2ztwkt/full 理想的な結果(モックアップ):http : //twitpic.com/2ztxa8/full

2
Signed Distance Fieldのレイマーチングは、動的な世界にどのように実装されますか?
符号付き距離フィールドレイマーチングの基本を理解していると思います。一連の距離フィールド(http://iquilezles.org/www/articles/distfunctions/distfunctions.htmなど)を使用してシーンをモデル化し、次に、ピクセルを投影するたびに、光線の最初から開始します、その点で最も近いオブジェクトまでの距離を見つけ、何かにぶつかるまでその点を最も近い距離だけ増分します。簡単なレンダラーを何とかして実現しました。そこで、テクニックのほとんどの説明は終わりです。 これにより、SDFレイマーチングを実際のシナリオでどのように使用できるかについて、いくつか質問があります。 質問1:実際のゲームでは、シーンは通常複雑で、CPUにロードされ、多くの動的オブジェクトがあります。基本的なオクルージョンカリング(オクトリーなど)を理解しており、ポリゴンレンダリングを使用して、レンダリングするビューフラストラム内のアイテムの(CPU上に)リストを作成します。 それで、CPUによって制御され、画面上を動く多くのキャラクターと動的オブジェクトを含む非常に複雑なシーンがあると想像してください。レンダリングするオブジェクトをフレームごとにGPUにストリーミングするにはどうすればよいですか?すべての例には、GLSLでハードコードされたシーンがあります。誰かが動的にシェーダーにストリーミングされるレベルの例を共有できますか? 質問2:オブジェクトはどのようにして複数の色を持つことができますか?距離関数は距離を返すだけですが、実装は通常どのように色を返しますか?(たとえば、青い立方体ではなく赤い球体をヒットします。)これがCPU実装である場合、レイマーチャーを終了するヒットであるときに、距離関数内でグローバル関数を呼び出し、ヒットオブジェクトのオブジェクトも渡すことができます。テクスチャ/色。しかし、GLSLでアイテムの色またはテクスチャをどのように返しますか? ありがとうございました。

3
何かが消えるのに近づくにつれて、フラッシュ/点滅をより頻繁にする方法を教えてください。
私のゲームでは、敵を倒すと、ヘルスパックやゴールドなどをドロップすることがあります。これには時間制限を設けて、手に取らなければ最終的には消えるようにしたい。ドロップが「死」に近づくほど、アイテムをより頻繁に点滅させたいです。「より頻繁に点滅する」アルゴリズムをどのように実行しますか?

2
既知のキューを持つマッチゲームを最適化するアルゴリズム
Flowerzと呼ばれるゲームのソルバーをC#.NETで記述しようとしています。参考までに、MSNで再生できます。ここ:http : //zone.msn.com/gameplayer/gameplayer.aspx?game=flowerz。私は楽しみのためにそれを書いているのであり、どんな種類の割り当てや仕事に関連するもののためでもありません。このため、唯一の制限は私のコンピューター(8 GBのRAMを搭載したIntel i7コア)です。私に関する限り、他の場所で実行する必要はありません。 つまり、そのルールは次のようになります。 色とりどりの花でいっぱいの列があります。その長さは任意です キューは影響を受けません キューはレベルの開始時に生成されます 花は1つまたは2つの色を持っています。 2つの色がある場合、外側の色と内側の色があります。2色の場合、外側の色がマッチングに使用されます。 一致する場合、外側の色は消え、花は内側の花と同じ色の単一色の花になります。 ゲームの目標は、同じ色の3つ(またはそれ以上)のマッチを作成することです 単色の花がマッチの一部である場合、それは競技場から削除され、空のスペースが作成されます 単色の花と2色の花の外側の色を一致させることができます。この場合、単色の花は消え、2色の花の外側の色は消え、内側の色は残ります キューが空であるときは、ラウンドを獲得し、少なくとも1つの空のスペースが余っています カスケード一致が可能です。カスケードは、3つ(またはそれ以上)の外側の花が消え、その内側の色が3(またはそれ以上)の花の別のチェーンを形成するときです。 競技場は常に7x7です フィールドのいくつかのスペースは岩で覆われています あなたは岩の上に花を置くことはできません キューにはスペードを含めることもできます。スペードを使用して、配置した花を空いているスペースに移動できます。 スペードを使用する必要がありますが、実際には花を動かす必要はありません。花を元の場所から直接戻すことは完全に合法です。 キューには、色付きの蝶を含めることもできます。花にこの蝶を使うと、花は蝶の色になります 2つの色を持つ花に蝶を適用すると、花は1つの色、つまり蝶の色のみを取得します。 あなたは空のスペースやすでにこの色を持っている花に蝶を無駄にすることができます フィールドをクリアしてもゲームに勝つことはできません ソルバーの目標は単純です。できるだけ多くの余ったスペースをフィールドに残して、キューを空にする方法を見つけます。基本的に、AIがゲームをプレイします。ソルバーの出力は、見つかった移動のリストです。私はスコアには興味がありませんが、できるだけ長く生き残るために、可能な限り多くのオープンスペースを残す動きに興味があります。 言うまでもなく、キューが大きくなるほど検索スペースは急速に大きくなるため、ブルートフォースは問題外です。キューは15から始まり、2、3レベルごとに5ずつ増えます。そしてもちろん、最初の花を(0,0)に配置し、2番目の花を(0,1)に配置することは、特に最初の花を(1,0)に配置し、2番目の花を(0,0)に配置することとは異なります。フィールドには、以前のラウンドからの花がすでに生息しています。そのような単純な決定は、それを作るかどうかの違いを作ることができます。 私が持っている質問は次のとおりです。 これはどのような問題ですか?(巡回セールスマン、ナップザック、またはその他の組み合わせの問題を考えてください)。これを知っていると、私のGoogle風味が少し良くなる可能性があります。 どのようなアルゴリズムで良い結果をすばやく得ることができますか? 後者について:最初に、独自のヒューリスティックアルゴリズムを記述しようとしました(基本的に:キューを知っている場合、どうすれば解決できますか?)。 私は遺伝的アルゴリズムを使用することを考えていました(少なくともそれを使用する方法を知っているため...)が、ボードのバイナリ表現を決定する際にいくつかの問題があります。次に、クロスオーバーの問題がありますが、これは、順序付けされたクロスオーバー演算子または同様のタイプの操作で解決できます。 私の推測では、ソルバーは常にボード構成とそれが空にしようとしているキューを知っている必要があります。 ニューラルネットワークやファジーロジックシステムなどの他のヒューリスティックアルゴリズムをいくつか知っていますが、どれが最も適切であるか、または当面のタスクにより適した他のものがあるかどうかを知る経験がありません。
10 c#  algorithm  ai  puzzle 

4
星間経済シミュレーション
私はエリートやエスケープベロシティを連想させるゲームを設計しています。これらは古い宇宙取引ゲームで、宇宙で旅する商人を演じます。 私はゲームの経済を少なくとも実際の経済に似せたいと思っています。シミュレーションを実行するために必要なアルゴリズムを理解するために参照できるリソースはありますか? 大きなハードルの1つは、私が数学でかなりひどいことです。したがって、単純な説明が理想的です。 星間経済は、グローバル経済とそれほど変わらないと思います。特定の物は特定の場所でしか製造できません(リソースとテクノロジーのレベルにより)、物を運ぶには時間とお金がかかります。別の場所にいる人は別の物を必要としています...都市ではなく、彼らは惑星です。 Googleで「経済シミュレーションアルゴリズム」や類似の用語を検索しても、ほとんど役に立たず、背景を理解するのに必要なものは何もありません。 私が調査できる有用なリソースを知っている人はいますか?

3
凹型メッシュを一連の凸型メッシュに分解する
2つの理由で、凹型メッシュを凸型メッシュのセットに分解できるようにしたいと思います。 透明なレンダリング 物理図形 三角形のセット(凹)を入力として受け取り、いくつかの三角形のセット(凸)を出力するアルゴリズムはありますか?元のメッシュのパーツ間の穴を埋めないようにしてください。 私はすでに小さなアイデアに出くわしました。すべての凹型エッジを見つけ、エッジループに沿ってメッシュを分割します。私は正しい軌道に乗っていますか?これをどのように実装できますか?

3
六角形グリッドに範囲を表示
これが状況です。 六角形のボードとその上にユニットがあり、速度または移動値があります。4。異なる地形には異なるコストがあります。ユニットをクリックすると、ゲームに移動範囲が表示されます。 私の解決策は、4の範囲内の各ヘクスをA *パスファインディングでチェックすることでした。パスコストが4未満の場合、このヘックスは範囲内にありました。最後に、ゲームでそのユニットの範囲をうまく表示しました。 私の質問は、私が自分のソリューションでやったことを本当に誇りに思っているので、六角グリッドまたは正方形グリッドで範囲を検索する他のソリューションはありますか?私は思う、それは少し誇張されていますか?:)) ユニットスピードが4または6または8の場合、コンピューターのコンピューティング範囲までの時間は本当に良いことに気づきましたが、スピードが10以上の場合、計算に数秒待つ必要があることに気付きました実際のゲームでは、私はこのようなものを見ることはなく、私のA *パスファインディングはかなり最適化されているので、私の解決策は間違っていると思います。 返信ありがとうございます。

2
3Dパーリンノイズで生成されたときにフローティングテレインを削除する方法
私は現在3Dパーリンノイズを使用して、マーチングキューブと組み合わせてランダ​​ムな地形を生成しています。 私の問題は、地形の適度な高さを得るためにノイズ関数をスケーリングすることにあるようです。1オクターブのみを使用する場合、ノイズに関連するすべてのポイントが明らかに補間され、その結果、かなり滑らかなデータになります。ただし、オーバーハング/キャビティ/ギザギザの地形を取得するには、さまざまな振幅を持つ複数のオクターブを使用するか、結果の値をマップに必要な「最大」の高さにスケーリングする必要があります。 何かが足りないかもしれませんが、3Dパーリンノイズのあるマーチングキューブを使用することで、定期的にテレインのフローティングビットを取得します。 これをどのように修正できるか、または説明しているような結果を得るために使用できる他のノイズ関数があるかどうかについてのアイデアはありますか?丘、谷、山、湖などが欲しいのですが。マップの他の部分から分離された浮動ビットは必要ありません。これは、Minecraftが生成時に時折空に浮かぶだけの地形がある場合と同じ問題であると思います。 助けてくれてありがとう、神話

2
隣接するタイルに基づいてタイルを選択
タイルマップエディターで作業していて、隣接するタイルに基づいてタイルを自動的に選択する必要があります。たとえば、道路タイルを別の道路タイルの隣に配置する場合、2つは連続した道路を形成するように向きを合わせる必要があります。周辺に他の道路がある場合は、コーナータイルまたは交差点タイルを使用する必要があります。 誰かがこれを行うためのいくつかのアルゴリズムを推奨できますか?ゲームでは、8方向の正方形タイルマップを使用します。

2
Unityオクルージョンポータル:何をどのように?
(ここでは、Unity AnswersにUnityの質問を投稿することについてメタで私の言葉を食べています...そのサイトはこれよりも反応が遅いためです。) Unityはセルベースのオクルージョンカリングを提供します(Umbraを介して)。ただし、サポートする新しい機能はオクルージョンポータルです。 問題は、BSPベースのオクルージョンカリングがすでにUnityの機能である場合、ポータルは何をどのように追加するのかということです。 PS。この質問は「ポータルとは何ですか」ではありません。-私は元のQuake BSPスタイルのポータルを知っています-とにかく、BSPを使用しているため、Unityの明示的なポータルの概念が奇妙である理由の1つです。

4
地図のような地球サイズのマインクラフトをレンダリングするには、どのようなハードウェアが必要ですか?
私はこの問題について考えてきました。現在のテクノロジーで、ボクセルベースのゲームで地球の1:1のレプリカを作成することは可能ですか?この巨大な地図を保存するのに最適なデータ構造は何ですか?このデータ構造をリアルタイムでレンダリングするには、どのアルゴリズムを使用する必要がありますか? これらの質問はこれらの仮定をします: 各ボクセルの解像度は1立方メートルです。 簡単にするために、各ボクセルに必要なメタデータ情報は1バイトだけです。この情報は、ボクセルの「タイプ」(地球、水、岩など)の識別情報を格納するために使用されます。 地球の体積は1 * 10ˆ21立方メートルです。 「現在のテクノロジー」には、市販されているものはすべて含まれますが、スーパーコンピューターは含まれません。 地図の生成には、地球の地形と水深のみが使用されます。人間の建物、植物、洞窟は除きます。地下ブロックは、地質学的研究に基づいて選択されます。たとえば、深度が3000 kmを超える場合は、「マグマ」ボクセルをレンダリングします。 Minecraftと同様に、マップは静的ではなく、ゲーム内で変更できます。 「無限」の描画距離は大きなプラスです。もしあなたが飛んで地球全体を見ることができないならば、地図に地球全体を持っていることの意味は何ですか? この問題について考えたときに私が最初に結論付けたのは、各ボクセルがメモリの1バイトしか占有しないと仮定すると、マップを格納するのに1ゼタバイトが必要になると仮定すると、地球データを線形に格納することは不可能であるということです。したがって、何らかの圧縮が必要です。 ボクセル八分木はマップを圧縮できると思いますが、どれほどかはわかりません。このボクセルマップのエントロピーはおそらく非常に低いため、非常に高いレベルの圧縮を実現できると思います。 免責事項 これは理論的な質問です。ボクセル地球を書くつもりはありません 編集 ESA GOCEはすでに1cm-2cmの精度で地球ジオイドをマッピングしています。この情報を使用して、地球の非常に正確な高さマップを生成できると思います。これにより、地球の地形のギャップを埋めるためにアルゴリズムを使用する必要がなくなります。

2
すべてのタイルをループしたりスキップしたりせずに、線が交差しているタイルを見つける
私はこの問題を数日間見つめてきました。問題を視覚化するのに役立つように、このグラフィックを作りました:( グラフから、線が[1、1]、[1、2]、[2、2]、[2、3]と交差し、[で終わることがわかります3,3]) ラインに沿って各グリッドスペースに進み、グリッドスペースのマテリアルが固体であるかどうかを確認したいと思います。関係する数学はすでに知っているように感じますが、まだまとめることはできていません。私はこれを使用して視線をテストし、パスファインディングアルゴリズムを介してパスが見つかった後にノードを排除します-エージェントは固体ブロックを通過できないため、ブロックを通過できず、ノードがパスから排除されません。コーナーをナビゲートするために必要です。 そのため、交差する各グリッドスペースまでラインに沿って進むアルゴリズムが必要です。何か案は? 私は、Bresenhamのような多くの一般的なアルゴリズムと、線に沿って事前定義された間隔でステップを実行するアルゴリズムを調べました(残念ながら、このメソッドは、タイルがステップサイズよりも小さいウェッジと交差している場合、タイルをスキップします)。 ホワイトボードに大量のfloor()関数とceil()関数を実装していますが、複雑すぎて、速度低下の原因となる可能性があります。

3
リアルタイム戦略ゲームのネットワーキング
現在の最先端のネットワークリアルタイム戦略ゲームとは何ですか? 数年前、一部のAAAタイトルがプレイヤーの入力のみを送信したことを思い出しているようです(Starcraft 1、Age of Empires)。これはあなたが他のすべてを完全に決定論的に保つことを要求するので、これはまだ実行可能なオプションですか?乱数ジェネレータを同期させることは実行可能に思われますが、FPU実装などの微妙な違いはどうですか? または、戦略ゲームはアクションゲームネットワークに近いものを使用しており、個々のエンティティが代わりに送信されます(何らかの形の予測と(デルタ)圧縮を使用して)? もしそうなら、発射体のような揮発性アイテムはどのように扱われますか? クライアント/サーバー対ピアツーピアはどうですか?私はこれらすべてが強く相互に関係していると思います。 お時間をいただきありがとうございます!

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