mirror of https://github.com/svaarala/duktape.git
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
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);
|
|
}
|
|
|