mujs/examples/mandelbrot.js

60 lines
1.4 KiB
JavaScript

/**
* autor: foqc
* github: foqc
*/
// noprotect
function mandelbrot(c) {
var MAX_ITERATION = 80
var z = { x: 0, y: 0 }, n = 0, p, d
do {
p = {
x: Math.pow(z.x, 2) - Math.pow(z.y, 2),
y: 2 * z.x * z.y
}
z = {
x: p.x + c.x,
y: p.y + c.y
}
d = Math.sqrt(Math.pow(z.x, 2) + Math.pow(z.y, 2))
n += 1
} while (d <= 2 && n < MAX_ITERATION)
isMandelbrotSet = d <= 2
return n
}
function draw() {
var ctx = DC.alias()
var isMandelbrotSet = false
var colors = []
for (var i = 0; i < 16; i++)
colors[i] = i === 0 ? 0 : Math.random() * 16
var WIDTH = 320
var HEIGHT = 240
var REAL_SET = { start: -2, end: 1 }
var IMAGINARY_SET = { start: -1, end: 1 }
var ox = 640 - WIDTH - 8
var oy = 480 - HEIGHT - 8
for (var i = 0; i < WIDTH; i++) {
for (var j = 0; j < HEIGHT; j++) {
complex = {
x: REAL_SET.start + (i / WIDTH) * (REAL_SET.end - REAL_SET.start),
y: IMAGINARY_SET.start + (j / HEIGHT) * (IMAGINARY_SET.end - IMAGINARY_SET.start)
}
m = mandelbrot(complex)
DC.set_color(ctx, colors[isMandelbrotSet ? 0 : (m % colors.length - 1) + 1])
Gr.plot(ctx, ox + i, oy + j)
OS.sleep(0)
}
}
}
draw()
print("Hello, TempleOS, from MuJS!")
alert("This is an alert!")