在 JPanel 上绘制 Path2D 时,我有一个奇怪的行为。
正如您在这个屏幕截图中看到的那样,有些形状有点像尾巴:
当我将类型更改为 Line2D.Double 时,它正如我所期望的那样:
这是绘制路径/线的代码:
Path2D.Double path = new Path2D.Double();
Graphics2D g = (Graphics2D)this.getGraphics();
for(int i=0; i<geom.size(); i++)
{
double x = ddGeom.getX(geom.get(i));
double y = ddGeom.getY(geom.get(i));
if(i==0)
path.moveTo(x-draw_center.x, y-draw_center.y);
path.lineTo(x-draw_center.x, y-draw_center.y);
}
g.draw(path);
你知道 Screenshot1 中的“尾巴”从何而来吗?我使用 SDK 版本 6。
非常感谢您的帮助
编辑:将代码片段更改为
if(i==0)
path.moveTo(x-draw_center.x, y-draw_center.y);
else
path.lineTo(x-draw_center.x, y-draw_center.y);
大部分(也许 75%)尾巴消失了。知道为什么会发生这种情况吗?
我终于明白了。感谢 HovercraftFullOfEels 提示“奇怪的中风”,我开始尝试自己的中风。 原笔画:
BasicStroke stroke = new BasicStroke(2.0f);
更改为:
BasicStroke stroke = new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL);
随着新的中风,所有“尾巴”都消失了。我仍然不明白为什么会发生这种情况,但如果有人遇到同样的问题,这个解决方法可能会有所帮助。
我仍然对这种行为的解释非常感兴趣。
感谢您的大力帮助
您在第一张图片中看到的内容看起来几乎像“斜接”。斜接是一种在路径中绘制线连接的方法,其中连接线的两个外边界延伸直至相交,并且封闭区域也被填充。
您的几何图形是否可能包含坐标几乎相同的连续点?以下示例显示了相同的问题,因为最后两个点具有几乎相同的坐标。
JFrame frame = new JFrame();
frame.setSize(300, 300);
frame.setContentPane(new Container() {
@Override
public void paint(Graphics graphics) {
Graphics2D g2 = (Graphics2D) graphics;
g2.setStroke(new BasicStroke(5));
g2.setRenderingHint(KEY_ANTIALIASING, VALUE_ANTIALIAS_ON);
g2.setRenderingHint(KEY_STROKE_CONTROL, VALUE_STROKE_PURE);
Path2D.Double path = new Path2D.Double();
path.moveTo(200, 100);
path.lineTo(100, 100);
path.lineTo(101, 100.3);
g2.draw(path);
}
});
frame.setVisible(true);
可以填充这个多边形吗?