3

我在问是否有任何特定的顺序需要我输入我的一组坐标以使用 Java 中的 Graphics2D 类绘制多边形。

例如,对于 X 和 Y 坐标数组,我的坐标 (X,Y) 的值是否需要按降序/升序排列?

或者另一个例子是,如果我想绘制一个多边形并且我有 4 组点,topleft、topright、bottomright 和 bottomleft,我只需按此顺序将它们输入到 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);

多边形是通过连接相邻的顶点(从一个有序的顶点列表中)形成的边来绘制的。列表中的最后一个顶点也加入第一个顶点(好像列表是圆形的)。上面多边形中的第一条边由前两个顶点构成——Point(10,10) 和 Point(100,10)。

每当多边形自相交或重叠时,要了解如何绘制多边形,您需要了解缠绕顺序和应用的多边形填充规则。当多边形重叠时,会创建多边形子区域 - 由边缘包围的离散区域。这些子区域的缠绕顺序和应用的多边形填充规则决定了这些子区域是否被填充。


(来源:angusj.com

任何给定多边形子区域的绕组数可以通过以下方式得出:

  • 将绕组计数设置为零
  • 从给定子区域内的一个点 (P1),画一条假想的水平线到一个或多个多边形 (P2) 之外的另一个点
  • 在从 P1 到 P2 遍历这条线时,对于穿过这条假想线的每个多边形边缘 - 如果它朝上,则增加绕组计数,否则减少绕组计数。

根据 Java Graphics2D文档fillPolygon仅使用奇偶填充规则,其中仅填充奇数子区域。


(来源:angusj.com

于 2013-03-12T20:51:58.610 回答
1

多边形从每个点绘制到下一个点。

因此,一条边的两个点必须是您提交给 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 回答