共回答了27个问题采纳率:85.2%
试试我编的这个程序.嘿嘿.思想跟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
1年前
1