« やよい軒で木須肉と鶏チリの定食を食す。 | トップページ | すき家でアボカドユッケサーモン丼(ご飯大盛)を食す。案外合ってる。 »

2021年8月24日 (火)

アスキーアート(数字と英小文字だけ)でマンデルブロ集合を描くとなぜか黒しか使ってないのに色が見える! (Excel VBAで計算)

このTweetみた。

 

 

おお、これは昔、ラインプリンタでマンデルブロ集合(そのときは”*”のみ)を描いたのの拡張だな、、、

ということで早速やってみた。Pythonでもなんでもいいが、Excelをたまたま立ち上げていたのでExcel VBAで描いてみよう。

ソースはこちら。

Option Explicit
Option Base 0
 
Private Sub CommandButton1_Click()
    Dim ix As Integer, iy As Integer, count As Integer, i As Integer
    Dim size As Integer, limit As Integer
    Dim letters(100) As String
    Dim cx As Double, cy As Double
    Dim x As Double, y As Double, x1 As Double, y1 As Double
    Dim s As String
        
    Application.ScreenUpdating = False '画面描画を停止
    Application.Cursor = xlWait 'ウエイトカーソル
    Application.EnableEvents = False 'イベントを抑止
    Application.DisplayAlerts = False '確認メッセージを抑止
    Application.Calculation = xlCalculationManual '計算を手動に
    
    size = 400
    limit = 1000
    
    letters(0) = " "
    For i = 1 To 9
        letters(i) = Chr(48 + i)
    Next i
    For i = 10 To 10 + 26 - 1
        letters(i) = Chr(87 + i)
    Next i
    letters(36) = "*"
    
    For iy = 0 To size
        s = ""
        For ix = 0 To 3 * size
            count = 0
            cx = -2 + CDbl(ix) * 3.5 / CDbl(3 * size)
            cy = 1.5 - CDbl(iy) * 3 / CDbl(size)
            x = 0#
            y = 0#
            Do While (x * x + y * y) < 4 And count < limit
                x1 = x
                y1 = y
                x = x1 ^ 2 - y1 ^ 2 + cx
                y = 2# * x1 * y1 + cy
                count = count + 1
            Loop
            
            If count >= limit Then
                s = s + letters(0)
            Else
                If count >= 36 Then
                    s = s + letters(36)
                Else
                    s = s + letters(count)
                End If
            End If
        Next ix
        Worksheets("mandel").Cells(iy + 1, 1) = s
    Next iy
 
    
    Application.StatusBar = False 'ステータスバーを消す
    Application.Calculation = xlCalculationAutomatic '計算を自動に
    Application.DisplayAlerts = True '確認メッセージを開始
    Application.EnableEvents = True 'イベントを開始
    Application.Cursor = xlDefault '標準カーソル
    Application.ScreenUpdating = True '画面描画を開始
    
End Sub

やってみると?

確かに文字しかないのに、、、

Mandel_ascii02

あれ!色が見える!私だけ?

Mandel_ascii01

不思議!心理的な効果なのか、ディスプレイの色のにじみ的なものなのか、、、知ってる方がいたら教えてください。

« やよい軒で木須肉と鶏チリの定食を食す。 | トップページ | すき家でアボカドユッケサーモン丼(ご飯大盛)を食す。案外合ってる。 »

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« やよい軒で木須肉と鶏チリの定食を食す。 | トップページ | すき家でアボカドユッケサーモン丼(ご飯大盛)を食す。案外合ってる。 »

最近の記事

最近のコメント

2024年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
フォト
無料ブログはココログ