Initial version of 2012 menu.
1.1 --- a/dark.css Sat Dec 17 19:20:30 2011 +0100
1.2 +++ b/dark.css Sun Dec 18 03:36:00 2011 +0100
1.3 @@ -96,19 +96,19 @@
1.4 margin: 5px 10px 5px 0px;
1.5 }
1.6
1.7 -canvas {
1.8 +canvas {
1.9 border: 4px solid #262626;
1.10 }
1.11
1.12 #logo {
1.13 border-style: none;
1.14 - position: absolute;
1.15 + position: relative;
1.16 margin: 0;
1.17 padding: 0;
1.18 color: #F8F8F8;
1.19 /* change the values of top and left to adjust the position of the logo*/
1.20 - top: 60px; left: 20px;
1.21 - height: 100px;
1.22 + top: 40px; left: 25px;
1.23 + height: 120px;
1.24 width: 670px;
1.25 }
1.26
1.27 @@ -207,7 +207,8 @@
1.28 /* ------------------------------------------
1.29 LAYOUT
1.30 ------------------------------------------- */
1.31 -#wrap {
1.32 +#wrap {
1.33 + position: relative;
1.34 width: 1020px;
1.35 margin: 0 auto;
1.36 text-align: left;
2.1 --- a/factory/makefile Sat Dec 17 19:20:30 2011 +0100
2.2 +++ b/factory/makefile Sun Dec 18 03:36:00 2011 +0100
2.3 @@ -1,8 +1,10 @@
2.4 OUTPUT =
2.5 FACTORY =
2.6 -FRAME = v2012/frame.html
2.7 -PAGES = v2012/*.html
2.8 +VERSION = v2012
2.9 +FRAME = $(VERSION)/frame.html
2.10 +PAGES = $(VERSION)/*.html
2.11
2.12 compile:
2.13 ./create_page -a $(FRAME)
2.14 + java -jar yuicompressor.jar $(VERSION)/script.js -o ../script.js --charset utf-8
2.15
3.1 Binary file factory/raw_images/logobase.xcf has changed
4.1 --- a/factory/v2012/frame.html Sat Dec 17 19:20:30 2011 +0100
4.2 +++ b/factory/v2012/frame.html Sun Dec 18 03:36:00 2011 +0100
4.3 @@ -1,7 +1,7 @@
4.4 <!DOCTYPE html>
4.5 <html lang="en">
4.6 <head>
4.7 - <title>Machine Entity 73</title>
4.8 + <title>ME73</title>
4.9 <meta name="author" content="Eugen Sawin <sawine@me73.com>" />
4.10 <meta name="description" content="A Digital Playground" />
4.11 <meta name="robots" content="index, follow, noarchive" />
4.12 @@ -26,20 +26,10 @@
4.13 <body>
4.14 <div id="wrap">
4.15 <div id="header">
4.16 - <canvas id="logo" width="670" height="100">
4.17 + <canvas id="logo">
4.18 FIND A BETTER BROWSER
4.19 </canvas>
4.20 - <div id="nav">
4.21 - <ul>
4.22 - <li><a href="index.html">Home</a></li>
4.23 - <li><a href="personalwork.html">Personal Work</a></li>
4.24 - <li><a href="resume.html">Resume</a></li>
4.25 - <li><a href="howiwork.html">How I Work</a></li>
4.26 - <li><a href="experiments.html">Experiments</a></li>
4.27 - <li><a href="books.html">Books</a></li>
4.28 - <li><a href="links.html">Links</a></li>
4.29 - </ul>
4.30 - </div>
4.31 +
4.32 </div>
4.33 <div id="content-wrap">
4.34 <div id="main">
4.35 @@ -48,7 +38,9 @@
4.36 <div id="sidebar">
4.37 <p>
4.38 <img src="images/me2.png" alt="me" class="float-left" height="70" width="70" />
4.39 - <br />I'm a programmer, a student of computer science, a music enthusiast.
4.40 + <br />I'm a programmer,<br />
4.41 + a student of computer science,<br />
4.42 + a music enthusiast.<br />
4.43 This is my site.
4.44 </p>
4.45 <div id="random_quote"></div>
5.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
5.2 +++ b/factory/v2012/script.js Sun Dec 18 03:36:00 2011 +0100
5.3 @@ -0,0 +1,382 @@
5.4 +var QUOTES_NUMBER = 39;
5.5 +var SERVER = "http://me73.com"
5.6 +
5.7 +$(document).ready(function() {
5.8 + var image = new Image();
5.9 + image.onload = init_logo;
5.10 + image.src = "images/logobase.png";
5.11 + $("#logo").click(handle_click);
5.12 + $("#logo").hover(function() {
5.13 + $(this).css("cursor", "pointer");
5.14 + }, function() {
5.15 + $(this).css("cursor", "auto");
5.16 + });
5.17 +});
5.18 +
5.19 +$(document).keypress( function(event) {
5.20 + if (event.which == 13) {
5.21 + event.preventDefault();
5.22 + update_logo();
5.23 + }
5.24 +});
5.25 +
5.26 +var menu_width = 670;
5.27 +var menu_height = 120;
5.28 +
5.29 +var click_events = new Array();
5.30 +click_events["logo"] = new Array();
5.31 +click_events["logo"][0] = new Object();
5.32 +click_events["logo"][0]["min_x"] = 0;
5.33 +click_events["logo"][0]["max_x"] = Math.round(menu_width/4);
5.34 +click_events["logo"][0]["min_y"] = 0;
5.35 +click_events["logo"][0]["max_y"] = menu_height;
5.36 +click_events["logo"][0]["func"] = switch_page;
5.37 +click_events["logo"][0]["args"] = "personalwork.html";
5.38 +click_events["logo"][1] = new Object();
5.39 +click_events["logo"][1]["min_x"] = Math.round(menu_width/4) + 1;
5.40 +click_events["logo"][1]["max_x"] = Math.round(menu_width/2);
5.41 +click_events["logo"][1]["min_y"] = 0;
5.42 +click_events["logo"][1]["max_y"] = menu_height;
5.43 +click_events["logo"][1]["func"] = switch_page;
5.44 +click_events["logo"][1]["args"] = "howiwork.html";
5.45 +click_events["logo"][2] = new Object();
5.46 +click_events["logo"][2]["min_x"] = Math.round(menu_width/2) + 1;
5.47 +click_events["logo"][2]["max_x"] = Math.round(menu_width/4*3);
5.48 +click_events["logo"][2]["min_y"] = 0;
5.49 +click_events["logo"][2]["max_y"] = menu_height;
5.50 +click_events["logo"][2]["func"] = switch_page;
5.51 +click_events["logo"][2]["args"] = "books.html";
5.52 +click_events["logo"][3] = new Object();
5.53 +click_events["logo"][3]["min_x"] = Math.round(menu_width/4*3) + 1;
5.54 +click_events["logo"][3]["max_x"] = menu_width - 1;
5.55 +click_events["logo"][3]["min_y"] = 0;
5.56 +click_events["logo"][3]["max_y"] = menu_height;
5.57 +click_events["logo"][3]["func"] = switch_page;
5.58 +click_events["logo"][3]["args"] = "links.html";
5.59 +
5.60 +function handle_click(e) {
5.61 + var offset = $("#logo").offset();
5.62 + var x = e.pageX - offset.left;
5.63 + var y = e.pageY - offset.top;
5.64 + for (var i in click_events[e.target.id]) {
5.65 + var ces = click_events[e.target.id][i];
5.66 + if (ces && x >= ces["min_x"] && x <= ces["max_x"]
5.67 + && y >= ces["min_y"] && y <= ces["max_y"]) {
5.68 + ces["func"](e.target.id, ces);
5.69 + break;
5.70 + }
5.71 + }
5.72 +}
5.73 +
5.74 +function switch_page(id, params) {
5.75 + var page = params["args"];
5.76 + $("body").load(page);
5.77 + document.location.href = page;
5.78 +}
5.79 +
5.80 +function color_area(id, min_x, max_x, min_y, max_y, colour) {
5.81 + var canvas = document.getElementById(id);
5.82 + var context = canvas.getContext("2d");
5.83 + var image = context.getImageData(0, 0, menu_width, menu_height);
5.84 + var pixels = image.data;
5.85 + for (var y = min_y; y <= max_y; y += 1) {
5.86 + for (var x = min_x; x <= max_x; x += 1) {
5.87 + var pix_colour = getPixel(image, x, y);
5.88 + if (pix_colour.a > 0) {
5.89 + colour.a = pix_colour.a;
5.90 + setPixel(image, x, y, colour);
5.91 + }
5.92 + }
5.93 + }
5.94 + context.putImageData(image, 0, 0);
5.95 +}
5.96 +
5.97 +function init_logo(event) {
5.98 + var canvas = document.getElementById("logo");
5.99 + var context = canvas.getContext("2d");
5.100 + var image = context.getImageData(0, 0, menu_width, menu_height);
5.101 + canvas.width = menu_width;
5.102 + canvas.height = menu_height;
5.103 + context.drawImage(event.target, 0, 0);
5.104 + var white = new Colour(255, 255, 255);
5.105 + for (var i in click_events["logo"]) {
5.106 + var p = click_events["logo"][i];
5.107 + var pos = document.location.href.lastIndexOf("/") + 1;
5.108 + if (p["args"] == document.location.href.substr(pos)) {
5.109 + color_area("logo", p["min_x"], p["max_x"], 70, p["max_y"], white);
5.110 + } else {
5.111 + color_area("logo", p["min_x"], p["max_x"], 0, 70, white);
5.112 + }
5.113 + }
5.114 +}
5.115 +
5.116 +function update_logo() {
5.117 + var canvas = document.getElementById("logo");
5.118 + var context = canvas.getContext("2d");
5.119 + var image = context.getImageData(0, 0, menu_width, menu_height);
5.120 + var pixels = image.data;
5.121 + var white = new Colour(255, 255, 255);
5.122 + for (var y = 0; y < menu_height; y += 1) {
5.123 + for (var x = 0; x < menu_width; x += 1) {
5.124 + var pix_colour = getPixel(image, x, y);
5.125 + if (pix_colour.a > 0) {
5.126 + setPixel(image, x, y, new Colour(90, 215, 21, pix_colour.a));
5.127 + }
5.128 + }
5.129 + }
5.130 + context.putImageData(image, 0, 0);
5.131 +}
5.132 +
5.133 +function Colour(r, g, b, a) {
5.134 + this.r = r;
5.135 + this.g = g;
5.136 + this.b = b;
5.137 + this.a = a == undefined ? 255 : a;
5.138 +}
5.139 +Colour.prototype.equals = function(rhs) {
5.140 + for (p in this) {
5.141 + if (typeof(rhs[p]) == undefined
5.142 + || this[p] != rhs[p]) {
5.143 + return false;
5.144 + }
5.145 + }
5.146 + return true;
5.147 +}
5.148 +
5.149 +function setPixel(image, x, y, color) {
5.150 + var index = 4 * (x + y * image.width);
5.151 + image.data[index] = color.r;
5.152 + image.data[index + 1] = color.g;
5.153 + image.data[index + 2] = color.b;
5.154 + image.data[index + 3] = color.a;
5.155 +}
5.156 +
5.157 +function getPixel(image, x, y) {
5.158 + var index = 4 * (x + y * image.width);
5.159 + var r = image.data[index];
5.160 + var g = image.data[index + 1];
5.161 + var b = image.data[index + 2];
5.162 + var a = image.data[index + 3];
5.163 + return new Colour(r, g, b, a);
5.164 +}
5.165 +
5.166 +function load_random_quote() {
5.167 + var file = "/quotes/quote" + Math.floor(Math.random() * QUOTES_NUMBER + 1) + ".html";
5.168 + $.ajax({url: SERVER + file,
5.169 + success: write_quote});
5.170 + return;
5.171 + var currentFile = self.location.hostname + self.location.pathname;
5.172 + var request = http_request_object();
5.173 + var url = "http://" + self.location.hostname + file;
5.174 + request.open("GET", url, false);
5.175 + request.setRequestHeader("User-Agent", navigator.userAgent);
5.176 + request.send(null)
5.177 +
5.178 + // if (oRequest.status == 200) alert(oRequest.responseText);
5.179 + // else alert("Error executing XMLHttpRequest call!");
5.180 + //document.write(url);
5.181 + //document.write(request.responseText);
5.182 + document.getElementById('random_quote').innerHTML = request.responseText;
5.183 +}
5.184 +
5.185 +function write_quote(data, status, xhr) {
5.186 + alert(data);
5.187 + $("random_quote").replaceWith(data);
5.188 +}
5.189 +
5.190 +function load_footer()
5.191 +{
5.192 + var file = "/footer.html";
5.193 + var currentFile = self.location.hostname + self.location.pathname;
5.194 + var request = http_request_object();
5.195 + var url = "http://" + self.location.hostname + file;
5.196 + request.open("GET", url, false);
5.197 + request.setRequestHeader("User-Agent", navigator.userAgent);
5.198 + request.send(null)
5.199 + // if (oRequest.status == 200) alert(oRequest.responseText);
5.200 + // else alert("Error executing XMLHttpRequest call!");
5.201 + //document.write(url);
5.202 + //document.write(request.responseText);
5.203 + document.getElementById('footer').innerHTML = request.responseText;
5.204 +}
5.205 +
5.206 +
5.207 +
5.208 +// Mandelbrot functions
5.209 +function Complex(real, imag)
5.210 +{
5.211 + this.real = real;
5.212 + this.imag = imag;
5.213 +}
5.214 +
5.215 +var MIN_C = new Complex(-2.2, -1.4);
5.216 +var MAX_C = new Complex(1.0, 1.4);
5.217 +var min_c = MIN_C;
5.218 +var max_c = MAX_C;
5.219 +var MIN_ITER = 100;
5.220 +var max_iter = MIN_ITER;
5.221 +var zoom = 1.0;
5.222 +var resolution = 3;
5.223 +var bailout = 4.0;
5.224 +
5.225 +function Result(z, iter)
5.226 +{
5.227 + this.z = z;
5.228 + this.iter = iter;
5.229 +}
5.230 +
5.231 +function complex_quad(c)
5.232 +{
5.233 + return new Complex(Math.pow(c.real, 2) - Math.pow(c.imag, 2),
5.234 + 2.0 * c.real * c.imag);
5.235 +}
5.236 +
5.237 +function complex_quad_value(c)
5.238 +{
5.239 + return Math.pow(c.real, 2) + Math.pow(c.imag, 2);
5.240 +}
5.241 +
5.242 +function complex_add(c1, c2)
5.243 +{
5.244 + return new Complex(c1.real + c2.real, c1.imag + c2.imag);
5.245 +}
5.246 +
5.247 +function complex_equal(c1, c2)
5.248 +{
5.249 + return (c1.real == c2.real) && (c1.imag == c2.imag);
5.250 +}
5.251 +
5.252 +function iterate(z, c)
5.253 +{
5.254 + z_quad = complex_quad(z);
5.255 + return new Complex(z_quad.real + c.real, z_quad.imag + c.imag);
5.256 +}
5.257 +
5.258 +function test(c, max_iter)
5.259 +{
5.260 + var iter = 0;
5.261 + var z = new Complex(0.0, 0.0);
5.262 + var last_z = new Complex(-1.0, 0.0);
5.263 + var quad_z = complex_quad_value(z);
5.264 +
5.265 + while (iter < max_iter
5.266 + && !complex_equal(z, last_z)
5.267 + && quad_z <= bailout)
5.268 + {
5.269 + last_z = z;
5.270 + z = iterate(z, c);
5.271 + quad_z = complex_quad_value(z);
5.272 + iter++;
5.273 + }
5.274 + return new Result(quad_z, iter);
5.275 +}
5.276 +
5.277 +function draw(diter, dx, dy, dz, dres)
5.278 +{
5.279 + var canvas = document.getElementById('mandelbrot');
5.280 +
5.281 + if (canvas.getContext)
5.282 + {
5.283 + zoom += dz;
5.284 + var ctx = canvas.getContext('2d');
5.285 +
5.286 + if (dres != 0)
5.287 + {
5.288 + resolution = Math.max(1, resolution + dres);
5.289 + }
5.290 +
5.291 + if (diter != 0)
5.292 + {
5.293 + max_iter = Math.max(MIN_ITER, max_iter + diter);
5.294 + }
5.295 +
5.296 + var red = "rgb(255, 0, 0)";
5.297 + var white = "rgb(255, 255, 255)";
5.298 + var width = canvas.width;
5.299 + var height = canvas.height;
5.300 + var dim = Math.max(width, height);
5.301 + var dim_ratio = Math.round(width / height);
5.302 + var diff_c = new Complex(max_c.real - min_c.real,
5.303 + max_c.imag - min_c.imag);
5.304 + dx_min = diff_c.real / 100 * (dx + dz);
5.305 + dx_max = diff_c.real / 100 * (dx - dz);
5.306 +
5.307 + dy_min = diff_c.imag / 100 * (dy + dz);
5.308 + dy_max = diff_c.imag / 100 * (dy - dz);
5.309 +
5.310 + var min_inc = new Complex(dx_min * dim_ratio / 2.0, dy_min);
5.311 + var max_inc = new Complex(dx_max * dim_ratio / 2.0, dy_max);
5.312 + min_c = complex_add(min_c, min_inc);
5.313 + max_c = complex_add(max_c, max_inc);
5.314 + diff_c = new Complex(max_c.real - min_c.real,
5.315 + max_c.imag - min_c.imag);
5.316 +
5.317 + for (var y = 0; y < height; y += resolution)
5.318 + {
5.319 + for (var x = 0; x < width; x += resolution)
5.320 + {
5.321 + var c = new Complex(min_c.real + diff_c.real / dim * x,
5.322 + min_c.imag + diff_c.imag / dim * y);
5.323 + var result = test(c, max_iter);
5.324 + var r = Math.min(255, Math.pow(Math.max(0,
5.325 + (result.iter - max_iter / 20.0)), 2));
5.326 + var g = Math.min(255, Math.pow(Math.max(0,
5.327 + (result.iter - max_iter / 25.0)), 2));
5.328 + var b = Math.min(255, Math.pow(Math.max(0,
5.329 + (result.iter - max_iter / 20.0)), 2));
5.330 + var colour = "rgb(" + r + "," + g + "," + b + ")";
5.331 + ctx.fillStyle = colour;
5.332 + ctx.fillRect(x, y, resolution, resolution);
5.333 + }
5.334 + }
5.335 + }
5.336 +}
5.337 +
5.338 +function getEventOffsetX(evt)
5.339 +{
5.340 + if (evt.offsetX != null)
5.341 + return evt.offsetX;
5.342 +
5.343 + var obj = evt.target || evt.srcElement;
5.344 + setPageTopLeft(obj);
5.345 + return (evt.clientX - obj.pageLeft);
5.346 +}
5.347 +
5.348 +function getEventOffsetY(evt)
5.349 +{
5.350 + if (evt.offsetY != null)
5.351 + return evt.offsetY;
5.352 +
5.353 + var obj = evt.target || evt.srcElement;
5.354 + setPageTopLeft(obj);
5.355 + return (evt.clientY - obj.pageTop);
5.356 +}
5.357 +
5.358 +function setPageTopLeft( o )
5.359 +{
5.360 + var top = 0,
5.361 + left = 0,
5.362 + obj = o;
5.363 +
5.364 + while (o.offsetParent)
5.365 + {
5.366 + left += o.offsetLeft ;
5.367 + top += o.offsetTop ;
5.368 + o = o.offsetParent ;
5.369 + };
5.370 +
5.371 + obj.pageTop = top;
5.372 + obj.pageLeft = left;
5.373 +}
5.374 +
5.375 +function draw2(evt)
5.376 +{
5.377 + var iter = 0;
5.378 + var res = 0;
5.379 + var x = (getEventOffsetX(evt) - 335) / 167.5;
5.380 + var y = (getEventOffsetY(evt) - 140) / 70;
5.381 + var z = 0;
5.382 + draw(iter, x, y, z, res);
5.383 +}
5.384 +
5.385 +
6.1 Binary file factory/yuicompressor.jar has changed
7.1 Binary file images/logobase.png has changed
8.1 --- a/script.js Sat Dec 17 19:20:30 2011 +0100
8.2 +++ b/script.js Sun Dec 18 03:36:00 2011 +0100
8.3 @@ -1,300 +1,1 @@
8.4 -var QUOTES_NUMBER = 39;
8.5 -var SERVER = "http://me73.com"
8.6 -
8.7 -$(document).ready (
8.8 - function() {
8.9 - var image = new Image();
8.10 - image.onload = init_logo;
8.11 - image.src = "images/logobase.png";
8.12 - }
8.13 -);
8.14 -
8.15 -$(document).keypress (
8.16 - function(event) {
8.17 - if (event.which == 13) {
8.18 - event.preventDefault();
8.19 - update_logo();
8.20 - }
8.21 - }
8.22 -);
8.23 -
8.24 -var width = 670;
8.25 -var height = 100;
8.26 -
8.27 -function init_logo(ev) {
8.28 - var canvas = document.getElementById("logo");
8.29 - var context = canvas.getContext("2d");
8.30 - canvas.width = width;
8.31 - canvas.height = height;
8.32 - context.drawImage(ev.target, 0, 0);
8.33 -}
8.34 -
8.35 -function update_logo() {
8.36 - var canvas = document.getElementById("logo");
8.37 - var context = canvas.getContext("2d");
8.38 - var image = context.getImageData(0, 0, width, height);
8.39 - var pixels = image.data;
8.40 - var white = new Color(255, 255, 255);
8.41 - for (var y = 0; y < height; y += 1) {
8.42 - for (var x = 0; x < width; x += 1) {
8.43 - if (getPixel(image, x, y).r > 0) {
8.44 - setPixel(image, x, y, new Color(90, 215, 21));
8.45 - }
8.46 - }
8.47 - }
8.48 - context.putImageData(image, 0, 0);
8.49 -}
8.50 -
8.51 -function Color(r, g, b, a) {
8.52 - this.r = r;
8.53 - this.g = g;
8.54 - this.b = b;
8.55 - this.a = a == undefined ? 255 : a;
8.56 -}
8.57 -Color.prototype.equals = function(rhs) {
8.58 - for (p in this) {
8.59 - if (typeof(rhs[p]) == undefined
8.60 - || this[p] != rhs[p]) {
8.61 - return false;
8.62 - }
8.63 - }
8.64 - return true;
8.65 -}
8.66 -
8.67 -function setPixel(image, x, y, color) {
8.68 - var index = 4 * (x + y * image.width);
8.69 - image.data[index] = color.r;
8.70 - image.data[index + 1] = color.g;
8.71 - image.data[index + 2] = color.b;
8.72 - image.data[index + 3] = color.a;
8.73 -}
8.74 -
8.75 -function getPixel(image, x, y) {
8.76 - var index = 4 * (x + y * image.width);
8.77 - var r = image.data[index];
8.78 - var g = image.data[index + 1];
8.79 - var b = image.data[index + 2];
8.80 - var a = image.data[index + 3];
8.81 - return new Color(r, g, b, a);
8.82 -}
8.83 -
8.84 -function load_random_quote() {
8.85 - var file = "/quotes/quote" + Math.floor(Math.random() * QUOTES_NUMBER + 1) + ".html";
8.86 - $.ajax({url: SERVER + file,
8.87 - success: write_quote});
8.88 - return;
8.89 - var currentFile = self.location.hostname + self.location.pathname;
8.90 - var request = http_request_object();
8.91 - var url = "http://" + self.location.hostname + file;
8.92 - request.open("GET", url, false);
8.93 - request.setRequestHeader("User-Agent", navigator.userAgent);
8.94 - request.send(null)
8.95 -
8.96 - // if (oRequest.status == 200) alert(oRequest.responseText);
8.97 - // else alert("Error executing XMLHttpRequest call!");
8.98 - //document.write(url);
8.99 - //document.write(request.responseText);
8.100 - document.getElementById('random_quote').innerHTML = request.responseText;
8.101 -}
8.102 -
8.103 -function write_quote(data, status, xhr) {
8.104 - alert(data);
8.105 - $("random_quote").replaceWith(data);
8.106 -}
8.107 -
8.108 -function load_footer()
8.109 -{
8.110 - var file = "/footer.html";
8.111 - var currentFile = self.location.hostname + self.location.pathname;
8.112 - var request = http_request_object();
8.113 - var url = "http://" + self.location.hostname + file;
8.114 - request.open("GET", url, false);
8.115 - request.setRequestHeader("User-Agent", navigator.userAgent);
8.116 - request.send(null)
8.117 - // if (oRequest.status == 200) alert(oRequest.responseText);
8.118 - // else alert("Error executing XMLHttpRequest call!");
8.119 - //document.write(url);
8.120 - //document.write(request.responseText);
8.121 - document.getElementById('footer').innerHTML = request.responseText;
8.122 -}
8.123 -
8.124 -
8.125 -
8.126 -// Mandelbrot functions
8.127 -function Complex(real, imag)
8.128 -{
8.129 - this.real = real;
8.130 - this.imag = imag;
8.131 -}
8.132 -
8.133 -var MIN_C = new Complex(-2.2, -1.4);
8.134 -var MAX_C = new Complex(1.0, 1.4);
8.135 -var min_c = MIN_C;
8.136 -var max_c = MAX_C;
8.137 -var MIN_ITER = 100;
8.138 -var max_iter = MIN_ITER;
8.139 -var zoom = 1.0;
8.140 -var resolution = 3;
8.141 -var bailout = 4.0;
8.142 -
8.143 -function Result(z, iter)
8.144 -{
8.145 - this.z = z;
8.146 - this.iter = iter;
8.147 -}
8.148 -
8.149 -function complex_quad(c)
8.150 -{
8.151 - return new Complex(Math.pow(c.real, 2) - Math.pow(c.imag, 2),
8.152 - 2.0 * c.real * c.imag);
8.153 -}
8.154 -
8.155 -function complex_quad_value(c)
8.156 -{
8.157 - return Math.pow(c.real, 2) + Math.pow(c.imag, 2);
8.158 -}
8.159 -
8.160 -function complex_add(c1, c2)
8.161 -{
8.162 - return new Complex(c1.real + c2.real, c1.imag + c2.imag);
8.163 -}
8.164 -
8.165 -function complex_equal(c1, c2)
8.166 -{
8.167 - return (c1.real == c2.real) && (c1.imag == c2.imag);
8.168 -}
8.169 -
8.170 -function iterate(z, c)
8.171 -{
8.172 - z_quad = complex_quad(z);
8.173 - return new Complex(z_quad.real + c.real, z_quad.imag + c.imag);
8.174 -}
8.175 -
8.176 -function test(c, max_iter)
8.177 -{
8.178 - var iter = 0;
8.179 - var z = new Complex(0.0, 0.0);
8.180 - var last_z = new Complex(-1.0, 0.0);
8.181 - var quad_z = complex_quad_value(z);
8.182 -
8.183 - while (iter < max_iter
8.184 - && !complex_equal(z, last_z)
8.185 - && quad_z <= bailout)
8.186 - {
8.187 - last_z = z;
8.188 - z = iterate(z, c);
8.189 - quad_z = complex_quad_value(z);
8.190 - iter++;
8.191 - }
8.192 - return new Result(quad_z, iter);
8.193 -}
8.194 -
8.195 -function draw(diter, dx, dy, dz, dres)
8.196 -{
8.197 - var canvas = document.getElementById('mandelbrot');
8.198 -
8.199 - if (canvas.getContext)
8.200 - {
8.201 - zoom += dz;
8.202 - var ctx = canvas.getContext('2d');
8.203 -
8.204 - if (dres != 0)
8.205 - {
8.206 - resolution = Math.max(1, resolution + dres);
8.207 - }
8.208 -
8.209 - if (diter != 0)
8.210 - {
8.211 - max_iter = Math.max(MIN_ITER, max_iter + diter);
8.212 - }
8.213 -
8.214 - var red = "rgb(255, 0, 0)";
8.215 - var white = "rgb(255, 255, 255)";
8.216 - var width = canvas.width;
8.217 - var height = canvas.height;
8.218 - var dim = Math.max(width, height);
8.219 - var dim_ratio = Math.round(width / height);
8.220 - var diff_c = new Complex(max_c.real - min_c.real,
8.221 - max_c.imag - min_c.imag);
8.222 - dx_min = diff_c.real / 100 * (dx + dz);
8.223 - dx_max = diff_c.real / 100 * (dx - dz);
8.224 -
8.225 - dy_min = diff_c.imag / 100 * (dy + dz);
8.226 - dy_max = diff_c.imag / 100 * (dy - dz);
8.227 -
8.228 - var min_inc = new Complex(dx_min * dim_ratio / 2.0, dy_min);
8.229 - var max_inc = new Complex(dx_max * dim_ratio / 2.0, dy_max);
8.230 - min_c = complex_add(min_c, min_inc);
8.231 - max_c = complex_add(max_c, max_inc);
8.232 - diff_c = new Complex(max_c.real - min_c.real,
8.233 - max_c.imag - min_c.imag);
8.234 -
8.235 - for (var y = 0; y < height; y += resolution)
8.236 - {
8.237 - for (var x = 0; x < width; x += resolution)
8.238 - {
8.239 - var c = new Complex(min_c.real + diff_c.real / dim * x,
8.240 - min_c.imag + diff_c.imag / dim * y);
8.241 - var result = test(c, max_iter);
8.242 - var r = Math.min(255, Math.pow(Math.max(0,
8.243 - (result.iter - max_iter / 20.0)), 2));
8.244 - var g = Math.min(255, Math.pow(Math.max(0,
8.245 - (result.iter - max_iter / 25.0)), 2));
8.246 - var b = Math.min(255, Math.pow(Math.max(0,
8.247 - (result.iter - max_iter / 20.0)), 2));
8.248 - var colour = "rgb(" + r + "," + g + "," + b + ")";
8.249 - ctx.fillStyle = colour;
8.250 - ctx.fillRect(x, y, resolution, resolution);
8.251 - }
8.252 - }
8.253 - }
8.254 -}
8.255 -
8.256 -function getEventOffsetX(evt)
8.257 -{
8.258 - if (evt.offsetX != null)
8.259 - return evt.offsetX;
8.260 -
8.261 - var obj = evt.target || evt.srcElement;
8.262 - setPageTopLeft(obj);
8.263 - return (evt.clientX - obj.pageLeft);
8.264 -}
8.265 -
8.266 -function getEventOffsetY(evt)
8.267 -{
8.268 - if (evt.offsetY != null)
8.269 - return evt.offsetY;
8.270 -
8.271 - var obj = evt.target || evt.srcElement;
8.272 - setPageTopLeft(obj);
8.273 - return (evt.clientY - obj.pageTop);
8.274 -}
8.275 -
8.276 -function setPageTopLeft( o )
8.277 -{
8.278 - var top = 0,
8.279 - left = 0,
8.280 - obj = o;
8.281 -
8.282 - while (o.offsetParent)
8.283 - {
8.284 - left += o.offsetLeft ;
8.285 - top += o.offsetTop ;
8.286 - o = o.offsetParent ;
8.287 - };
8.288 -
8.289 - obj.pageTop = top;
8.290 - obj.pageLeft = left;
8.291 -}
8.292 -
8.293 -function draw2(evt)
8.294 -{
8.295 - var iter = 0;
8.296 - var res = 0;
8.297 - var x = (getEventOffsetX(evt) - 335) / 167.5;
8.298 - var y = (getEventOffsetY(evt) - 140) / 70;
8.299 - var z = 0;
8.300 - draw(iter, x, y, z, res);
8.301 -}
8.302 -
8.303 -
8.304 +var QUOTES_NUMBER=39;var SERVER="http://me73.com";$(document).ready(function(){var a=new Image();a.onload=init_logo;a.src="images/logobase.png";$("#logo").click(handle_click);$("#logo").hover(function(){$(this).css("cursor","pointer")},function(){$(this).css("cursor","auto")})});$(document).keypress(function(a){if(a.which==13){a.preventDefault();update_logo()}});var menu_width=670;var menu_height=120;var click_events=new Array();click_events.logo=new Array();click_events.logo[0]=new Object();click_events.logo[0]["min_x"]=0;click_events.logo[0]["max_x"]=Math.round(menu_width/4);click_events.logo[0]["min_y"]=0;click_events.logo[0]["max_y"]=menu_height;click_events.logo[0]["func"]=switch_page;click_events.logo[0]["args"]="personalwork.html";click_events.logo[1]=new Object();click_events.logo[1]["min_x"]=Math.round(menu_width/4)+1;click_events.logo[1]["max_x"]=Math.round(menu_width/2);click_events.logo[1]["min_y"]=0;click_events.logo[1]["max_y"]=menu_height;click_events.logo[1]["func"]=switch_page;click_events.logo[1]["args"]="howiwork.html";click_events.logo[2]=new Object();click_events.logo[2]["min_x"]=Math.round(menu_width/2)+1;click_events.logo[2]["max_x"]=Math.round(menu_width/4*3);click_events.logo[2]["min_y"]=0;click_events.logo[2]["max_y"]=menu_height;click_events.logo[2]["func"]=switch_page;click_events.logo[2]["args"]="books.html";click_events.logo[3]=new Object();click_events.logo[3]["min_x"]=Math.round(menu_width/4*3)+1;click_events.logo[3]["max_x"]=menu_width-1;click_events.logo[3]["min_y"]=0;click_events.logo[3]["max_y"]=menu_height;click_events.logo[3]["func"]=switch_page;click_events.logo[3]["args"]="links.html";function handle_click(c){var f=$("#logo").offset();var a=c.pageX-f.left;var g=c.pageY-f.top;for(var b in click_events[c.target.id]){var d=click_events[c.target.id][b];if(d&&a>=d.min_x&&a<=d.max_x&&g>=d.min_y&&g<=d.max_y){d.func(c.target.id,d);break}}}function switch_page(c,b){var a=b.args;$("body").load(a);document.location.href=a}function color_area(c,l,b,j,m,a){var e=document.getElementById(c);var d=e.getContext("2d");var g=d.getImageData(0,0,menu_width,menu_height);var f=g.data;for(var i=j;i<=m;i+=1){for(var k=l;k<=b;k+=1){var h=getPixel(g,k,i);if(h.a>0){a.a=h.a;setPixel(g,k,i,a)}}}d.putImageData(g,0,0)}function init_logo(e){var b=document.getElementById("logo");var d=b.getContext("2d");var g=d.getImageData(0,0,menu_width,menu_height);b.width=menu_width;b.height=menu_height;d.drawImage(e.target,0,0);var a=new Colour(255,255,255);for(var c in click_events.logo){var f=click_events.logo[c];var h=document.location.href.lastIndexOf("/")+1;if(f.args==document.location.href.substr(h)){color_area("logo",f.min_x,f.max_x,70,f.max_y,a)}else{color_area("logo",f.min_x,f.max_x,0,70,a)}}}function update_logo(){var c=document.getElementById("logo");var d=c.getContext("2d");var e=d.getImageData(0,0,menu_width,menu_height);var h=e.data;var b=new Colour(255,255,255);for(var g=0;g<menu_height;g+=1){for(var a=0;a<menu_width;a+=1){var f=getPixel(e,a,g);if(f.a>0){setPixel(e,a,g,new Colour(90,215,21,f.a))}}}d.putImageData(e,0,0)}function Colour(f,e,c,d){this.r=f;this.g=e;this.b=c;this.a=d==undefined?255:d}Colour.prototype.equals=function(a){for(p in this){if(typeof(a[p])==undefined||this[p]!=a[p]){return false}}return true};function setPixel(d,a,e,b){var c=4*(a+e*d.width);d.data[c]=b.r;d.data[c+1]=b.g;d.data[c+2]=b.b;d.data[c+3]=b.a}function getPixel(j,d,k){var f=4*(d+k*j.width);var i=j.data[f];var h=j.data[f+1];var c=j.data[f+2];var e=j.data[f+3];return new Colour(i,h,c,e)}function load_random_quote(){var c="/quotes/quote"+Math.floor(Math.random()*QUOTES_NUMBER+1)+".html";$.ajax({url:SERVER+c,success:write_quote});return;var a=self.location.hostname+self.location.pathname;var d=http_request_object();var b="http://"+self.location.hostname+c;d.open("GET",b,false);d.setRequestHeader("User-Agent",navigator.userAgent);d.send(null);document.getElementById("random_quote").innerHTML=d.responseText}function write_quote(b,a,c){alert(b);$("random_quote").replaceWith(b)}function load_footer(){var c="/footer.html";var a=self.location.hostname+self.location.pathname;var d=http_request_object();var b="http://"+self.location.hostname+c;d.open("GET",b,false);d.setRequestHeader("User-Agent",navigator.userAgent);d.send(null);document.getElementById("footer").innerHTML=d.responseText}function Complex(b,a){this.real=b;this.imag=a}var MIN_C=new Complex(-2.2,-1.4);var MAX_C=new Complex(1,1.4);var min_c=MIN_C;var max_c=MAX_C;var MIN_ITER=100;var max_iter=MIN_ITER;var zoom=1;var resolution=3;var bailout=4;function Result(b,a){this.z=b;this.iter=a}function complex_quad(a){return new Complex(Math.pow(a.real,2)-Math.pow(a.imag,2),2*a.real*a.imag)}function complex_quad_value(a){return Math.pow(a.real,2)+Math.pow(a.imag,2)}function complex_add(b,a){return new Complex(b.real+a.real,b.imag+a.imag)}function complex_equal(b,a){return(b.real==a.real)&&(b.imag==a.imag)}function iterate(a,b){z_quad=complex_quad(a);return new Complex(z_quad.real+b.real,z_quad.imag+b.imag)}function test(g,d){var b=0;var f=new Complex(0,0);var e=new Complex(-1,0);var a=complex_quad_value(f);while(b<d&&!complex_equal(f,e)&&a<=bailout){e=f;f=iterate(f,g);a=complex_quad_value(f);b++}return new Result(a,b)}function draw(m,n,l,i,B){var a=document.getElementById("mandelbrot");if(a.getContext){zoom+=i;var t=a.getContext("2d");if(B!=0){resolution=Math.max(1,resolution+B)}if(m!=0){max_iter=Math.max(MIN_ITER,max_iter+m)}var d="rgb(255, 0, 0)";var e="rgb(255, 255, 255)";var s=a.width;var q=a.height;var u=Math.max(s,q);var E=Math.round(s/q);var z=new Complex(max_c.real-min_c.real,max_c.imag-min_c.imag);dx_min=z.real/100*(n+i);dx_max=z.real/100*(n-i);dy_min=z.imag/100*(l+i);dy_max=z.imag/100*(l-i);var v=new Complex(dx_min*E/2,dy_min);var D=new Complex(dx_max*E/2,dy_max);min_c=complex_add(min_c,v);max_c=complex_add(max_c,D);z=new Complex(max_c.real-min_c.real,max_c.imag-min_c.imag);for(var f=0;f<q;f+=resolution){for(var h=0;h<s;h+=resolution){var A=new Complex(min_c.real+z.real/u*h,min_c.imag+z.imag/u*f);var k=test(A,max_iter);var o=Math.min(255,Math.pow(Math.max(0,(k.iter-max_iter/20)),2));var w=Math.min(255,Math.pow(Math.max(0,(k.iter-max_iter/25)),2));var C=Math.min(255,Math.pow(Math.max(0,(k.iter-max_iter/20)),2));var j="rgb("+o+","+w+","+C+")";t.fillStyle=j;t.fillRect(h,f,resolution,resolution)}}}}function getEventOffsetX(a){if(a.offsetX!=null){return a.offsetX}var b=a.target||a.srcElement;setPageTopLeft(b);return(a.clientX-b.pageLeft)}function getEventOffsetY(a){if(a.offsetY!=null){return a.offsetY}var b=a.target||a.srcElement;setPageTopLeft(b);return(a.clientY-b.pageTop)}function setPageTopLeft(d){var c=0,b=0,a=d;while(d.offsetParent){b+=d.offsetLeft;c+=d.offsetTop;d=d.offsetParent}a.pageTop=c;a.pageLeft=b}function draw2(c){var b=0;var d=0;var a=(getEventOffsetX(c)-335)/167.5;var f=(getEventOffsetY(c)-140)/70;var e=0;draw(b,a,f,e,d)};
8.305 \ No newline at end of file