皆様、iron2です。
mandelbortビュワーまでいけたらいいなと学習をはじめました。
複素数をつかって正直に計算すると飛んでもなく時間がかかります。
gunplotに食わせてプロットしましたがデータサイズが何十メガバイト
結構我慢でした。
無限に発散する閾値がポイントのようですが、勉強にはなりますが
電卓にそのままは無理ですね。real,imajinaleを配列に置き換え
てやればできそうですが、やるだけ無駄ですね。
すでにCBasicサンプルのやり方がモアベターであるとわかっただけでも
よかったと思います。
java をVBに落としました。
Option Explicit On
Imports System
Imports System.Math
Imports System.Numerics
Module Module1
Private Function mandelbortCount(ByVal c As Complex) As Integer
Dim z As Complex = Complex.Zero
Dim i As Integer = 0
For i = 0 To 100
z = Complex.Add(Complex.Multiply(z, z), c)
If Complex.Abs(z) > 10 Then
Exit For
End If
Next
Return i
End Function
Private Function mandelbort(ByVal c As Complex) As Boolean
Dim z As Complex = Complex.Zero
Dim i As Integer
For i = 0 To 1000
z = Complex.Add(Complex.Multiply(z, z), c)
If Complex.Abs(z) > 10 Then
Return True
End If
Next
Return False
End Function
Sub Main()
Dim diff As Double = 0.0025 'data.dat 0.005 data1.dat 0.001->55MB data2.dat 0.025->37MB
Dim i, j, m, n As Integer
Dim re, im As Double
Dim value As Double
m = CInt(3.0 / diff)
n = CInt(2.0 / diff)
're [-2:1],im[-1:1]
re = -2.0
im = -1.0
For i = 0 To m
For j = 0 To n
'data.dat & data1.dat用
'diverge = mandelbort(New Complex(re, im))
'If diverge = False Then
' Console.Write(re.ToString + vbTab + im.ToString + vbCrLf)
'End If
value = mandelbortCount(New Complex(re, im))
If value > 0 Then
Console.Write(re.ToString + vbTab + im.ToString + vbTab + value.ToString + vbCrLf)
End If
im += diff
Next
Console.Write(vbCrLf)
im = -1.0
re += diff
Next
End Sub
End Module