Java Graphics2D:在上一个下绘制下图
Posted
技术标签:
【中文标题】Java Graphics2D:在上一个下绘制下图【英文标题】:Java Graphics2D : draw the following figure under the previous 【发布时间】:2014-10-25 14:43:30 【问题描述】:如何在上一个下画出下图?现在结束了......这将是漏斗,所以我希望每个下一个椭圆都在多边形和弧下。 我有这样的代码:
for (int i = 0; i < pdLen; i++)
....
....
g2.fillPolygon(poly);
g2.fillOval(topLeft[0], topLeft[1] - 10, topRight[0] - topLeft[0], arcHeight);
g2.fillArc(botLeft[0], botLeft[1] - arcHeight / 2, botRight[0] - botLeft[0], arcHeight, 0, -180);
谢谢 PS:后面的坐标是从前面计算的,所以 for(int i=pdLen-1;i>0;i--) 不起作用
UPD:
每个循环步骤都会计算 topLeft 和 topRight。
int[] topLeft = (int)Math.round( startX + ( procSum/onePixX ) ), (int)Math.round( startY + ( procSum/onePixY ) );
int[] topRight = (int)Math.round( topRightX - ( procSum/onePixX ) ), (int)Math.round( startY + ( procSum/onePixY ) );
procSum += (pieceData[i] * pieceProc);
int[] botLeft = (int)Math.round( startX + ( procSum/onePixX ) ), (int)Math.round( startY + ( procSum/onePixY ) );
int[] botRight = (int)Math.round( topRightX - ( procSum/onePixX ) ), (int)Math.round( startY + ( procSum/onePixY ) );
procSum += padProc;
【问题讨论】:
【参考方案1】:您可以反转循环。您可能需要考虑坐标的计算,但可以做到。
一般来说,在这种情况下,您应该发布MCVE。这将为每个人节省大量时间。
然而,廉价(即简单)的解决方案是存储必须绘制的内容,然后以相反的顺序绘制这些形状:
List<Shape> ovals = new ArrayList<Shape>();
List<Shape> arcs = new ArrayList<Shape>();
for (int i = 0; i < pdLen; i++)
//g2.fillOval(topLeft[0], topLeft[1] - 10, topRight[0] - topLeft[0], arcHeight);
ovals.add(new Ellipse2D.Double(topLeft[0], topLeft[1] - 10, topRight[0] - topLeft[0], arcHeight));
//g2.fillArc(botLeft[0], botLeft[1] - arcHeight / 2, botRight[0] - botLeft[0], arcHeight, 0, -180);
arcs.add(new Arc2D.Double(botLeft[0], botLeft[1] - arcHeight / 2, botRight[0] - botLeft[0], arcHeight, 0, -180));
for (int i=ovals.size()-1; i>=0; i--)
g2.fill(ovals.get(i));
g2.fill(arcs.get(i));
【讨论】:
以上是关于Java Graphics2D:在上一个下绘制下图的主要内容,如果未能解决你的问题,请参考以下文章
java Graphics2D绘制文字并居中并解决服务器乱码问题