论文部分内容阅读
[摘要]分形理论是对传统几何学的一个延伸,并具有广泛的应用价值。把分形图形用到屏幕保护程序中,能给人耳目一新的感觉,以koch曲线为例,抛砖引玉,简介它的实现方法。
[关键词]VB 分形 屏幕保护
中图分类号:TP3 文献标识码:A 文章编号:1671-7597(2008)1120061-01
分形是由法国数学家曼德勃罗在1975年首次提出的,其原义是“不规则的、分数的、支离破碎”的物体。其研究对象为自然界和社会活动广泛存在的无序(无规则)而具有自相似性的系统,即系统的组成部分以某种方式与整体相似,如云团、山峦、海岸线,闪电等。分形理论借助相似性原理洞察隐藏于混乱中的精细结构,为人们从局部认知整体,从有限认识无限提供崭新的语言和定量的描述,为现代科学技术提供新的思想和方法。分形已成为一门描述自然界中许多不规则事物及其现象的规律性的学科。分形的重要特征在于自相似性、自仿射性与标度变换下的不变性。
Koch曲线是一条具有百余年历史的老折线,是瑞典数学家Koch于1904年构造的妖魔曲线。构造Koch折线的方法:将长为L的直线段三等分,换中间的一段为成夹角60度的两个等长直线段,得到的所有直线段重复此操作直到无穷,得到一条自相似结构的折线。
以下是用VB实现的koch曲线雪花屏保代码:
Const pi = 3.14159
Private Declare Function SetWindowPos Lib "user32" (B_yVal hwnd As Long, B_yVal hWndInsertAfter As Long, B_yVal X As Long, B_yVal Y As Long, B_yVal cx As Long, B_yVal cy As Long, B_yVal wFlags As Long) As Long
Private Declare Function ShowCursor Lib "user32" (B_yVal bshow As Long) As Long
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
X = ShowCursor(True) :End
End Sub
Private Sub Form_Load()
Form1.ScaleTop = 300:Form1.ScaleLeft = -75
Form1.ScaleWidth = 400:Form1.ScaleHeight = -300
If App.PrevInstance = True ThenEnd
X = ShowCursor(False)
Randomize
formtop Me, True
Me.Show
End Sub
Public Function formtop(formx As Form, showflag As Boolean)
If showflag = True Then
SetWindowPos formx.hwnd, -1, 0, 0, 0, 0, 2 Or 1
Else
SetWindowPos formx.hwnd, -2, 0, 0, 0, 0, 2 Or 1
End If
End Function
Private Sub Timer1_Timer()
Form1.Cls
X1 = 70 * (Rnd + 0.5)
Y1 = 80 * (Rnd + 0.5)
X2 = 130 * (Rnd + 0.5)
Y2 = 184 * (Rnd + 0.5)
x3 = 190 * (Rnd + 0.5)
y3 = 80 * (Rnd + 0.5)
Call fractal((X1), (Y1), (X2), (Y2), 10)
Call fractal((X2), (Y2), (x3), (y3), 10)
Call fractal((x3), (y3), (X1), (Y1), 10)
End Sub
Sub fractal(a_x As Single, a_y As Single, b_x As Single, b_y As Single, s As Integer)
If (b_x - a_x) * (b_x - a_x) + (b_y - a_y) * (b_y - a_y) < s Then
Line (a_x, a_y)-(b_x, b_y), RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255))
Else
Dim cx!, cy!,dx!, dy!,ex!, ey!,L!,alpha!
cx = a_x + (b_x - a_x) / 3::cy = a_y + (b_y - a_y) / 3
ex = b_x - (b_x - a_x) / 3 :ey = b_y - (b_y - a_y) / 3
Call fractal(a_x, a_y, cx, cy, s):Call fractal(ex, ey, b_x, b_y, s)
L = Sqr((ex - cx) * (ex - cx) + (ey - cy) * (ey - cy))
alpha = Atn((ey - cy) / (ex - cx))
If (alpha >= 0 And (ex - cx) < 0) Or (alpha <= 0 And (ex - cx) < 0) Then
alpha = alpha + pi
End If
dy = cy + Sin(alpha + pi / 3) * L :dx = cx + Cos(alpha + pi / 3) * L
Call fractal(cx, cy, dx, dy, s): Call fractal(dx, dy, ex, ey, s)
End If
End Sub
分形学改变了我们看世界的角度,也在很多领域有了应用,分形艺术图风格奇特秀美,有着广阔的发展前景。相信它会发展成为一门不可替代的重要学科。
参考文献:
[1]孙博文,分形算法与程序设计Visual Basic实现.北京:科学出版社,2004.
[2]赵峰,赵荣椿,一种基于分形特征的工程图纸文字提取方法.机械科学与技术.1999.
[3]徐淑平、李春明,分形图的生成算法研究.微机发展.2005.
[关键词]VB 分形 屏幕保护
中图分类号:TP3 文献标识码:A 文章编号:1671-7597(2008)1120061-01
分形是由法国数学家曼德勃罗在1975年首次提出的,其原义是“不规则的、分数的、支离破碎”的物体。其研究对象为自然界和社会活动广泛存在的无序(无规则)而具有自相似性的系统,即系统的组成部分以某种方式与整体相似,如云团、山峦、海岸线,闪电等。分形理论借助相似性原理洞察隐藏于混乱中的精细结构,为人们从局部认知整体,从有限认识无限提供崭新的语言和定量的描述,为现代科学技术提供新的思想和方法。分形已成为一门描述自然界中许多不规则事物及其现象的规律性的学科。分形的重要特征在于自相似性、自仿射性与标度变换下的不变性。
Koch曲线是一条具有百余年历史的老折线,是瑞典数学家Koch于1904年构造的妖魔曲线。构造Koch折线的方法:将长为L的直线段三等分,换中间的一段为成夹角60度的两个等长直线段,得到的所有直线段重复此操作直到无穷,得到一条自相似结构的折线。
以下是用VB实现的koch曲线雪花屏保代码:
Const pi = 3.14159
Private Declare Function SetWindowPos Lib "user32" (B_yVal hwnd As Long, B_yVal hWndInsertAfter As Long, B_yVal X As Long, B_yVal Y As Long, B_yVal cx As Long, B_yVal cy As Long, B_yVal wFlags As Long) As Long
Private Declare Function ShowCursor Lib "user32" (B_yVal bshow As Long) As Long
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
X = ShowCursor(True) :End
End Sub
Private Sub Form_Load()
Form1.ScaleTop = 300:Form1.ScaleLeft = -75
Form1.ScaleWidth = 400:Form1.ScaleHeight = -300
If App.PrevInstance = True ThenEnd
X = ShowCursor(False)
Randomize
formtop Me, True
Me.Show
End Sub
Public Function formtop(formx As Form, showflag As Boolean)
If showflag = True Then
SetWindowPos formx.hwnd, -1, 0, 0, 0, 0, 2 Or 1
Else
SetWindowPos formx.hwnd, -2, 0, 0, 0, 0, 2 Or 1
End If
End Function
Private Sub Timer1_Timer()
Form1.Cls
X1 = 70 * (Rnd + 0.5)
Y1 = 80 * (Rnd + 0.5)
X2 = 130 * (Rnd + 0.5)
Y2 = 184 * (Rnd + 0.5)
x3 = 190 * (Rnd + 0.5)
y3 = 80 * (Rnd + 0.5)
Call fractal((X1), (Y1), (X2), (Y2), 10)
Call fractal((X2), (Y2), (x3), (y3), 10)
Call fractal((x3), (y3), (X1), (Y1), 10)
End Sub
Sub fractal(a_x As Single, a_y As Single, b_x As Single, b_y As Single, s As Integer)
If (b_x - a_x) * (b_x - a_x) + (b_y - a_y) * (b_y - a_y) < s Then
Line (a_x, a_y)-(b_x, b_y), RGB(Int(Rnd * 255), Int(Rnd * 255), Int(Rnd * 255))
Else
Dim cx!, cy!,dx!, dy!,ex!, ey!,L!,alpha!
cx = a_x + (b_x - a_x) / 3::cy = a_y + (b_y - a_y) / 3
ex = b_x - (b_x - a_x) / 3 :ey = b_y - (b_y - a_y) / 3
Call fractal(a_x, a_y, cx, cy, s):Call fractal(ex, ey, b_x, b_y, s)
L = Sqr((ex - cx) * (ex - cx) + (ey - cy) * (ey - cy))
alpha = Atn((ey - cy) / (ex - cx))
If (alpha >= 0 And (ex - cx) < 0) Or (alpha <= 0 And (ex - cx) < 0) Then
alpha = alpha + pi
End If
dy = cy + Sin(alpha + pi / 3) * L :dx = cx + Cos(alpha + pi / 3) * L
Call fractal(cx, cy, dx, dy, s): Call fractal(dx, dy, ex, ey, s)
End If
End Sub
分形学改变了我们看世界的角度,也在很多领域有了应用,分形艺术图风格奇特秀美,有着广阔的发展前景。相信它会发展成为一门不可替代的重要学科。
参考文献:
[1]孙博文,分形算法与程序设计Visual Basic实现.北京:科学出版社,2004.
[2]赵峰,赵荣椿,一种基于分形特征的工程图纸文字提取方法.机械科学与技术.1999.
[3]徐淑平、李春明,分形图的生成算法研究.微机发展.2005.