60 lines
1.4 KiB
JavaScript
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!")
|