基于Koch分形曲线方法计算中国大陆海岸线长度
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于Koch分形曲线方法计算中国大陆海岸线长度
一、实验内容
运用Koch分形曲线的方法来计算中国海岸线长度,分析实验结果并对此实验加以改进。
二、实验目的
了解正交矩阵在几何图形绘制中的应用,掌握循环语句的常用方法。
在此过程中运用并体会坐标变换、鼠标输入数据等方法,复习读入图片及文本文件的方法。
得出计算结果后与实际的长度进行比较并分析,最后给出改进方式。
三、实验原理
很显然海岸线是一种复杂但是在局部会保持与整体相似的性质,当然这也是我们可以用分形的方式来模拟出海岸线的形状进而估算出海岸线的长度的理论基础,也是数学家曼德勃罗在1967年所提出的理论。
其具体算法如下:
(1)首先用鼠标读取的方式在选定的海岸线图上读出尽可能多的点;
(2)然后进行Koch分形的迭代;
(3)最后算出分形迭代后的图形长度。
四、实验程序
(一)中国海岸线长度读取文件程序:
A=imread('D:\sealine.jpg');
image(A)
P=ginput
(二)分型计算程序:
function koch(P,N)
if nargin==0,P=[0 0;1 0];N=3;end
n=max(size(P))-1;
A=[cos(pi/3) -sin(pi/3);sin(pi/3) cos(pi/3)];
for k=1:N
p1=P(1:n,:);p2=P(2:n+1,:);
d=(p2-p1)/3;
q1=p1+d;q3=p1+2*d;q2=q1+d*A';
n=4*n;II=1:4:n-3;
P(II,:)=p1;P(II+4,:)=p2;
P(II+1,:)=q1;P(II+2,:)=q2;P(II+3,:)=q3;
end
plot(P(:,1),P(:,2)),axis off
axis image
(三)中国海岸线长度计算程序:
x=P(:,1);y=P(:,2);
plot(x,y)
X=diff(x);Y=diff(y);
L=sum(sqrt(X.^2+Y.^2))
五、实验结果及分析
L(模拟海岸线长度)=
17857.2794
即由分形模拟出的中国海岸线长度为17857.2794千米。
实验得到的分形图:
真实图像对比:
在查阅相关资料后,我们可以得到中国大陆海岸线的公认值为18000千米,我们显然可以看到此次实验得到的实验结果已相当接近真实值,其相对误差为:
(17857.2794 -18000)/18000=0.79%
六、实验结论
由Koch分形方法迭代8次后得到的图形来模拟中国海岸线,求出的长度已相当接近真实值相对误差为0.79%。
七、对本实验的思考及注意事项总结
在本次实验中,最容易出现错误的就是在用鼠标采集数据时应该沿着某个路径来采集,并且要切记计算机的坐标并非我们常见的右手系而是左手系,所以倘若我们所沿的路径是从下向上则采用正确方法将所得图像反转过来尤为重要。
这个反转的方法十分简单且操作易行,但是却因为其过于简单可能会被遗忘。
(一)程序法
图片反转(上下方向):
x=P(:,1);y=P(:,2);
y=-y;
plot(x.y)
(二)操作法
千万不能忘记图像本身就有一个反转的功能,所以这个方法更加适合,不过要注意的是在采取本方法是要注意翻转的坐标不能扭曲,不然所得图像的形状将会发生改变。