Mandelbrotova množina
Mandelbrotova množina v JavaScriptu od Drahomíra Hanáka
by drahos
HTML
<canvas id="platno" width="450" height="450"></canvas>
CSS
#platno { background: #000; }
JavaScript
(function( $ ) {
window.MandelbrotovaMnozina = function() {
// Soukromé proměnné
var platno = this.platno = $('#platno').get(0);
var kontext = platno.getContext('2d');
var width = platno.width,
height = platno.height;
// Vytvoříme si objekt imageData, kde budou data o jednotlivých pixelech
this.imageData = kontext.createImageData(width, height);
this.maxinter = 20;
// Funkce nastaví barvu pro daný pixel
this.nastavPixel = function(x, y, r, g, b, a) {
var index = (x + y * this.imageData.width) * 4;
// Hodnota červené bervy
this.imageData.data[index+0] = r;
// Hodnota zelené barvy
this.imageData.data[index+1] = g;
// Hodnota modré barvy
this.imageData.data[index+2] = b;
// Alfa kanál (průhlednost)
this.imageData.data[index+3] = a;
};
// Funkce vykreslí Mandelbrotovu množinu
this.vykresli = function( xCenter, yCenter, zoom ) {
// Uloží zoom
$(platno).data('zoom', zoom);
// Vytvoří nová image data
this.imageData = kontext.createImageData(width, height);
// Potřebné proměnné
var count, zr, zi, zr2, zi2;
var zoom = zoom > 1 ? zoom*3 : zoom;
var minY = yCenter - (1.5/(zoom));
var maxY = yCenter + (1.5/(zoom));
var minX = xCenter - (1.5/(zoom));
var maxX = xCenter + (1.5/(zoom));
var dx = (maxX - minX) / width;
var dy = (maxY - minY) / height;
var rX = 0, rY = 0;
// Projdeme všechny pixely na plátně
for(var y = minY; y < maxY; y += dy) {
rY++;
var rX = 0;
for (var x = minX; x < maxX && rX < width; x += dx) {
rX++;
...