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

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

3
ユニットが追加または削除されたときに長方形の形成を維持するにはどうすればよいですか?
行と列のある長方形のボットがあります。ボットがフォーメーションに追加または削除されると、問題が発生します。これが発生すると、ボットは、長方形の構成がほぼ同じアスペクト比で、可能な限り長方形になるように、自分自身を再配置する必要があります。これを行う方法? いくつかのアイデア: ボットを追加または削除する場合、ボットの新しい合計数と目的の一定のアスペクト比を使用して、そのアスペクト比に最も近いフォーメーションの新しい幅と高さを計算します。次に、何らかの方法でボットをシャッフルし、新しい次元に合わせます。 ボットが削除されたら、その背後にあったボットをその場所に移動し、フォーメーションの最後に到達するまで続行します。次に、バックランクのボットを何らかの方法でシャッフルすることにより、バックランクを可能な限り均等にします。 まったく異なる別のアイデアは、分子構造が一緒に留まる方法を模倣することです。4つの最も近いボットを引き付け、残りのボットを撃退することで、すべてのボットを4つの他のボットに囲ませます。逆二乗則を使用して分離を確保するには近すぎるボット(4つを含む)をすべて撃退します。また、構造全体の形状に追加の力が必要になります。しかし、これは非常に計算コストがかかります。 更新:だからサラームの答えを見て、良い次元を与える良い一般的な関数を思いついた。 最初に、以下の幅と高さの連立方程式を解いてから、答えを丸めました。 width/height=aspect ratio of your choice width*height=number of bots これにより、ボット数に対してそのアスペクト比に最も近い整数の長方形が得られます。最も近い長方形は、半分の時間が大きすぎ、半分の時間が小さすぎます(もちろん、ちょうどいいかもしれませんが、それらを気にする人もいます)。長方形が少し大きすぎる場合は、何もする必要はありません。バックランクはほぼ満杯になり、理想的です。長方形が少し小さすぎる場合は、問題が発生します。小さなオーバーフローは独自のランクに移動する必要があるため、少数のボットのみのランクが作成されますが、見た目は美しくありません。違いが大きい場合もあります(幅の半分よりも大きい)。この場合、1つのランクを加算または減算して、差を小さくします。次に、長方形が小さすぎる場合は、列を1つ追加して少し大きくします。それを行った後、バックランクは常に他のランクの少なくとも半分のボットを持っているように見えます。 更新 寸法を取得したら、それらを現在の寸法と比較します。新しい次元の間口が大きい場合、ランクごとに、下のランクからボットをポップし、そのランクのボットの数が間口と等しくなるまで、現在のランクにプッシュします。バックランクに達するまで、そのアルゴリズムを続けます。このアルゴリズムを使用すると、ボットは新しい次元に効率的に収まるように移動します。その後、単に新しい古いものをバックランクにプッシュします。アルゴリズムは、新しい間口が小さい場合と若干異なりますが、あなたはそれを把握できます! 次に、さらに2つの問題があります。削除、および新しいボットが必ずしもバックランクに割り当てられるわけではなく、追加された時点で最も近い位置にあるボットの柔軟な追加方法。

2
タイルグリッドのナビゲーションメッシュを生成するにはどうすればよいですか?
私はまだ実際にこのプログラムのプログラミングを開始していませんが、とにかくこれをどのように実行するかを知りたかったのです。 タイルのグリッドがあり、すべて同じサイズで、一部は通過可能で、一部はそうではないとします。このグリッドからポリゴンのナビゲーションメッシュを作成するにはどうすればよいですか? 私のアイデアは、通過不可能なタイルを取り出して、そこからラインを延長してポリゴンを作成することでした...これまでのところ、これで終わりです。何かアドバイス?

3
不規則な形状の面積を計算する方法は?
面積を計算する必要があるループ線セグメントのコレクションによって定義された部屋オブジェクトがあります。クラスは次のように記述できます(擬似コードで)。 class Point { float x; float y; ... float distanceFrom(Point p); } class Segment { Point start; Point end; ... float length(); } class Room { List<Segment> walls; ... float area(); } 部屋の壁はどこでも交差することはできませんが、セグメントの端点と作成された「サブループ」も新しい部屋に分離されます。解は完全に正確である必要はなく(10%の誤差が許容されます)、あまり頻繁に計算されません(<1 / s)。

5
2Dマップで接続された(ただし論理的に異なる)水域を検出するにはどうすればよいですか?
2D六角形のグリッドマップがあります。各六角形セルには、水か海かを判断するために使用される高さの値があります。私は、水域を特定してラベルを付ける良い方法を考えています。海洋と内海は簡単です(洪水充填アルゴリズムを使用)。 しかし、地中海のような水域はどうですか?大きなものに付着している水域(「海」と「湾」は開口部の大きさだけが異なる) ここに私が検出しようとしているものの例があります(画像の中央の青い水域は、技術的に接続されているにもかかわらず、左の大きな海域とは異なるラベルが付けられているはずです): 何か案は?

