- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Martin图形墙纸生成器的设计与实现
Martin图形墙纸生成器的设计与实现
一 背景
Windows桌面上有一幅漂亮的墙纸是一件赏心悦目的事,这可以去拷贝一份自己感兴趣的图片做为墙纸,这些图片也许是通过摄影或扫描得到,不过这次用的是数学公式通过迭代去运算产生一些非常漂亮的图片,下面就是我这次用matlab来生成Martin图形的整个过程的设计与这次设计过程中的问题。
英国科学家Barry Martin曾经提出如下一对迭代公式, 采用这组公式通过迭代运算绘制出的计算机图形称为Martin图形,,不同的控制参数值将得到不同的图形,参数完全决定了最终图形的形态,这样的图形是无穷无尽的。图2是不同参数生成的图形(总共迭代了50万次),有趣的是这些图形酷似植物的内部结构。
图2 不同参数时的Martin图形
Martin图形表明:自然界的构造可能是一些简单规则的反复运用。正如Barry Martin所说的:“……非常清楚,这种新奇的图案向我们揭示出,构造复杂生命组织的结构的规律可能是简单的、可笑的……”[2]。
二 Martin图形墙纸生成具体原理与实现过程
图形墙纸的生成的一个核心的原理是先由Martin公式计算出所要描绘的坐标,再对该坐标进行绘点,加色,如此经过50万次的迭代运算,从而生成图像。
程序的开始要先生成一幅空白的图片,我用到的是ones函数,能生成一幅空白的白色图片,再对各个起始变量赋初值,然后要编写迭代循环将mardin公式写入循环里
下面列出的的就是Mardin公式:
(1)
其中:
(2)
是变量,,是给定的参数。
具体实现过程用流程图表示就是:
实际MATLAB编写中xn、yn分别用x0 y0表示
根据要求首先要编写一个函数调用:
function [I]=Martin(h,l,a,b,c,r1,g1,b1,r2,g2,b2)
I=ones(h,l,3);
I(:,:,1)=r1;
I(:,:,2)=g1;
I(:,:,3)=b1;
接下来在填充色彩之前,有一个重要的一步就是找出图像的大小和位置,在程序中只要得出图像的边界坐标就可以了,需要一次迭代:
y0=0;
x0=0;
for n=1:600000
x1=y0-sign(x0)*sqrt(abs(t*x0-c));
y1=a-x0;
x0=x1;y0=y1;
max=0;
mix=0;
if maxx1
max=x1;
end
if mixx1
mix=x1;
end
may=0;
miy=0;
if mayy
may=y;
end
if miyy
miy=y;
end
end
再一次迭代对图像一点一点进行添色:
y0=0;
x0=0;
for n=1:500000
x1=y0-sign(x0)*sqrt(abs(b*x0-c));
y1=a-x0;
x0=x1;y0=y1;
通过这次迭代就可以得到一组有规律的坐标x1,y1
x0,y0进入下一步循环,再将50万迭代获取的所有得到的x1,y1坐标点进行加色,就可以获得一幅有规律的图像。但获得图像不是都在图片的中心,显示的时候会出现不完整的图片,这就需要对图像进行压缩与平移,这就需要求出图像的中心坐标,还有图像大小,这就需要再这次迭代之前在进行一次迭代,根据x轴最大值max最小值mix,y轴最大值may最小值miy,这样就可以得出上面需要的中心坐标,还有图像大小,这样就可以继续上面的程序,得到这样一组程序进行平移润色:
x2=max+mix;y2=may+miy; %计算图像中心坐标
l1=l/(max-mix);h1=h/(may-miy);
x1=(x1-x2/2)*l1;y1=(y1-y2/2)*h1;%平移缩放
x1=floor(x1);y1=floor(y1);
l2=floor(l/2);h2=floor(h/2);
if x1-l2x1l2y1-h2y1h2
x1=x1+l2;y1=y1+h2; %平移到中心
I(y1,x1,1)=r2; %图像色彩设定
I(y1,x1,2)=g2;
I(y1,x1,3)=b2;
end
end
clc;
clear all;
close all;
文档评论(0)