0

注: この質問がここに属しているかどうかはわかりません。適切な場合は、適切な stackexchange サイトに移動してください。

マルチプレイヤーゲームを開発しています。

コードで維持したいもの: 2d クラスター。

クラスターとは: ユーザーの集合体です (ユーザーを囲む凸包)。

ユーザーとは : ユーザーには、影響を与えることができる ax,y 位置と周囲のエンベロープがあります。エンベロープは理想的には円で、その半径は彼が見える範囲です。クラスター内のすべてのユーザー エンベロープは、同じクラスター内の少なくとも 1 つの他のエンベロープと交差する必要があります。

図では、4 つのクラスターがあります。2 番目と 3 番目の図は、ユーザーの移動に伴って新しいクラスターがどのように形成されるかを示しています。 ここに画像の説明を入力 ここに画像の説明を入力 ここに画像の説明を入力

ユーザーが移動すると、クラスターが分割またはマージされて、上記のプロパティが維持されます。

「動的な凸包」が、C++ ゲーム コードでこのようなクラスター メンテナンスを実装するためのソリューションを見つけるために探している適切な領域であるかどうかを知りたいです。

注: また、私は現在動的な凸包について読んでいますが、まだ完成していませんが、固定された点セットの周りに凸包を形成することを扱っていると思います。私はそれが必要ですが、ハル内のユーザーのエンベロープが同じハル内の他のエンベロープと交差しない場合、ハルを2つ以上に分割することも必要です。たとえば、上の3番目の写真のA.

4

2 に答える 2

0

あなたの説明から、凸包が必要な理由がわかりません。

3 番目の写真では、B と F の間の空きスペースが凸包の内側になります。船体自体はBからFになります。

http://i.stack.imgur.com/8CG97.png

(注: エンベロープの外皮は、B と F のエンベロープに正接します。計算は困難ですが、簡単に概算できます。)

この種の情報がゲームに役立つ場合は、凸包が適しています。キネティック凸包が分割/マージをサポートしていない場合は、凸包を再計算する必要があります。しかし、ポイントが非常に少ないため、とにかくコストのかかる操作ではないはずです。少なくとも、非動的船体向けではありません。

于 2013-07-29T09:40:28.650 に答える
0

専門家ではありませんが、ユーザーの移動ごとに交差点を確認する必要があるようです (移動するユーザーのみを確認してください)。ユーザーのエンベロープが同じハルのユーザーと交差しなくなった場合は、ハルを再構築する必要があります。また、ユーザーのエンベロープが別のユーザーのエンベロープと交差し始めているかどうかも確認する必要があります。そうであれば、古い船体と新しい船体の両方を再構築する必要があります (おそらくそれらをマージします)。

編集:明確化

基本的に、ユーザーの移動ごとに、移動するユーザーのステータスを確認する必要があります。

  • このユーザーのエンベロープが他のユーザーのエンベロープと交差しなくなった場合 - そのユーザーをハルから除外します
  • このユーザーのエンベロープが他のユーザーのエンベロープと交差し始めた場合
    1. このユーザーが他のハルの一部でない場合は、他のユーザーのハルに追加します
    2. このユーザーが別のハルの一部である場合 - ハルをマージします
于 2013-07-29T10:28:48.027 に答える