MATLAB 求一个凸多边形和一个圆的相交部分的面积
1个回答

试试我编的这个程序.嘿嘿.思想跟spirit3772的相似,但其实这个比较简单的问题还用不到图形学的理论.

注意查看圆和多边形的显示状况,如果没能完全显示就需要把mesh_range这个参数调大一点.

这个程序对任意多边形都有效,包括凸多边形.

程序中的圆形圆心在(-1,2)半径r=1. 这些参数可以任意改.

网格点越多越精确,计算量也越大.

想要更加严格的完成这个计算,可以定义一个面积差值的收敛值,逐步提高网格点的密度,直到所求面积收敛为一个稳定值.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clear

close all

%Define grid

mesh_range=5;

mesh_density=0.05;

x=-mesh_range:mesh_density:mesh_range;

[X,Y] = meshgrid(x,x);

%Define a circle

r=1;

oa=-1; ob=2;

t=0:0.01:2*pi;

a=r*sin(t)+oa;

b=r*cos(t)+ob;

plot(a,b)

in_circle = inpolygon(X,Y,a,b);

x_polygon = [0 1 -2 -3 4 3 0]; y_polygon = [0 1 2 -1 -4 -3 0];

hold on

plot(x_polygon,y_polygon);

hold off

in_polygon = inpolygon(X,Y,x_polygon,y_polygon);

in_both=in_circle & in_polygon;

figure

imshow(in_both)

figure

imshow(in_polygon)

figure

imshow(in_circle)

Area=sum(sum(in_both))*mesh_density^2