Essen Rev2 (ess03f)

これはなに?

mandel対決

対決

自分でも実験したいという人のためのダウンロード

参考:ソースコード for gcc

#include "bla.h"
#include <stdio.h>
#include <time.h>

#define MAX 447
#define STEP (7.0 / 0x100000)
#define DN 4

int main()
{
    int x, y, n, sx, sy, sn, c;
    double zx, zy, cx, cy, xx, yy, tx, ty;
    bla_Window *w = bla_openWin(1024, 768, "mandel");
    for (y = 0; y < 768; y++) {
        for (x = 0; x < 1024; x++) {
            sn = 0;
            for (sx = 0; sx < DN; sx++) {
                cx = (double) 0x4750 / 0x10000 + (x * DN + sx) * (STEP / DN);
                for (sy = 0; sy < DN; sy++) {
                    cy = (double) -0x1e8 / 0x10000 - (y * DN + sy) * (STEP / DN);
                    zx = zy = 0;
                    for (n = 0; n < MAX; n++) {
                        yy = zy * zy;
                        xx = zx * zx;
                        tx = xx - yy;
                        ty = zx * zy;
                        ty *= 2.0;
                        zy = ty + cy;
                        zx = tx + cx;
                        xx += yy;
                        if (xx > 4.0) break;
                    }
                    sn += n;
                }
            }
            n = sn / (DN * DN);
            c = 0;
            if (n < 256)
                c = bla_rgb(n, 0, 0);
            else if (n < MAX)
                c = bla_rgb(255, n - 255, 0);
            bla_setPix(w, x, y, c);
        }
        bla_leapFlushAll(w, 300); // これを書かないと途中経過が画面に反映されない.
    }
    printf("time=%d\n", clock());
    bla_wait(-1); // ウィンドウが閉じられるまで待つ.
}

参考:ソースコード for ess03f

MAX :== 447
STEP :== 7.0 / 1048576.0
DN :== 4

zx :== $f00  zy :== $f01  xx :== $f02  yy :== $f03  tx :== $f04  ty :== $f05

openWin(1024 768)

y = 0  do {
    x = 0  do {
        sn = 0
        sx = 0  do {
            cx = 18256.0 / 65536.0 + double(x * DN + sx) * (STEP / double(DN))
            sy = 0  do {
                cy = -488.0 / 65536.0 - double(y * DN + sy) * (STEP / double(DN))
                zx = zy = 0.0
                n = 0  do {
                    yy = zy * zy
                    xx = zx * zx
                    tx = xx - yy
                    ty = zx * zy
                    ty *= 2.0
                    zy = ty + cy
                    zx = tx + cx
                    xx += yy
                    if (xx > 4.0) break
                n++  } while (n < MAX)
                sn += n
            sy++  } while (sy < DN)
        sx++  } while (sx < DN)
        n = sn / (DN * DN)
        c = 0
        if (n < 256) {
            c = rgb(n 0 0)
        }
        if (n >= 256) {
            if (n < MAX) {
                c = rgb(255 n - 255 0)
            }
        }
        setPix(x y c)
    x++  } while (x < 1024)
    leapFlushAll(300)
y++ } while (y < 768)
//leapflushAll(0)

こめんと欄


コメントお名前NameLink

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS