如何计算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

