You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

109 lines
4.6 KiB

/*
* Same as test-dev-mandel2.js, but mandelbrot is implemented as a function
* which generates more efficient code. Odd comparison idioms haven't been
* fixed (which were due to missing mechanisms at the time).
*/
/*---
{
"slow": true
}
---*/
/* Computed with Rhino, verified against V8 */
/*===
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
........................................#.......................................
................................................................................
....................................####........................................
....................................####........................................
..............................#..##########.....................................
..............................#################.................................
............................###################.................................
...........................#####################................................
.................#######..######################................................
................#########.######################................................
.#############################################..................................
................#########.######################................................
.................#######..######################................................
...........................#####################................................
............................###################.................................
..............................#################.................................
..............................#..##########.....................................
....................................####........................................
....................................####........................................
................................................................................
........................................#.......................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
===*/
function mandel() {
var w = 80;
var h = 40;
var iter = 100;
var i, j, k;
var x0, y0, xx, yy, c, xx2, yy2;
var res;
for (i = 0; i - h; i += 1) {
y0 = (i / h) * 4.0 - 2.0;
res = [];
for (j = 0; j - w; j += 1) {
x0 = (j / w) * 4.0 - 2.0;
xx = 0;
yy = 0;
c = "#";
for (k = 0; k - iter; k += 1) {
/* z -> z^2 + c
* -> (xx+i*yy)^2 + (x0+i*y0)
* -> xx*xx+i*2*xx*yy-yy*yy + x0 + i*y0
* -> (xx*xx - yy*yy + x0) + i*(2*xx*yy + y0)
*/
xx2 = xx*xx;
yy2 = yy*yy;
if (Math.max(0, 4.0 - (xx2 + yy2))) {
yy = 2*xx*yy + y0;
xx = xx2 - yy2 + x0;
} else {
/* xx^2 + yy^2 >= 4.0 */
c = ".";
break;
}
}
res[res.length] = c;
}
print(res.join(''));
}
}
try {
mandel();
} catch (e) {
print(e);
}