Science 版 (精华区)

发信人: qpcwth (独翅鸟), 信区: Science
标  题: 《分形艺术》52
发信站: 哈工大紫丁香 (2001年11月03日18:21:28 星期六), 站内信件

第七章 对称图案与平面铺砌
7.4 对称斑图的等能面画法
    为了得到q次旋转对称图案,可以先将哈密顿函数做平滑化处理,得到新的哈密顿量
 H^((o))_q:
H^((0))_q=∑^q_(j=1)cos{xcos[2πj/q]+ ysin[2πj/q]}=∑^q_(j=1)cos(ξ_j)=E,

其中
ξ_j=re_j,j=1,…,q,
r=(x,y),
e_j=cos(2π/q)j+sin(2π/q)j,
在这里ξ_j是矢量r在e_j方向上的投影长度。举例说明,当q=3时,ξ_j取值如下:
ξ_1=[-x+SQRT(3)y]/2,
ξ_2=[-x-SQRT(3)y]/2,
ξ_3=x.
    当q=4时,ξ_j的取值如下:
ξ_1=y,
ξ_2=-x,
ξ_3=-y,
ξ_4=x.
分别令E/x=0,E/y=0,可以求出E的最大值和 最小值。当q=3时,E的最大值E_(m
ax)=3,E的最小值E _(min)=-3/2,均对应于椭圆型不动点(elliptic fixed points)。E
=-1对应于双 曲型极值点的能量。当E∈(-3/2,-1)时,“粒子”在三角形网格内沿同 心
网环运动;当E∈(-1,3)时,“粒子”在六角形格子内沿同心网环运动。
    E取不同值时,会得到各种闭合的不变曲线,它们构成q次对称图案。但图案 中相点
分布的密度却与E和q有很大关系。当q{1,2,3,4,6}时, E取不同的值,会得到分布密
度很不相同的对称图案。
    计算过程中,扫描平面某一矩形区域(不失一般性,可以选原点周围的区域),对每
一点计算 函数E=f(x,y)的值,根据E值的大小标上不同的颜色。标色 很重要,需要不
断试验,直到满意为止。计算程序如下:
{Program Five.PAS, Symmetries and Tilings of Map}
{(c)Liu Huajie, Oct.3,1994}
uses graph,crt;
label 20;
const
esc=#27;
q=5; {2,3,4,5,6,7,8}{对称次数}
scale=64; {4,16,32,64,128}{斑图实际尺度}
width=450; {150,200,,400,450}{图形每个方向上象素个数}
var
i,gd,gm: integer;
nx,ny,kcolor:integer;
H,r,x0,y0,x,y:real;
xmin,ymin,xmax,ymax,deltax,deltay:real;
ch:char;
BEGIN
Clrscr;TextColor(Green);
writeln('Symmetries and Tiling, Liu Huajie');
writeln('Press ESC to abort during calculating.');
TextColor(Red);
write('Please input xmin='); readln(xmin);
Write('Please input ymin='); readln(ymin);
xmax:=xmin+scale*Pi;
ymax:=ymin+scale*Pi;
Gd:=VGA; Gm:=VGAHi;
InitGraph(Gd,Gm,'D:\PASCAL');
if GraphResult<>grOK then Halt(1);
SetTextStyle(1,1,3);
OutTextXY(500,50,'Press ESC to abort!');
REPEAT
deltax:=(xmax-xmin)/width;
deltay:=(ymax-ymin)/width;
FOR ny:=0 TO width  do
FOR nx:=0 TO width do BEGIN
x:=xmin+nx*deltax;
y:=ymin+ny*deltay;
H:=0;
for i:=1 to q do
begin
H:=H+cos(x*cos(2*Pi*i/q)+y*sin(2*Pi*i/q));
{上一行可以换成任意函数,于是便可计算一般函数的等能面}
end;
IF (H>-9)and(H<=-5) THEN   kcolor:=1;
IF (H>-5)and(H<=-4) THEN   kcolor:=2;
IF (H>-4)and(H<=-3) THEN   kcolor:=3;
IF (H>-3)and(H<=-2) THEN   kcolor:=4;
IF (H>-2)and(H<=-1) THEN   kcolor:=5;
IF (H>-1)and(H<=-0.5) THEN   kcolor:=6;
IF (H>-0.5)and(H<=-0.2) THEN   kcolor:=1;
IF (H>-0.2)and(H<=-0.1) THEN   kcolor:=2;
IF (H>0)and(H<=0.1) THEN   kcolor:=3;
IF (H>0.1)and(H<=0.2) THEN   kcolor:=4;
IF (H>0.2)and(H<=0.3) THEN   kcolor:=5;
IF (H>0.3)and(H<=0.5) THEN   kcolor:=6;
IF (H>0.5)and(H<=1) THEN   kcolor:=7;
IF (H>1)and(H<=3) THEN   kcolor:=8;
IF (H>3)and(H<=5) THEN   kcolor:=9;
IF (H>5)and(H<=7) THEN   kcolor:=10;
IF (H>7)and(H<=9) THEN   kcolor:=11;
IF (H>9)and(H<11) THEN   kcolor:=12;
PutPixel(nx+10,ny+10,kcolor);
IF KeyPressed THEN goto 20;
END;
20:
ch:=ReadKey;
until (ch=esc);{运行过程中,按ESC键随时退出}
CloseGraph
END.
    聪明的读者也许马上就注意到了,上述程序实际上具有通用性,可以计算并绘制任
意形式 的二元函数的等能(势)面。使用上面的程序应注意四点:
    1)对于不同的二元函数,标色语句应当作适当的调整,即重新划分等能(势)层区间

    2)计算过程中如果想随时中止,需按ESC键。
    3)程序中scale的值决定了视场的大小,在图形大小一定的情况下,如果scale取得
大,相 当于将镜头推远,细节看不清,整体效果明显;如果scale取得小,则相当于拉
近镜头观察 局部,细节清楚,但不知斑图的宏观结构。
    4)为了得到大型高精度图形,需改变程序,先将计算结果存到一个临时文件中,再
将此文件 变成标准格式图形文件(如GIF格式),可参见本书6.3节有关内容。

--
心事浩茫连广宇,于无声处听惊雷

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.229.154]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.206毫秒