手提鞄あたっしゅ(TESAGEKABAN Atassyu)'s

Mandelbrot Set

マンデルブロ集合

日付
2015(H27)-01-14 WebGL でマンデルブロ集合とジュリア集合(ja)
2013(H25)-09-28 Gimp で IFS フラクタル
2013(H25)-07-30 Apophysis スクリプト...

2D のマンデルブロ集合の計算

計算機数学では、「初期化」と「代入」は区別される。

const real_t a = x;
const real_t b = y;
int n=0;

while( ( n < 0xFF )&&( x*x+y*y < 4 ) ) {
    real_t xx = x*x - y*y + a;

    y = 2*x*y + b;
    x = xx;
    n++;
}

return n;
Zn3+z0 の場合

    while( ( n < 360*3 )&&( x*x+y*y < 4.0f ) ) {
        real_t xx = x*x*x - 3*x*y*y + x0;

        y = 3*x*x*y -y*y*y + y0;
        x = xx;
        n++;
    }
Zn3+z0 の改良版

    real_t x2 = x*x;
    real_t y2 = y*y;

    while( ( n < 360*3 )&&( x2+y2 < 4.0f ) ) {
        const real_t xx = x*( x2 - 3*y2 )+x0;

        y = y*( 3*x2 -y2 )+y0;
        x = xx;
        n++;

        x2 = x*x;
        y2 = y*y; 
    }
2D のマンデルブロ集合 Gallery
  • マンデルブロ集合 - Wkipedia(ja)
  • A.K.デュードニー 著 山崎秀記 監訳、 別冊サイエンス コンピューターレクリエーションII 遊びの探索、 日経サイエンス社

調べたら、 Vector に、フラクタル/マンデルブロ集合を描くプログラム(ja)、いっぱいあった。 けっこう、アセンブラで書かれているものも多い。

GLSL(OpenGL 系)

4K Procedural Gfx Monitor(ja) を使用した GLSL 版

キャストの仕方が違う(ja)

// FragmentProgram
#extension GL_EXT_gpu_shader4: enable

varying vec4 p;

void main()
{
    int   MOD  = 360;
    float MODF = 360.0;
    float DIVF = 64.0;
    int   n = 0;

    float x0 = p.x/DIVF - 1.5;
    float y0 = p.y/DIVF;
    float x  = x0;
    float y  = y0;
    float x2 = x*x;
    float y2 = y*y;

    while( ( n<MOD*3 )&&( x2+y2 < 4.0 ) ) {
        float xx = x2 - y2 + x0;

        y = 2.0*x*y + y0;
        x = xx;
        n++;

        x2 = x*x;
        y2 = y*y;
    }

    // 色を出力
    int nn = n % MOD;
    switch( n/MOD ) {
    case 0:
        gl_FragColor = vec4( float(nn)/MODF, 0, 0, 0 );
        break;
    case 1:
        gl_FragColor = vec4( 0, float(nn)/MODF, 0, 0 );
        break;
    case 2:
        gl_FragColor = vec4( 0, 0, float(nn)/MODF, 0 );
        break;
    }
    return;
}


// end.

.NET での実装

  1. .NETでマンデルブロ集合を描く - リアルタイム描画のシンプルなサンプル(ja)
  2. .NETでマンデルブロ集合を描く(後日談) - Task Parallel Library/Parallel Patterns Libraryの利用(ja)
  3. .NETでマンデルブロ集合を描く(番外編) - OpenCLで超並列コンピューティング(ja)

2D のフラクタル

GIMP にも 「フィルタ(R)/下塗り(R)/フラクタル・エクスプローラ(Fractal Chaos Explorer)(F)」 ってあるよね。
「フィルタ(R)/下塗り(R)/ネイチャー(N)/IFS フラクタル(I)」ってのもある。

Inkscape にも 「Effects/ModifyPath/Fractal(Koch)」とかあるけど、こっちはなんだかわからなかった。

Date