在排除某些圆圈的区域后,我正在计算直肠的面积。 这是我目前的解决方案:
var region = new Region( new Rectangle(0, 0, 10, 10) );
var circle = new System.Drawing.Drawing2D.GraphicsPath();
circle.AddEllipse(50, 50, 25, 25);
// Exclude the circle from the region.
region.Exclude(circle);
但是我需要像region.getArea()这样的东西来排除圆圈之后的区域。
您知道如何计算System.Drawing.Region区域吗?
-Or -
您是否知道在排除某些圆圈后计算矩形区域的另一种方法?
答案 0 :(得分:4)
float diam = 25;
var region = new Region(new RectangleF(0, 0, diam, diam));
var circle = new System.Drawing.Drawing2D.GraphicsPath();
circle.AddEllipse(0, 0, diam, diam);
region.Exclude(circle);
var rects = region.GetRegionScans(new System.Drawing.Drawing2D.Matrix());
float area = 0;
foreach (var rc in rects) area += rc.Width * rc.Height;
double realArea = diam * diam - Math.PI * diam * diam / 4;
Console.WriteLine("Approx area = {0}, real area = {1}", area, realArea);
输出:约面积= 141,实际面积= 134.126147876595
记住这个结果,Region类被设计用于图形代码。它只对具有迂回误差累积的诀窍的像素准确。 diam 越大,相对误差越小。
答案 1 :(得分:3)