这可以在没有近似值的情况下完成:
- 找出多边形和圆的交点
- 构成交叉区域的边界 - 您将拥有一系列线段和圆弧
- 使用格林公式计算区域面积:http://en.wikipedia.org/wiki/Green%27s_theorem#Area_Calculation -
Integral[border](x*dy-y*dx)
对于每个线段计算这个积分是微不足道的 - 它只是x0*y1-y0*x1。
对于圆弧,它有点冗长。最终结果为Cx*(y1-y0) - Cy*(x1-x0) ) + R^2*(t1-t0),其中(Cx,Cy) 是圆心,(x0,y0) 是圆弧起点,(x1,y1) 是圆弧终点,t0 是圆弧起点角度,t1 是圆弧终点角度。
只是为了让任何人都可以验证推导,这里是:
(当然,它可以从几何中推导出来,但我是通过公式做到的)
Integral[arc](x*dy-y*dx)
Integral[t=t0..t1]( (Cx+R*cos t)*R*cos t - (Cy+R*sin t)*(-R*sin t) )dt
Integral[t=t0..t1]( (Cx+R*cos t)*R*cos t + (Cy+R*sin t)*R*sin t )dt
Integral[t=t0..t1]( Cx*R*cos t + R^2*cos^2 t + Cy*R*sin t + R^2*sin^2 t )dt
Integral[t=t0..t1]( Cx*R*cos t + Cy*R*sin t + R^2*sin^2 t + R^2*cos^2 t )dt
Integral[t=t0..t1]( Cx*R*cos t + Cy*R*sin t + R^2 )dt
Integral[t=t0..t1]( Cx*R*cos t + Cy*R*sin t )dt + R^2*(t1-t0)
Integral[t=t0..t1]( Cx*R*d(sin t) - Cy*R*d(cos t) ) + R^2*(t1-t0)
Cx*R*(sin t1-sin t0) - Cy*R*(cos t1-cos t0) ) + R^2*(t1-t0)
Cx*(y1-y0) - Cy*(x1-x0) ) + R^2*(t1-t0)