0

スタックオーバーフロー コミュニティの皆様、こんにちは。

これは、動的に形成された長方形の面積と位置の計算に関して 6 か月間尋ねた質問の続きです。そのために提供されたソリューションはうまくいきましたが、今はこれをさらに一歩進めたいと思います.

いくつかの背景 - Cocos2D/Box2D を使用したパズル ゲームに取り組んでおり、プレイヤーは画面上に線を引きます。プレーヤーが描いたものに応じて、描画された線の結果として表示されるポリゴンの領域と位置を計算したいと思います。

次の画像では、黒い境界線がプレイエリアを表しており、これは常に同じ形になります。灰色の線はプレイヤーが描いたもので、常に直線です。緑の四角が障害物です。障害物オブジェクトは凸形状になります。形成されたポリゴン (この場合は 3 つ) は青い領域であり、座標と領域を取得しようとしている形状です。

ポリゴン ゲームのプレイ エリアを示す画像

行列式を使用してポリゴンの面積を計算することは問題ないと思いますが、その前に、青いポリゴンの座標を計算する必要があり、これを行う方法がわかりません。

両端の線 (x,y) 座標、障害物の座標、黒い境界線の角座標を取得しました。それらを使用して、青いポリゴンの座標を計算することは可能ですか、それとも間違った方法でアプローチしていますか?

更新 - ダッフィーモへの対応

ご回答有難うございます。さらに説明すると、前述の各オブジェクトはクラスで定義およびカプセル化されています。つまり、Line/Obstacle/PlayingArea オブジェクトを取得しています。ポリゴン オブジェクトが「Rectangle」オブジェクトにカプセル化されています。これらのオブジェクトのそれぞれには、座標/領域/ID/状態など、それに関連付けられた独自のプロパティがあります...

すべてのオブジェクトを追跡するために、すべての Line オブジェクト / Obstacle オブジェクトなどをそれぞれの配列に保持する監視シングルトン オブジェクトを用意しました。このようにして、すべての Line をループして、それぞれの Line がプレイヤーによって描かれたかどうかを知ることができます。

このゲームは古典的な JezzBallに少し似ているため、ユーザーが線を描画するときにこれらの多角形を作成できるようにする必要があります。これは、特定の領域にボールが含まれているかどうかを検出する方法として多角形が使用されるためです。そうでない場合は、領域を埋める必要があります。

4

1 に答える 1

0

ポリゴンのノードとエッジが既にあるので、等高線積分を使用して重心、周囲、および面積を計算することをお勧めします。グリーンの定理を使用して、重心と面積を等高線積分 として表すことができます。

ガウス求積法を使用して、各エッジに沿って区分的積分を行うことができます。

それは速くて正確です。任意の複雑さのポリゴンで機能します。

更新: Objective-C はオブジェクト指向言語です。私自身はわかりませんが、C および C++ のアイデアに基づいていると思います。そういうわけで、もっとオブジェクトの観点から書き始めることをお勧めします。座標の配列?それらは一緒にカプセル化する必要があります。ポイント (id、x、y) を一緒にカプセル化する Point 抽象化をお勧めします。ポイントのリストを持つグリッドを作成します。

ユーザーがポイント間の関係を提供してポリゴンを形成しているようです。それはあなたの説明からは明らかではないため、実装に問題があることは驚くことではありません。

于 2013-03-24T13:17:11.660 に答える