坐标顺序是否影响Java中多边形的绘制

时间:2013-03-12 17:39:31

标签: polygon

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

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

或者另一个例子是,如果我想绘制一个多边形,我有4组点,topleft,topright,bottomright和bottomleft,我只需按顺序输入它们,以Java中的drawPolygon方法获得带有对应角的绘制多边形所有这4点。

或者我可以按任意顺序排列我的坐标?

提前致谢。

2 个答案:

答案 0 :(得分: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)。

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

http://www.angusj.com/delphi/clipper/documentation/Images/winding_number.png

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

  • 将绕组计数设置为零
  • 从子区域内的点(P1),将假想线绘制到多边形或多边形外的另一个点(P2)
  • 在从P1到P2的行中移动时,对于从右到左穿过该行的每个多边形边缘,增加了绕组计数,并且对于从左到右穿过该行的每个多边形边缘,减少了绕组计数。

根据Java Graphics2D documentation fillPolygon 仅使用偶数填充规则,其中只填充奇数编号的子区域。

http://www.angusj.com/delphi/clipper/documentation/Images/evenodd.png

答案 1 :(得分: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