分形次数为1时,图形正确,二以上就不对了。
Const Max_rn = 20
Const Anz_ln = 25
Const Pi = 3.1415926435 'PI
Dim Axiom As String '公理
Dim a(Anz_ln) As String '被替换字符
Dim x(Anz_ln) As String '替换字符串
Dim Ke_en As String '生成字符串
Dim Ke_lt As String '生成字符串
Dim abc(Anz_ln) As String '每次替换的字符串
Dim Delta As Single '生长角度
Dim xPos(Max_rn) As Single '节点x坐标
Dim yPos(Max_rn) As Single '节点y坐标
Dim Delt(Max_rn) As Single '节点方向角
Dim Kl_er As Integer '字符串中字符的位置
Dim n As Integer '字符串替换次数
Dim i As Long
Dim j As Integer
'替换减少
Private Sub Command2_Click()
Picture1.Cls
n = n - 1
If n < 1 Then n = 1
Ke_en = abc(n - 1)
Text1.Text = Ke_en
Call lsystem
If n = 1 Then Ke_en = Axiom
End Sub
'退出
Private Sub Command3_Click()
End
End Sub
'字符串初始信息
Private Sub Form_Load()
Axiom = "F"
a(0) = "F": x(0) = "F[-F+F]F[-F]F"
Delta = 90
Ke_en = Axiom
n = 1
End Sub
'字符串替换过程,替换增加
Private Sub Command1_Click()
Ke_lt = Ke_en
Ke_en = ""
For i = 1 To Len(Ke_lt)
For j = 0 To Anz_ln
If a(j) = Mid(Ke_lt, i, 1) Then
Ke_en = Ke_en & x(j)
GoTo 1
End If
Next j
Ke_en = Ke_en & Mid(Ke_lt, i, 1)
1 Next i
abc(n) = Ke_en
Text1.Text = Ke_en
Open "F:\fortran\antisnow_str.txt" For Output As #1
Print #1, Text1.Text
Close #1
Picture1.Cls
Call lsystem
n = n + 1
End Sub
'字符串中字符的作用
Private Sub lsystem()
xPos(0) = 0
yPos(0) = 0
Delt(0) = 0
Open "f:\fortran\antisnow_axis.txt" For Output As 2
For i = 1 To Len(Ke_en)
Select Case Mid(Ke_en, i, 1)
Case "["
Kl_er = Kl_er + 1
xPos(Kl_er) = xPos(Kl_er - 1)
yPos(Kl_er) = yPos(Kl_er - 1)
Delt(Kl_er) = Delt(Kl_er - 1)
Case "]"
Kl_er = Kl_er - 1
Case "+"
Delt(Kl_er) = Delt(Kl_er) + Delta * Pi / 180
Case "-"
Delt(Kl_er) = Delt(Kl_er) - Delta * Pi / 180
Case "F"
Picture1.PSet (3000 + xPos(Kl_er), 8000 - yPos(Kl_er)), RGB(0, 0, 0)
xPos(Kl_er) = xPos(Kl_er) + Cos(Delt(Kl_er)) * 100
yPos(Kl_er) = yPos(Kl_er) - Sin(Delt(Kl_er)) * 100
Picture1.Line -(3000 + xPos(Kl_er), 8000 - yPos(Kl_er)), RGB(0, 0, 0)
Print #2, xPos(Kl_er) / 100; " "; yPos(Kl_er) / 100
End Select
Next i
Close
End Sub