2
Mathematicaでの空の色の計算が間違っているのはなぜですか?
この論文(Perezモデル)に基づいて空の色を計算するアルゴリズムを実装しようとしています。シェーダーのプログラミングを始める前に、Mathematicaで概念をテストしたかったのです。私は取り除くことができないいくつかの問題が既にあります。誰かがすでにアルゴリズムを実装しているかもしれません。 私は絶対zenital輝度のための方程式を開始しYz、xzそしてyzなど紙(22ページ)で提案されています。の値はYz妥当なようです。次の図はYz、濁度Tが5の場合の太陽の天頂距離の関数として示しています。 関数gamma(zenith、azimuth、solarzenith、solarazimuth)は、指定された天頂距離と方位角を持つポイントと指定された位置の太陽の間の角度を計算します。この機能も機能しているようです。次の図は、この角度を示しているsolarzenith=0.5とsolarazimuth=0。zenith上から下へ(0からPi / 2へ)azimuth成長し、左から右へ(-PiからPiへ)成長します。太陽の位置をはっきりと見ることができます(輝点、角度はゼロになります): Perez関数(F)と係数は、論文に記載されているとおりに実装されています。その場合、色値Yxyはになりますabsolute value * F(z, gamma) / F(0, solarzenith)。これらの値は[0,1]の範囲内にあると考えています。ただし、これはYコンポーネントの場合ではありません(詳細については、以下の更新を参照してください)。サンプル値は次のとおりです。 {Y, x, y} {19.1548, 0.25984, 0.270379} {10.1932, 0.248629, 0.267739] {20.0393, 0.268119, 0.280024} 現在の結果は次のとおりです。 すべての計算が記載された Mathematicaノートブックはここにあり、PDFバージョンはこちらにあります。 誰も私が論文と同じ結果を得るために何を変更しなければならないか考えていますか? Cのようなコード // this function returns the zenital Y component for // a given solar zenital distance z and turbidity T float …
17 algorithm  sky 

2
六角形のグリッドでタイルのリングを取得
この投稿のおかげで:六角形のタイルとそれらの隣接する隣人を見つける、私は与えられたタイルに隣接するタイルを収集することができます。しかし、オフセットで指定されたタイルの「リング」のみを提供するアルゴリズムにかなりこだわっています。そのStack Overflowポストで与えられたアルゴリズムは、タイルを収集する順序を正確に気にしません。 オフセットごとに6タイルが追加されることを知っています。 オフセット1は、6つのタイル(最初の隣接タイル)を提供します。 オフセット2は12です。 オフセット3は18などです。 オフセットごとに6の一定の成長があります。したがって、これらのオフセットに適応するルールがあるはずだと思います。これを正確に把握することはできません。誰でも?


5
いつベクター/リストを使用する必要がありますか?
リストをいつ使用するかは理解できますが、ビデオゲームでリストを使用するよりもベクターを使用する方がよい場合はわかりません。高速ランダムアクセスを使用する方がよい場合 (そして、ポインタを削除/追加するだけなので、リストに挿入/削除する方が速い理由を理解していますが、それでも対応するアイテムを見つける必要があります...)

14
Big Oは本当に重要ですか?
学界の最悪の場合、Big Oは他のすべてについて教えられます。スペースの複雑さ、通常のケース分析、複雑さに対する単純さなどと比較して。 特にゲームプログラミングと業界にとって、最も重要なのはなぜですか? 参照は非常に役立ちます。

5
数独パズルを生成するにはどうすればよいですか?
数独パズルジェネレーターを作成しようとしています。それは私が予想したよりもはるかに困難であり、私がそれに夢中になるほど、それは難しくなります! 私の現在のアプローチは、問題を2つのステップに分割することです。 完全な(解決された)数独パズルを生成します。 解決可能になるまで解決策が1つになるまで数字を削除します。 ステップ1では、ブルートフォースメソッドを使用しているため、実行時の問題に直面しています。完全な数独パズルを埋める最適な方法はありますか? ステップ2では、解決した数独を「パズル化」するためにどのようなアルゴリズムを使用する必要がありますか?

3
確率ベースのゲームで損失回避をどのように処理しますか?
損失回避の心理的現象とは、プレイヤーが勝利の2倍の損失をどのように感じるかを指します。 たとえば、Bite FightのPvPはキャラクタースキルに関連する確率に基づいたシミュレーションであり、プレイヤーはコミュニティフォーラムで週に何度もこの感情を表明しています。 Pay-to-Winゲームを作成したくないが、最悪のプレイヤーに十分な頻度で勝利させて、それについて気分が良くしたい場合は、どうすればよいですか? 質問には2つの部分があります。 技術的にどのように扱いますか?特定のプレイヤーの多くの損失を避けるために、ある種の数学技術やメモリベースのシミュレーションを使用していますか? コミュニティの観点からどのように処理しますか?公開フォーラムでのこのような苦情についてはどうしますか?

