数学者のマンデルブロー氏が今月の14日に亡くなったそうです。

 時事ドットコム:数学者マンデルブロー氏死去

 追悼ということで、マンデルブロ集合をプロットしてみました。
マンデルブロ集合


 上のは拙作「lua for aviutl」で作成しました。ソースは下の通り。
-- 【マンデルブロー集合】

function func_proc()
    local ycp_edit = aviutl.get_ycp_edit() -- 現在の編集画像領域取得
    local w, h = aviutl.get_size() -- 現在のサイズ取得

    -- 設定項目
    local ar = -0.75 -- 描画座標(実数部)
    local ai =  0.0 -- 描画座標(虚数部)
    local al = 2.5 -- 大きさ
    local loop_max = 64 -- ループの上限

    -- 計算数を減らすための事前計算
    local dcol = 4096.0 / loop_max -- 色の階調幅
    local range = w
    if h > w then range = h end
    range = al / range -- 1ドットあたりの差分

    for y = 0, h do
        local ci = ai + range * (y - h/2) -- 虚数部
        for x = 0, w do
            local cr = ar + range * (x - w/2) -- 実数部
            local zr, zi, i = cr, ci, 0
            while i < loop_max and zr*zr + zi*zi <= 4 do
                zr, zi = zr*zr - zi*zi + cr, 2 * zr * zi + ci
                i = i + 1
            end
            aviutl.set_pixel( ycp_edit, x, y, 4096 - i * dcol, 0, 0 )
        end
    end
end

-- スクリプト終了時に呼ばれる関数
function func_exit()
end

 せっかくAviUtlでプロットしているので、動画にもしてみました。
 ただ、luaでは処理に時間がかかりすぎるため、C言語で作成したプラグインでプロットしてます。



 doubleの精度ではこれが限界です。
 小技として1920x1440で作成して640x480に縮小することでアンチエイリアスの効果を出してます。1920x1440と大きいため、38秒の動画作成に30分以上かかりました。
 BGMは魔王魂さんの音楽素材を使わせていただきました。