使用matlab来计算庐山景区的面积
如何用matlab来计算某地的面积?
by:曦皇上人&ouyang
以庐山景区的占地面积为例进行计算。
首先你需要一个地图软件,它可以是百度地图、腾讯地图、谷歌地图,也可以是高德地图,得到庐山景区的一张截图,他可能是这样的:
!
庐山
但是要处理成这样:
(Thanks for 小希)
加上坐标轴,取景区边缘的点,得到坐标。
像这样:
X=[0 1 2 3 4 5 6 7 8 9 10 11 12 13 13.6087];
Y1=[0 1.5652 1.6425 2.8696 3.0343 3.7391 3.9130 3.9130 3.0343 2.6957 2.4348 2.1739 1.5652 0.8696 0];
Y2=[0 -0.6087 -0.3636 -0.3478 -0.4545 -1.0435 -1.3913 -1.3913 -1.3913 -1.3913 -1.3913 -1.1304 -1.7391 -1.4783 0];
事情开始变得有趣起来:
方法一:先拟合后求积分
X=[0 1 2 3 4 5 6 7 8 9 10 11 12 13
13.6087];
Y1=[0 1.5652 1.6425 2.8696 3.0343 3.7391
3.9130 3.9130 3.0343 2.6957 2.4348 2.1739 1.5652 0.8696 0];
Y2=[0 -0.6087 -0.3636 -0.3478 -0.4545
-1.0435 -1.3913 -1.3913 -1.3913 -1.3913 -1.3913 -1.1304 -1.7391 -1.4783 0];
C1=polyfit(X,Y1,7)
C2=polyfit(X,Y2,7)
Z1=polyval(C1,X);
Z2=polyval(C2,X);
plot(X,Y1,‘r*’,X,Z1,‘b’);%n=2阶显示拟合结果
hold
on
plot(X,Y2,‘r*’,X,Z2,‘b’);
接着求积分算面积:
A1=polyarea(X,Z1);
A2=abs(polyarea(X,Z2));
A=A1+A2
运行后得到:
面积
A =
46.4513
方法二:
X=[0 1 2 3 4 5 6 7 8 9 10 11 12 13
13.6087];
Y1=[0 1.5652 1.6425 2.8696 3.0343 3.7391
3.9130 3.9130 3.0343 2.6957 2.4348 2.1739 1.5652 0.8696 0];
Y2=[0 -0.6087 -0.3636 -0.3478 -0.4545
-1.0435 -1.3913 -1.3913 -1.3913 -1.3913 -1.3913 -1.1304 -1.7391 -1.4783 0];
plot(X,Y1,X,Y2)
P(1)=spline(X,Y1);
P(2)=spline(X,Y2);
N=100000;x=unifrnd(0,14,[1,N]);
y=unifrnd(0,4,[1,N]);
count1=sum(ppval(P(1),x)>y);
integral1=414count1/N;
x=unifrnd(0,14,[1,N]);
y=unifrnd(-2,0,[1,N]);count1=sum(ppval(P(2),x)>y);
count2=sum(ppval(P(2),x)>y);
N=100000;x=unifrnd(0,14,[1,N]);
y=unifrnd(-2,0,[1,N]);
count2=sum(ppval(P(2),x)<y);
integral2=214count2/N;
S=integral1+integral2
S =
48.0771
查资料可得:庐山景区的面积约为46.6平方千米,使用两种方法求出的面积与实际相差不大。