如何计算java.awt.geom.Area的面积?

我正在寻找一种方法来计算的任意实例的面积(以像素为单位)java.awt.geom.Area

背景:我Shape的应用程序中可能存在可能重叠的。我想知道一个Shape重叠的部分。的ShapeS可以是歪斜的,旋转,等等。如果我有一个函数area(Shape)(或Area),我可以使用的两个交叉点Shape就像这样:

double fractionObscured(Shape bottom, Shape top) {

Area intersection = new Area(bottom);

intersection.intersect(new Area(top));

return area(intersection) / area(bottom);

}

回答:

一种方法是使用合适的方法fill()分别缩放和变换

Shape为不同的颜色,AlphaComposite并计算基础像素中的重叠像素Raster

附录1:使用此计算器查看效果,AlphaComposite.Xor表明任意两种不透明颜色的间隔为零。

附录2:计数像素可能会导致性能问题;采样可能会有所帮助。如果每个

Shape都是合理凸的,则有可能根据intersect()面积与Shapes’

的面积之和的比率来估计重叠getBounds2D()。例如,

Shape s1, s2 ...

Rectangle2D r1 = s1.getBounds2D();

Rectangle2D r2 = s2.getBounds2D();

Rectangle2D r3 = new Rectangle2D.Double();

Rectangle2D.intersect(r1, r2, r3);

double overlap = area(r3) / (area(r1) + area(r2));

...

private double area(Rectangle2D r) {

return r.getWidth() * r.getHeight();

}

您可能需要凭经验验证结果。

以上是 如何计算java.awt.geom.Area的面积? 的全部内容, 来源链接: utcz.com/qa/407653.html

回到顶部