24小时热门版块排行榜    

查看: 613  |  回复: 3

wuhaiyou111

新虫 (初入文坛)

[求助] VB 分形算法实现科赫格子

自己写的,加大写A的地方也就是角度的变化不太清楚如何实现?请教高手啊!新虫,金币不多,谅解。
Const pi = 3.14159

Private Sub Form_Click()

ScaleTop = 50
ScaleLeft = 0
ScaleWidth = 100
ScaleHeight = -50
Call koch(20, 20, 80, 20, 1)
End Sub

Sub koch(ax As Single, ay As Single, bx As Single, by As Single, c As Single)

Dim cx As Single
Dim cy As Single
Dim dx As Single
Dim dy As Single
Dim ex As Single
Dim ey As Single
Dim fx As Single
Dim fy As Single
Dim l As Single
Dim alpha As Single

If (bx - ax) * (bx - ax) + (by - ay) * (by - ay) < c Then
  
  Line (ax, ay)-(bx, by)
  
  Else
  
  cx = ax + (bx - ax) / 3
  cy = ay + (by - ay) / 3
  ex = bx - (bx - ax) / 3
  ey = by - (by - ay) / 3
  l = Sqr((ex - cx) * (ex - cx) + (ey - cy) * (ey - cy))
  
  
  AA”If (ex - cx) > 0 Then
  AA”alpha = pi / 2
  AA”Else
  AA”alpha = 0 / pi
  
  AA” End If
  
  dy = cy + Sin(alpha) * l
  dx = cx + Cos(alpha) * l
  fx = ex + Cos(alpha) * l
  fy = ey + Sin(alpha) * l
  
  Call koch(ax, ay, cx, cy, c)
  Call koch(cx, cy, ex, ey, c)
  Call koch(ex, ey, bx, by, c)
  Call koch(cx, cy, dx, dy, c)
  Call koch(dx, dy, fx, fy, c)
  Call koch(fx, fy, ex, ey, c)
  
  End If
  
  
End Sub

0C99Z%H8}531TL`$N)FUAA6.jpg
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wuhaiyou111

新虫 (初入文坛)

图片是文章中的。截图,这个科赫格子怎么实现???
2楼2013-01-02 10:32:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wuhaiyou111

新虫 (初入文坛)

Const pi = 3.14159

Private Sub Form_Click()

ScaleTop = 50
ScaleLeft = 0
ScaleWidth = 100
ScaleHeight = -50

Call koch(5, 0, 20, 20, 80, 20, 1)
End Sub

Sub koch(n As Integer, s As Integer, ax As Single, ay As Single, bx As Single, by As Single, c As Single)

Dim cx As Single
Dim cy As Single
Dim dx As Single
Dim dy As Single
Dim ex As Single
Dim ey As Single
Dim fx As Single
Dim fy As Single
Dim l As Single
Dim alpha As Single

If n = 2 Then

  Line (ax, ay)-(bx, by)
  
  Else
  
  cx = ax + (bx - ax) / 3
  cy = ay + (by - ay) / 3
  ex = bx - (bx - ax) / 3
  ey = by - (by - ay) / 3
  l = Sqr((ex - cx) * (ex - cx) + (ey - cy) * (ey - cy))
  
  If s = 0 Then

  alpha = pi / 2

  
  ElseIf s = 1 Then
  alpha = 2 * pi
  ElseIf s = -1 Then
  alpha = pi
   
  End If
  
  dy = cy + Sin(alpha) * l
  dx = cx + Cos(alpha) * l
  fx = ex + Cos(alpha) * l
  fy = ey + Sin(alpha) * l
  
  Call koch(n - 1, 0, ax, ay, cx, cy, c)
  Call koch(n - 1, 1, cx, cy, dx, dy, c)
  Call koch(n - 1, 0, dx, dy, fx, fy, c)
  Call koch(n - 1, -1, fx, fy, ex, ey, c)
  Call koch(n - 1, 0, ex, ey, bx, by, c)
  Call koch(n - 1, 2, cx, cy, ex, ey, c)
  

  
  
  
  End If
  
  
End Sub


迭代次数为一时正确,但是大于1就有问题了
3楼2013-01-04 13:24:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wuhaiyou111

新虫 (初入文坛)

所给图形是迭代次数为3的
4楼2013-01-04 13:24:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 wuhaiyou111 的主题更新
信息提示
请填处理意见