如何计算java.awt.geom.Area的面积?
我正在寻找一种方法来计算的任意实例的面积(以像素为单位)java.awt.geom.Area
。
背景:我Shape
的应用程序中可能存在可能重叠的。我想知道一个Shape
重叠的部分。的Shape
S可以是歪斜的,旋转,等等。如果我有一个函数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()
面积与Shape
s’
的面积之和的比率来估计重叠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