首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中形状的快速并集

Java中形状的快速并集
EN

Stack Overflow用户
提问于 2014-02-03 10:54:31
回答 1查看 1.7K关注 0票数 5

我正在开发一个用于提取SVG图像轮廓的库。在Java语言中使用Batik使得将SVG文件转换为展开的形状(java.awt.geom.Shape实例)的过程变得非常有趣--对于相对复杂的形状,我们执行此操作大约需要几毫秒。但是,由于我需要一个组合的轮廓,所以我创建了一个java.awt.geom.Area并使用.add(shape)合并每个形状。出乎意料的是,即使对于相对简单的形状,这也是令人难以置信的缓慢。我所说的“难以置信”是指在36秒内将8个形状相加,每个形状有6-10个点。

使用-Xrunhprof运行代码表明,大部分时间都花在java.awt.geom.AreaOp.pruneEdges(..)上,而java.lang.StrictMath.acos是最大的罪魁祸首。将另一种实现(AreaX)与FastMath相结合只产生了微不足道的改进,而我对用于处理任意几何形状的Java库的搜索却一无所获。

那么问题是,在Java中创建形状联合的方法是什么,而不会带来这种疯狂的性能损失?有没有一些库或方法可以帮助这个看似简单的操作的执行?

EN

回答 1

Stack Overflow用户

发布于 2014-02-19 02:01:27

您可以尝试创建一个java.awt.geom.Path2D (Path2D.FloatPath2D.Double),将您的形状附加到它并使用该路径创建一个区域。

这种方法比向区域添加形状快得多,但我不能100%确定结果是否完全相同。

类似于:

代码语言:javascript
复制
            List<Shape> shapes = ....
            Path2D path = new Path2D.Float();
            for (Shape shape : shapes) {
              path.append(shape, false);
            }
            Area compound = new Area(path);
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21519007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档