sawine@0
|
1 |
var QUOTES_NUMBER = 32;
|
sawine@0
|
2 |
|
sawine@0
|
3 |
function load_page(html, params)
|
sawine@0
|
4 |
{
|
sawine@0
|
5 |
if (params != "")
|
sawine@0
|
6 |
html += "?";
|
sawine@0
|
7 |
window.location = html + params;
|
sawine@0
|
8 |
//window.location.reload();
|
sawine@0
|
9 |
}
|
sawine@0
|
10 |
|
sawine@0
|
11 |
function google_an1()
|
sawine@0
|
12 |
{
|
sawine@0
|
13 |
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
|
sawine@0
|
14 |
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
|
sawine@0
|
15 |
}
|
sawine@0
|
16 |
|
sawine@0
|
17 |
function google_an2()
|
sawine@0
|
18 |
{
|
sawine@0
|
19 |
var pageTracker = _gat._getTracker("UA-2137333-1");
|
sawine@0
|
20 |
pageTracker._initData();
|
sawine@0
|
21 |
pageTracker._trackPageview();
|
sawine@0
|
22 |
}
|
sawine@0
|
23 |
|
sawine@0
|
24 |
function google_an()
|
sawine@0
|
25 |
{
|
sawine@0
|
26 |
google_an1();
|
sawine@0
|
27 |
if (typeof(_gat) == "object")
|
sawine@0
|
28 |
google_an2();
|
sawine@0
|
29 |
}
|
sawine@0
|
30 |
|
sawine@0
|
31 |
function http_request_object()
|
sawine@0
|
32 |
{
|
sawine@0
|
33 |
var xmlHttpObject = null;
|
sawine@0
|
34 |
|
sawine@0
|
35 |
if (typeof(XMLHttpRequest) != "undefined")
|
sawine@0
|
36 |
{
|
sawine@0
|
37 |
xmlHttpObject = new XMLHttpRequest();
|
sawine@0
|
38 |
}
|
sawine@0
|
39 |
|
sawine@0
|
40 |
//For IE6 and IE5
|
sawine@0
|
41 |
if (xmlHttpObject == null)
|
sawine@0
|
42 |
{
|
sawine@0
|
43 |
try
|
sawine@0
|
44 |
{
|
sawine@0
|
45 |
xmlHttpObject = new ActiveXObject("Microsoft.XMLHTTP");
|
sawine@0
|
46 |
}
|
sawine@0
|
47 |
catch(e)
|
sawine@0
|
48 |
{
|
sawine@0
|
49 |
try
|
sawine@0
|
50 |
{
|
sawine@0
|
51 |
xmlHttpObject = new ActiveXObject("Msxml2.XMLHTTP");
|
sawine@0
|
52 |
}
|
sawine@0
|
53 |
catch(e)
|
sawine@0
|
54 |
{
|
sawine@0
|
55 |
xmlHttpObject = null;
|
sawine@0
|
56 |
}
|
sawine@0
|
57 |
}
|
sawine@0
|
58 |
}
|
sawine@0
|
59 |
return xmlHttpObject;
|
sawine@0
|
60 |
}
|
sawine@0
|
61 |
|
sawine@0
|
62 |
function load_header(current)
|
sawine@0
|
63 |
{
|
sawine@0
|
64 |
var file;
|
sawine@0
|
65 |
if (current == "home")
|
sawine@0
|
66 |
file = "/homenav.html";
|
sawine@0
|
67 |
else if (current == "resume")
|
sawine@0
|
68 |
file = "/resumenav.html";
|
sawine@0
|
69 |
else if (current == "howiwork")
|
sawine@0
|
70 |
file = "/howiworknav.html";
|
sawine@0
|
71 |
else if (current == "personalwork")
|
sawine@0
|
72 |
file = "/personalworknav.html";
|
sawine@0
|
73 |
else if (current == "tutorials")
|
sawine@0
|
74 |
file = "/tutorialsnav.html";
|
sawine@0
|
75 |
else if (current == "contact")
|
sawine@0
|
76 |
file = "/contactnav.html";
|
sawine@0
|
77 |
|
sawine@0
|
78 |
var currentFile = self.location.hostname + self.location.pathname;
|
sawine@0
|
79 |
var request = http_request_object();
|
sawine@0
|
80 |
var url = "http://" + self.location.hostname + file;
|
sawine@0
|
81 |
request.open("GET", url, false);
|
sawine@0
|
82 |
request.setRequestHeader("User-Agent", navigator.userAgent);
|
sawine@0
|
83 |
request.send(null)
|
sawine@0
|
84 |
// if (oRequest.status == 200) alert(oRequest.responseText);
|
sawine@0
|
85 |
// else alert("Error executing XMLHttpRequest call!");
|
sawine@0
|
86 |
//document.write(url);
|
sawine@0
|
87 |
document.getElementById('header').innerHTML = request.responseText;
|
sawine@0
|
88 |
//document.write(request.responseText);
|
sawine@0
|
89 |
|
sawine@0
|
90 |
//alert(request.responseText);
|
sawine@0
|
91 |
}
|
sawine@0
|
92 |
|
sawine@0
|
93 |
function load_sidebar()
|
sawine@0
|
94 |
{
|
sawine@0
|
95 |
var file = "/sidebar.html";
|
sawine@0
|
96 |
var currentFile = self.location.hostname + self.location.pathname;
|
sawine@0
|
97 |
var request = http_request_object();
|
sawine@0
|
98 |
var url = "http://" + self.location.hostname + file;
|
sawine@0
|
99 |
request.open("GET", url, false);
|
sawine@0
|
100 |
request.setRequestHeader("User-Agent", navigator.userAgent);
|
sawine@0
|
101 |
request.send(null)
|
sawine@0
|
102 |
// if (oRequest.status == 200) alert(oRequest.responseText);
|
sawine@0
|
103 |
// else alert("Error executing XMLHttpRequest call!");
|
sawine@0
|
104 |
//document.write(url);
|
sawine@0
|
105 |
//document.write(request.responseText);
|
sawine@0
|
106 |
document.getElementById('sidebar').innerHTML = request.responseText;
|
sawine@0
|
107 |
}
|
sawine@0
|
108 |
|
sawine@0
|
109 |
function load_random_quote()
|
sawine@0
|
110 |
{
|
sawine@0
|
111 |
var file = "/quotes/quote" + Math.floor(Math.random() * QUOTES_NUMBER + 1) + ".html";
|
sawine@0
|
112 |
var currentFile = self.location.hostname + self.location.pathname;
|
sawine@0
|
113 |
var request = http_request_object();
|
sawine@0
|
114 |
var url = "http://" + self.location.hostname + file;
|
sawine@0
|
115 |
request.open("GET", url, false);
|
sawine@0
|
116 |
request.setRequestHeader("User-Agent", navigator.userAgent);
|
sawine@0
|
117 |
request.send(null)
|
sawine@0
|
118 |
// if (oRequest.status == 200) alert(oRequest.responseText);
|
sawine@0
|
119 |
// else alert("Error executing XMLHttpRequest call!");
|
sawine@0
|
120 |
//document.write(url);
|
sawine@0
|
121 |
//document.write(request.responseText);
|
sawine@0
|
122 |
document.getElementById('random_quote').innerHTML = request.responseText;
|
sawine@0
|
123 |
}
|
sawine@0
|
124 |
|
sawine@0
|
125 |
function load_footer()
|
sawine@0
|
126 |
{
|
sawine@0
|
127 |
var file = "/footer.html";
|
sawine@0
|
128 |
var currentFile = self.location.hostname + self.location.pathname;
|
sawine@0
|
129 |
var request = http_request_object();
|
sawine@0
|
130 |
var url = "http://" + self.location.hostname + file;
|
sawine@0
|
131 |
request.open("GET", url, false);
|
sawine@0
|
132 |
request.setRequestHeader("User-Agent", navigator.userAgent);
|
sawine@0
|
133 |
request.send(null)
|
sawine@0
|
134 |
// if (oRequest.status == 200) alert(oRequest.responseText);
|
sawine@0
|
135 |
// else alert("Error executing XMLHttpRequest call!");
|
sawine@0
|
136 |
//document.write(url);
|
sawine@0
|
137 |
//document.write(request.responseText);
|
sawine@0
|
138 |
document.getElementById('footer').innerHTML = request.responseText;
|
sawine@0
|
139 |
}
|
sawine@7
|
140 |
|
sawine@20
|
141 |
|
sawine@20
|
142 |
|
sawine@7
|
143 |
// Mandelbrot functions
|
sawine@7
|
144 |
function Complex(real, imag)
|
sawine@7
|
145 |
{
|
sawine@7
|
146 |
this.real = real;
|
sawine@7
|
147 |
this.imag = imag;
|
sawine@7
|
148 |
}
|
sawine@7
|
149 |
|
sawine@7
|
150 |
var MIN_C = new Complex(-2.2, -1.4);
|
sawine@7
|
151 |
var MAX_C = new Complex(1.0, 1.4);
|
sawine@7
|
152 |
var min_c = MIN_C;
|
sawine@7
|
153 |
var max_c = MAX_C;
|
sawine@20
|
154 |
var MIN_ITER = 100;
|
sawine@20
|
155 |
var max_iter = MIN_ITER;
|
sawine@10
|
156 |
var zoom = 1.0;
|
sawine@17
|
157 |
var resolution = 3;
|
sawine@17
|
158 |
var bailout = 4.0;
|
sawine@7
|
159 |
|
sawine@7
|
160 |
function Result(z, iter)
|
sawine@7
|
161 |
{
|
sawine@7
|
162 |
this.z = z;
|
sawine@7
|
163 |
this.iter = iter;
|
sawine@7
|
164 |
}
|
sawine@7
|
165 |
|
sawine@7
|
166 |
function complex_quad(c)
|
sawine@7
|
167 |
{
|
sawine@7
|
168 |
return new Complex(Math.pow(c.real, 2) - Math.pow(c.imag, 2),
|
sawine@7
|
169 |
2.0 * c.real * c.imag);
|
sawine@7
|
170 |
}
|
sawine@7
|
171 |
|
sawine@7
|
172 |
function complex_quad_value(c)
|
sawine@7
|
173 |
{
|
sawine@7
|
174 |
return Math.pow(c.real, 2) + Math.pow(c.imag, 2);
|
sawine@7
|
175 |
}
|
sawine@7
|
176 |
|
sawine@7
|
177 |
function complex_add(c1, c2)
|
sawine@7
|
178 |
{
|
sawine@7
|
179 |
return new Complex(c1.real + c2.real, c1.imag + c2.imag);
|
sawine@7
|
180 |
}
|
sawine@7
|
181 |
|
sawine@17
|
182 |
function complex_equal(c1, c2)
|
sawine@17
|
183 |
{
|
sawine@17
|
184 |
return (c1.real == c2.real) && (c1.imag == c2.imag);
|
sawine@17
|
185 |
}
|
sawine@17
|
186 |
|
sawine@7
|
187 |
function iterate(z, c)
|
sawine@7
|
188 |
{
|
sawine@7
|
189 |
z_quad = complex_quad(z);
|
sawine@7
|
190 |
return new Complex(z_quad.real + c.real, z_quad.imag + c.imag);
|
sawine@7
|
191 |
}
|
sawine@7
|
192 |
|
sawine@7
|
193 |
function test(c, max_iter)
|
sawine@7
|
194 |
{
|
sawine@7
|
195 |
var iter = 0;
|
sawine@7
|
196 |
var z = new Complex(0.0, 0.0);
|
sawine@17
|
197 |
var last_z = new Complex(-1.0, 0.0);
|
sawine@17
|
198 |
var quad_z = complex_quad_value(z);
|
sawine@17
|
199 |
|
sawine@17
|
200 |
while (iter < max_iter
|
sawine@17
|
201 |
&& !complex_equal(z, last_z)
|
sawine@17
|
202 |
&& quad_z <= bailout)
|
sawine@7
|
203 |
{
|
sawine@17
|
204 |
last_z = z;
|
sawine@7
|
205 |
z = iterate(z, c);
|
sawine@17
|
206 |
quad_z = complex_quad_value(z);
|
sawine@7
|
207 |
iter++;
|
sawine@7
|
208 |
}
|
sawine@17
|
209 |
return new Result(quad_z, iter);
|
sawine@7
|
210 |
}
|
sawine@7
|
211 |
|
sawine@20
|
212 |
function draw(diter, dx, dy, dz, dres)
|
sawine@7
|
213 |
{
|
sawine@17
|
214 |
var canvas = document.getElementById('mandelbrot');
|
sawine@17
|
215 |
|
sawine@7
|
216 |
if (canvas.getContext)
|
sawine@7
|
217 |
{
|
sawine@17
|
218 |
zoom += dz;
|
sawine@12
|
219 |
var ctx = canvas.getContext('2d');
|
sawine@17
|
220 |
|
sawine@17
|
221 |
if (dres != 0)
|
sawine@17
|
222 |
{
|
sawine@17
|
223 |
resolution = Math.max(1, resolution + dres);
|
sawine@17
|
224 |
}
|
sawine@20
|
225 |
|
sawine@20
|
226 |
if (diter != 0)
|
sawine@20
|
227 |
{
|
sawine@20
|
228 |
max_iter = Math.max(MIN_ITER, max_iter + diter);
|
sawine@20
|
229 |
}
|
sawine@17
|
230 |
|
sawine@20
|
231 |
var red = "rgb(255, 0, 0)";
|
sawine@20
|
232 |
var white = "rgb(255, 255, 255)";
|
sawine@17
|
233 |
var width = canvas.width;
|
sawine@17
|
234 |
var height = canvas.height;
|
sawine@17
|
235 |
var dim = Math.max(width, height);
|
sawine@17
|
236 |
var dim_ratio = Math.round(width / height);
|
sawine@17
|
237 |
var diff_c = new Complex(max_c.real - min_c.real,
|
sawine@17
|
238 |
max_c.imag - min_c.imag);
|
sawine@17
|
239 |
dx_min = diff_c.real / 100 * (dx + dz);
|
sawine@17
|
240 |
dx_max = diff_c.real / 100 * (dx - dz);
|
sawine@17
|
241 |
|
sawine@17
|
242 |
dy_min = diff_c.imag / 100 * (dy + dz);
|
sawine@17
|
243 |
dy_max = diff_c.imag / 100 * (dy - dz);
|
sawine@17
|
244 |
|
sawine@17
|
245 |
var min_inc = new Complex(dx_min * dim_ratio / 2.0, dy_min);
|
sawine@17
|
246 |
var max_inc = new Complex(dx_max * dim_ratio / 2.0, dy_max);
|
sawine@7
|
247 |
min_c = complex_add(min_c, min_inc);
|
sawine@7
|
248 |
max_c = complex_add(max_c, max_inc);
|
sawine@17
|
249 |
diff_c = new Complex(max_c.real - min_c.real,
|
sawine@7
|
250 |
max_c.imag - min_c.imag);
|
sawine@7
|
251 |
|
sawine@22
|
252 |
for (var y = 0; y < height; y += resolution)
|
sawine@7
|
253 |
{
|
sawine@17
|
254 |
for (var x = 0; x < width; x += resolution)
|
sawine@17
|
255 |
{
|
sawine@17
|
256 |
var c = new Complex(min_c.real + diff_c.real / dim * x,
|
sawine@17
|
257 |
min_c.imag + diff_c.imag / dim * y);
|
sawine@17
|
258 |
var result = test(c, max_iter);
|
sawine@17
|
259 |
var r = Math.min(255, Math.pow(Math.max(0,
|
sawine@17
|
260 |
(result.iter - max_iter / 20.0)), 2));
|
sawine@17
|
261 |
var g = Math.min(255, Math.pow(Math.max(0,
|
sawine@17
|
262 |
(result.iter - max_iter / 25.0)), 2));
|
sawine@17
|
263 |
var b = Math.min(255, Math.pow(Math.max(0,
|
sawine@17
|
264 |
(result.iter - max_iter / 20.0)), 2));
|
sawine@17
|
265 |
var colour = r + "," + g + "," + b;
|
sawine@17
|
266 |
ctx.fillStyle = "rgb(" + colour + ")";
|
sawine@20
|
267 |
ctx.fillRect(x, y, resolution, resolution);
|
sawine@7
|
268 |
}
|
sawine@7
|
269 |
}
|
sawine@7
|
270 |
}
|
sawine@7
|
271 |
}
|