作业帮 > 综合 > 作业

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

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/07/07 11:01:26
MATLAB 求一个凸多边形和一个圆的相交部分的面积
用下图举例我的问题.
比如,直角坐标系内,给定了凸角多边形顶点A、B、C、D、E的坐标(当然也有可能有更多顶点),已知圆2的圆心坐标和圆半径r.求matlab代码,求出该凸角多边形和圆的相交部分的面积(圆心有可能落在多边形的内、边和外部)
试试我编的这个程序.嘿嘿.思想跟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