3

JavaのGraphics2Dクラスを使用してポリゴンを描画するために、座標のセットを入力する必要がある特定の順序があるかどうかを尋ねています。

たとえば、座標のX配列とY配列の両方について、座標(X、Y)の値を降順/昇順で配置する必要がありますか?

または、別の例として、ポリゴンを描画したい場合、左上、右上、右下、左下の4セットのポイントがあり、JavaでdrawPolygonメソッドにこの順序で入力するだけで、これらすべてに対応するコーナーを持つ描画ポリゴンを取得できます。 4点。

または、座標をランダムな順序で並べることができますか?

前もって感謝します。

4

2 に答える 2

3

ポリゴンの塗りつぶしを一般的に理解するには、エッジの方向巻き取り順序、および選択したポリゴンの塗りつぶしルールを理解する必要があります。

エッジの方向は、頂点が宣言された順序によって決まります。例えば ​​...

Polygon poly= new Polygon();
poly.addPoint(10, 10);
poly.addPoint(100, 10);
poly.addPoint(100, 100);
poly.addPoint(10, 100);

ポリゴンは、隣接する頂点(頂点の順序付きリストから)を結合してエッジを形成することによって描画されます。リストの最後の頂点も最初の頂点に結合しています(リストが円形であるかのように)。上記のポリゴンの最初のエッジは、最初の2つの頂点(Point(10,10)とPoint(100,10))から構成されています。

ポリゴンが自己交差またはオーバーラップする場合は常に、ポリゴンがどのように描画されるかを理解するために、巻き取り順序と適用されるポリゴン塗りつぶしルールの両方についての知識が必要です。ポリゴンが重なると、ポリゴンのサブ領域が作成されます。これは、エッジで囲まれた個別の領域です。これらのサブ領域の巻き順序と適用されるポリゴン塗りつぶしルールによって、これらのサブ領域が塗りつぶされるかどうかが決まります。


(出典:angusj.com

任意のポリゴンサブ領域の回転数は、次の方法で導き出すことができます。

  • 巻線数をゼロに設定します
  • 特定のサブ領域内にあるポイント(P1)から、1つまたは複数のポリゴン(P2)の外側にある別のポイントに架空の水平線を描画します。
  • この線をP1からP2に移動しながら、この架空の線と交差するポリゴンエッジごとに、上に向かっている場合は巻き数を増やし、そうでない場合は巻き数を減らします。

Java Graphics2Dのドキュメントによると、fillPolygonは、奇数番号のサブ領域のみが塗りつぶされる偶数奇数の塗りつぶしルールのみを使用します。


(出典:angusj.com

于 2013-03-12T20:51:58.610 に答える
1

ポリゴンは、各ポイントから次のポイントに描画されます。

したがって、エッジの2つのポイントは、DrawPolygonに送信するポイントのリスト内で隣接している必要があります。

ポイントA、B、C、Dの間にポリゴンを描画する場合は、これらのポイントを順番に送信する必要があります。

  • A、B、C、Dまたは
  • D、A、B、Cまたは
  • C、D、A、Bまたは
  • B、C、D、Aまたは
  • D、C、B、Aまたは
  • A、D、C、Bまたは
  • B、A、D、Cまたは
  • C、B、A、Dまたは

A、B、C、およびDの他のすべての組み合わせは、同じポイントであるがエッジが異なるポリゴンを生成します。

これは、上記の注文のいずれかを使用した場合に得られるポリゴンです

A------B
|      |
|      |
|      |
D------C

これは、たとえばA、B、D、Cを使用した場合に得られるポリゴンです。

A------B
 \    /
  \  /
   *
  / \
 /   \
D-----C
于 2013-03-12T18:00:42.293 に答える