5
リアルタイム戦略ゲームのネットワーキング
私は自分が取っているコンピューターサイエンスコースのリアルタイム戦略ゲームを開発しています。それのより難しい側面の1つは、クライアントとサーバーのネットワーキングと同期であるようです。このトピック(1500人の射手を含む)を読みましたが、他のモデル(たとえばLAN経由)とは対照的に、クライアント/サーバーアプローチを採用することにしました。 このリアルタイム戦略ゲームにはいくつかの問題があります。ありがたいことに、プレーヤーが行うすべてのアクションは決定論的です。ただし、スケジュールされた間隔で発生するイベントがあります。たとえば、ゲームはタイルで構成されており、プレイヤーがタイルを取得すると、そのタイルの値である「エネルギーレベル」は取得後1秒ごとに増加します。これは、私のユースケースを正当化する非常に簡単な説明です。 現在、サーバーにパケットを送信して応答を待つシンクライアントを実行しています。ただし、いくつかの問題があります。 プレイヤー間のゲームがエンドゲームに発展すると、毎秒50を超えるイベントが発生することが多く(前述のスケジュールされたイベントにより、蓄積されます)、同期エラーが発生し始めます。私の最大の問題は、クライアント間の状態のわずかな逸脱でさえ、クライアントが異なる決定を意味する可能性があり、それが完全に別個のゲームに雪だるま式になるということです。もう1つの問題(現時点ではそれほど重要ではありません)は、待ち時間があり、結果を確認するために移動してから数ミリ秒、さらには数秒待つ必要があることです。 これをエンドユーザーにとってより簡単に、より速く、より楽しくするためにどのような戦略とアルゴリズムを使用できるのだろうかと考えています。これは、1秒あたりのイベント数が多く、ゲームごとに複数のプレイヤーがいることを考えると、特に興味深いものです。 TL; DRが1秒あたり50イベントを超えるRTSを作成している場合、クライアントを同期するにはどうすればよいですか?

2
部分的に観察可能なゲームマップ— A *は適切ですか?
私はゲーム開発についてほとんど知らないので、経路探索アルゴリズムに頭を悩ませようとしています。 この設定を検討してください:エージェントは2Dマップ上にあり、グローバルに認識されているオブジェクトへの最短パスを見つける必要がありますが、ローカルビジョンスコープ内の障害物に関する情報のみが必要です(つまり、直接の障害物のみが知られ、マップの一般的なレイアウトは不明です) )。 また、隣接する正方形への移動はすべて高価であり、経路探索アルゴリズムは移動の数を最小限に抑える必要があります。 計算効率も最も重要であり、精度よりも重要です。 A *はこのユースケースに適していますか?

6
2Dボイドシミュレーションをどのように並列化できますか
異なるソース(クラスター、gpu)からの処理能力を使用できるように、2Dボイドシミュレーションをどのようにプログラムできますか。 上記の例では、色の付いていない粒子は、クラスター化(黄色)して移動を停止するまで動き回ります。 問題は、左上のエンティティが右下のエンティティと相互作用する可能性は低いものの、すべてのエンティティが潜在的に相互作用する可能性があることです。ドメインが異なるセグメントに分割された場合、全体が高速化される可能性がありますが、エンティティが別のセグメントに移動したい場合は問題が発生する可能性があります。 現時点では、このシミュレーションは良好なフレームレートの5000のエンティティで機能しますが、可能であれば何百万ものエンティティで試してみたいと思います。 これをさらに最適化するために四分木を使用することは可能でしょうか?他の提案はありますか?

3
時計回りにポイントの配列を並べ替える
2Dポイントの配列を時計回りに並べ替えるアルゴリズムはありますか? 私の場合は特に直角三角形を扱っているので、3ポイントだけです。 しかし、そのようなアルゴリズムが存在するかどうかを知りたいのですが、そうでない場合は、三角形の3点を時計回りに返す簡単な方法は何ですか? 編集:私は、凸であるポリゴンの重心に対して時計回りにポイントを計算しようとしています。 更新: これは、選択した回答に基づいて最終的に使用した実装です。パフォーマンスは重要ではなく、たまにしか発生しないため、うまくいきます。 ArrayList<PVector> pointList = new ArrayList<PVector>(); pointList.add(A); pointList.add(B); pointList.add(C); Collections.sort( pointList, new TriangleVectorComparator(origin) ); return pointList; // Comparator package triangleeditor; import java.util.Comparator; import processing.core.PVector; public class TriangleVectorComparator implements Comparator<PVector> { private PVector M; public TriangleVectorComparator(PVector origin) { M = origin; } public int compare(PVector o1, …

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