sawine@61: var QUOTES_NUMBER = 39; sawine@71: var SERVER = "http://me73.com" sawine@0: sawine@71: $(document).ready ( sawine@71: function() { sawine@71: var image = new Image(); sawine@71: image.onload = init_logo; sawine@71: image.src = "images/logobase.png"; sawine@71: } sawine@71: ); sawine@71: sawine@71: $(document).keypress ( sawine@71: function(event) { sawine@71: if (event.which == 13) { sawine@71: event.preventDefault(); sawine@71: update_logo(); sawine@71: } sawine@71: } sawine@71: ); sawine@71: sawine@71: var width = 670; sawine@71: var height = 100; sawine@71: sawine@71: function init_logo(ev) { sawine@71: var canvas = document.getElementById("logo"); sawine@71: var context = canvas.getContext("2d"); sawine@71: canvas.width = width; sawine@71: canvas.height = height; sawine@71: context.drawImage(ev.target, 0, 0); sawine@0: } sawine@0: sawine@71: function update_logo() { sawine@71: var canvas = document.getElementById("logo"); sawine@71: var context = canvas.getContext("2d"); sawine@71: var image = context.getImageData(0, 0, width, height); sawine@71: var pixels = image.data; sawine@71: var white = new Color(255, 255, 255); sawine@71: for (var y = 0; y < height; y += 1) { sawine@71: for (var x = 0; x < width; x += 1) { sawine@71: if (getPixel(image, x, y).r > 0) { sawine@71: setPixel(image, x, y, new Color(90, 215, 21)); sawine@71: } sawine@71: } sawine@71: } sawine@71: context.putImageData(image, 0, 0); sawine@0: } sawine@0: sawine@71: function Color(r, g, b, a) { sawine@71: this.r = r; sawine@71: this.g = g; sawine@71: this.b = b; sawine@71: this.a = a == undefined ? 255 : a; sawine@71: } sawine@71: Color.prototype.equals = function(rhs) { sawine@71: for (p in this) { sawine@71: if (typeof(rhs[p]) == undefined sawine@71: || this[p] != rhs[p]) { sawine@71: return false; sawine@71: } sawine@71: } sawine@71: return true; sawine@0: } sawine@0: sawine@71: function setPixel(image, x, y, color) { sawine@71: var index = 4 * (x + y * image.width); sawine@71: image.data[index] = color.r; sawine@71: image.data[index + 1] = color.g; sawine@71: image.data[index + 2] = color.b; sawine@71: image.data[index + 3] = color.a; sawine@0: } sawine@0: sawine@71: function getPixel(image, x, y) { sawine@71: var index = 4 * (x + y * image.width); sawine@71: var r = image.data[index]; sawine@71: var g = image.data[index + 1]; sawine@71: var b = image.data[index + 2]; sawine@71: var a = image.data[index + 3]; sawine@71: return new Color(r, g, b, a); sawine@0: } sawine@0: sawine@71: function load_random_quote() { sawine@71: var file = "/quotes/quote" + Math.floor(Math.random() * QUOTES_NUMBER + 1) + ".html"; sawine@71: $.ajax({url: SERVER + file, sawine@71: success: write_quote}); sawine@71: return; sawine@71: var currentFile = self.location.hostname + self.location.pathname; sawine@71: var request = http_request_object(); sawine@71: var url = "http://" + self.location.hostname + file; sawine@71: request.open("GET", url, false); sawine@71: request.setRequestHeader("User-Agent", navigator.userAgent); sawine@71: request.send(null) sawine@71: sawine@71: // if (oRequest.status == 200) alert(oRequest.responseText); sawine@71: // else alert("Error executing XMLHttpRequest call!"); sawine@71: //document.write(url); sawine@0: //document.write(request.responseText); sawine@71: document.getElementById('random_quote').innerHTML = request.responseText; sawine@0: } sawine@0: sawine@71: function write_quote(data, status, xhr) { sawine@71: alert(data); sawine@71: $("random_quote").replaceWith(data); sawine@0: } sawine@0: sawine@0: function load_footer() sawine@0: { sawine@0: var file = "/footer.html"; sawine@0: var currentFile = self.location.hostname + self.location.pathname; sawine@0: var request = http_request_object(); sawine@0: var url = "http://" + self.location.hostname + file; sawine@0: request.open("GET", url, false); sawine@0: request.setRequestHeader("User-Agent", navigator.userAgent); sawine@0: request.send(null) sawine@0: // if (oRequest.status == 200) alert(oRequest.responseText); sawine@0: // else alert("Error executing XMLHttpRequest call!"); sawine@0: //document.write(url); sawine@0: //document.write(request.responseText); sawine@0: document.getElementById('footer').innerHTML = request.responseText; sawine@0: } sawine@7: sawine@20: sawine@20: sawine@7: // Mandelbrot functions sawine@7: function Complex(real, imag) sawine@7: { sawine@7: this.real = real; sawine@7: this.imag = imag; sawine@7: } sawine@7: sawine@7: var MIN_C = new Complex(-2.2, -1.4); sawine@7: var MAX_C = new Complex(1.0, 1.4); sawine@7: var min_c = MIN_C; sawine@7: var max_c = MAX_C; sawine@20: var MIN_ITER = 100; sawine@20: var max_iter = MIN_ITER; sawine@10: var zoom = 1.0; sawine@17: var resolution = 3; sawine@17: var bailout = 4.0; sawine@7: sawine@7: function Result(z, iter) sawine@7: { sawine@7: this.z = z; sawine@7: this.iter = iter; sawine@7: } sawine@7: sawine@7: function complex_quad(c) sawine@7: { sawine@7: return new Complex(Math.pow(c.real, 2) - Math.pow(c.imag, 2), sawine@7: 2.0 * c.real * c.imag); sawine@7: } sawine@7: sawine@7: function complex_quad_value(c) sawine@7: { sawine@7: return Math.pow(c.real, 2) + Math.pow(c.imag, 2); sawine@7: } sawine@7: sawine@7: function complex_add(c1, c2) sawine@7: { sawine@7: return new Complex(c1.real + c2.real, c1.imag + c2.imag); sawine@7: } sawine@7: sawine@17: function complex_equal(c1, c2) sawine@17: { sawine@17: return (c1.real == c2.real) && (c1.imag == c2.imag); sawine@17: } sawine@17: sawine@7: function iterate(z, c) sawine@7: { sawine@7: z_quad = complex_quad(z); sawine@7: return new Complex(z_quad.real + c.real, z_quad.imag + c.imag); sawine@7: } sawine@7: sawine@7: function test(c, max_iter) sawine@7: { sawine@7: var iter = 0; sawine@7: var z = new Complex(0.0, 0.0); sawine@17: var last_z = new Complex(-1.0, 0.0); sawine@17: var quad_z = complex_quad_value(z); sawine@17: sawine@17: while (iter < max_iter sawine@17: && !complex_equal(z, last_z) sawine@17: && quad_z <= bailout) sawine@7: { sawine@17: last_z = z; sawine@7: z = iterate(z, c); sawine@17: quad_z = complex_quad_value(z); sawine@7: iter++; sawine@7: } sawine@17: return new Result(quad_z, iter); sawine@7: } sawine@7: sawine@20: function draw(diter, dx, dy, dz, dres) sawine@7: { sawine@17: var canvas = document.getElementById('mandelbrot'); sawine@17: sawine@7: if (canvas.getContext) sawine@7: { sawine@17: zoom += dz; sawine@12: var ctx = canvas.getContext('2d'); sawine@17: sawine@17: if (dres != 0) sawine@17: { sawine@17: resolution = Math.max(1, resolution + dres); sawine@17: } sawine@20: sawine@20: if (diter != 0) sawine@20: { sawine@20: max_iter = Math.max(MIN_ITER, max_iter + diter); sawine@20: } sawine@17: sawine@20: var red = "rgb(255, 0, 0)"; sawine@20: var white = "rgb(255, 255, 255)"; sawine@17: var width = canvas.width; sawine@17: var height = canvas.height; sawine@17: var dim = Math.max(width, height); sawine@17: var dim_ratio = Math.round(width / height); sawine@17: var diff_c = new Complex(max_c.real - min_c.real, sawine@17: max_c.imag - min_c.imag); sawine@17: dx_min = diff_c.real / 100 * (dx + dz); sawine@17: dx_max = diff_c.real / 100 * (dx - dz); sawine@17: sawine@17: dy_min = diff_c.imag / 100 * (dy + dz); sawine@17: dy_max = diff_c.imag / 100 * (dy - dz); sawine@17: sawine@17: var min_inc = new Complex(dx_min * dim_ratio / 2.0, dy_min); sawine@17: var max_inc = new Complex(dx_max * dim_ratio / 2.0, dy_max); sawine@7: min_c = complex_add(min_c, min_inc); sawine@7: max_c = complex_add(max_c, max_inc); sawine@17: diff_c = new Complex(max_c.real - min_c.real, sawine@7: max_c.imag - min_c.imag); sawine@7: sawine@22: for (var y = 0; y < height; y += resolution) sawine@7: { sawine@17: for (var x = 0; x < width; x += resolution) sawine@17: { sawine@17: var c = new Complex(min_c.real + diff_c.real / dim * x, sawine@17: min_c.imag + diff_c.imag / dim * y); sawine@17: var result = test(c, max_iter); sawine@17: var r = Math.min(255, Math.pow(Math.max(0, sawine@17: (result.iter - max_iter / 20.0)), 2)); sawine@17: var g = Math.min(255, Math.pow(Math.max(0, sawine@17: (result.iter - max_iter / 25.0)), 2)); sawine@17: var b = Math.min(255, Math.pow(Math.max(0, sawine@17: (result.iter - max_iter / 20.0)), 2)); sawine@25: var colour = "rgb(" + r + "," + g + "," + b + ")"; sawine@25: ctx.fillStyle = colour; sawine@20: ctx.fillRect(x, y, resolution, resolution); sawine@7: } sawine@7: } sawine@7: } sawine@30: } sawine@30: sawine@30: function getEventOffsetX(evt) sawine@30: { sawine@30: if (evt.offsetX != null) sawine@30: return evt.offsetX; sawine@30: sawine@30: var obj = evt.target || evt.srcElement; sawine@30: setPageTopLeft(obj); sawine@30: return (evt.clientX - obj.pageLeft); sawine@30: } sawine@30: sawine@30: function getEventOffsetY(evt) sawine@30: { sawine@30: if (evt.offsetY != null) sawine@30: return evt.offsetY; sawine@30: sawine@30: var obj = evt.target || evt.srcElement; sawine@30: setPageTopLeft(obj); sawine@30: return (evt.clientY - obj.pageTop); sawine@30: } sawine@30: sawine@30: function setPageTopLeft( o ) sawine@30: { sawine@30: var top = 0, sawine@30: left = 0, sawine@30: obj = o; sawine@30: sawine@30: while (o.offsetParent) sawine@30: { sawine@30: left += o.offsetLeft ; sawine@30: top += o.offsetTop ; sawine@30: o = o.offsetParent ; sawine@30: }; sawine@30: sawine@30: obj.pageTop = top; sawine@30: obj.pageLeft = left; sawine@30: } sawine@30: sawine@30: function draw2(evt) sawine@30: { sawine@30: var iter = 0; sawine@30: var res = 0; sawine@30: var x = (getEventOffsetX(evt) - 335) / 167.5; sawine@30: var y = (getEventOffsetY(evt) - 140) / 70; sawine@30: var z = 0; sawine@30: draw(iter, x, y, z, res); sawine@71: } sawine@71: sawine@71: