From 753becae8bba8178b8f941233a2776bdf9ddfb19 Mon Sep 17 00:00:00 2001 From: Martin Thoma Date: Mon, 1 Jul 2013 19:37:29 +0200 Subject: [PATCH] fixed minor issues --- .../Diskrete-Mathematik/Handout/Handout.tex | 26 +- .../LaTeX/Graphentheorie-I.pdf | Bin 2130707 -> 2126094 bytes .../LaTeX/Koenigsberger-Brueckenproblem.tex | 2 +- .../Diskrete-Mathematik/LaTeX/Strukturen.tex | 4 - .../isomorph-graph-example/README.md | 6 + .../graph1-js/graffle.js | 101 ++++++ .../isomorph-graph-example/graph1-js/graph.js | 303 ++++++++++++++++++ .../graph1-js/raphael-min.js | 7 + .../isomorph-graph-example/graph1.html | 40 +++ .../isomorph-graph-example/graph2.html | 53 +++ 10 files changed, 524 insertions(+), 18 deletions(-) create mode 100644 presentations/Diskrete-Mathematik/isomorph-graph-example/README.md create mode 100644 presentations/Diskrete-Mathematik/isomorph-graph-example/graph1-js/graffle.js create mode 100644 presentations/Diskrete-Mathematik/isomorph-graph-example/graph1-js/graph.js create mode 100644 presentations/Diskrete-Mathematik/isomorph-graph-example/graph1-js/raphael-min.js create mode 100644 presentations/Diskrete-Mathematik/isomorph-graph-example/graph1.html create mode 100644 presentations/Diskrete-Mathematik/isomorph-graph-example/graph2.html diff --git a/presentations/Diskrete-Mathematik/Handout/Handout.tex b/presentations/Diskrete-Mathematik/Handout/Handout.tex index e7ac065..3a05327 100644 --- a/presentations/Diskrete-Mathematik/Handout/Handout.tex +++ b/presentations/Diskrete-Mathematik/Handout/Handout.tex @@ -125,10 +125,13 @@ $K \subseteq E \times E$ die Kantenmenge bezeichnet. \end{definition} -\begin{definition}{Inzidenz} -Sei $e \in E$ und $k = \Set{e_1, e_2} \in K$. +\begin{definition}{Grad einer Ecke} +Der \textbf{Grad} einer Ecke ist die Anzahl der Kanten, die von dieser Ecke +ausgehen. +\end{definition} -$e$ heißt \textbf{inzident} zu $k :\Leftrightarrow e = e_1$ oder $e = e_2$ +\begin{definition}{Isolierte Ecke} +Hat eine Ecke den Grad 0, so nennt man ihn \textbf{isoliert}. \end{definition} \begin{definition}{Schlinge} @@ -137,6 +140,12 @@ Sei $G=(E, K)$ ein Graph und $k=\Set{e_1, e_2} \in K$ eine Kante. $k$ heißt \textbf{Schlinge} $:\Leftrightarrow e_1 = e_2$ \end{definition} +\begin{definition}{Inzidenz} +Sei $e \in E$ und $k = \Set{e_1, e_2} \in K$. + +$e$ heißt \textbf{inzident} zu $k :\Leftrightarrow e = e_1$ oder $e = e_2$ +\end{definition} + \begin{definition}{Vollständiger Graph} Sei $G = (E, K)$ ein Graph. @@ -189,7 +198,7 @@ Sei $G = (E, K)$ ein Graph und $A = (k_1, k_2 \dots, k_s)$ ein Kantenzug. A heißt \textbf{Weg} $:\Leftrightarrow \forall_{i, j \in 1, \dots, s}: i \neq j \Rightarrow k_i \neq k_j$ . \end{definition} -\begin{definition}{Einfacher Kreis} +\begin{definition}{Kreis} Sei $G = (E, K)$ ein Graph und $A = (k_1, k_2 \dots, k_s)$ ein Kantenzug. A heißt \textbf{Kreis} $:\Leftrightarrow A$ ist geschlossen und ein Weg. @@ -216,15 +225,6 @@ $G$ heißt \textbf{zusammenhängend} $:\Leftrightarrow \forall e_1, e_2 \in E: $ Es ex. ein Kantenzug, der $e_1$ und $e_2$ verbindet \end{definition} -\begin{definition}{Grad einer Ecke} -Der \textbf{Grad} einer Ecke ist die Anzahl der Kanten, die von dieser Ecke -ausgehen. -\end{definition} - -\begin{definition}{Isolierte Ecke} -Hat eine Ecke den Grad 0, so nennt man ihn \textbf{isoliert}. -\end{definition} - \begin{definition}{Eulerscher Kreis} Sei $G$ ein Graph und $A$ ein Kreis in $G$. diff --git a/presentations/Diskrete-Mathematik/LaTeX/Graphentheorie-I.pdf b/presentations/Diskrete-Mathematik/LaTeX/Graphentheorie-I.pdf index f22223b8055ef523f75a4ecc9c8d3fc9e0647020..bd38aa8c3c68ae06f52a57e49eaee0e06c652583 100644 GIT binary patch delta 43636 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 z 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 delta 48403 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 gfwD(Jd=H0&ANCKBH8n9dGq*I6UA)-d#X p[j].x) && ((i != 0 && j != 5) || p[i].y > p[j].y) && ((i != 1 && j != 4) || p[i].y < p[j].y))) { + dis.push(dx + dy); + d[dis[dis.length - 1]] = [i, j]; + } + } + } + var res = dis.length == 0 ? res = [0, 4] : d[Math.min.apply(Math, dis)]; + /* bezier path */ + var x1 = p[res[0]].x, + y1 = p[res[0]].y, + x4 = p[res[1]].x, + y4 = p[res[1]].y, + dx = Math.max(Math.abs(x1 - x4) / 2, 10), + dy = Math.max(Math.abs(y1 - y4) / 2, 10), + x2 = [x1, x1, x1 - dx, x1 + dx][res[0]].toFixed(3), + y2 = [y1 - dy, y1 + dy, y1, y1][res[0]].toFixed(3), + x3 = [0, 0, 0, 0, x4, x4, x4 - dx, x4 + dx][res[1]].toFixed(3), + y3 = [0, 0, 0, 0, y1 + dy, y1 - dy, y4, y4][res[1]].toFixed(3); + /* assemble path and arrow */ + var path = ["M", x1.toFixed(3), y1.toFixed(3), "C", x2, y2, x3, y3, x4.toFixed(3), y4.toFixed(3)].join(","); + /* arrow */ + if(style && style.directed) { + /* magnitude, length of the last path vector */ + var mag = Math.sqrt((y4 - y3) * (y4 - y3) + (x4 - x3) * (x4 - x3)); + /* vector normalisation to specified length */ + var norm = function(x,l){return (-x*(l||5)/mag);}; + /* calculate array coordinates (two lines orthogonal to the path vector) */ + var arr = [ + {x:(norm(x4-x3)+norm(y4-y3)+x4).toFixed(3), y:(norm(y4-y3)+norm(x4-x3)+y4).toFixed(3)}, + {x:(norm(x4-x3)-norm(y4-y3)+x4).toFixed(3), y:(norm(y4-y3)-norm(x4-x3)+y4).toFixed(3)} + ]; + path = path + ",M"+arr[0].x+","+arr[0].y+",L"+x4+","+y4+",L"+arr[1].x+","+arr[1].y; + } + + // applying path + edge.fg && edge.fg.attr({path:path}) + || (edge.fg = selfRef.path(path).attr({stroke: color, fill: "none"}).toBack()); + edge.bg && edge.bg.attr({path:path}) + || style && style.bg && (edge.bg = style.bg.split && selfRef.path(path).attr({stroke: style.bg.split("|")[0], fill: "none", "stroke-width": style.bg.split("|")[1] || 3}).toBack()); + } + } + edge.draw(); + return edge; +}; diff --git a/presentations/Diskrete-Mathematik/isomorph-graph-example/graph1-js/graph.js b/presentations/Diskrete-Mathematik/isomorph-graph-example/graph1-js/graph.js new file mode 100644 index 0000000..268c283 --- /dev/null +++ b/presentations/Diskrete-Mathematik/isomorph-graph-example/graph1-js/graph.js @@ -0,0 +1,303 @@ +/* Graph JavaScript framework, version 0.0.1 + * (c) 2006 Aslak Hellesoy + * (c) 2006 Dave Hoover + * + * Ported from Graph::Layouter::Spring in + * http://search.cpan.org/~pasky/Graph-Layderer-0.02/ + * The algorithm is based on a spring-style layouter of a Java-based social + * network tracker PieSpy written by Paul Mutton Epaul@jibble.orgE. + * + * Adopted by Philipp Strathausen to support Raphael JS + * for rendering, dragging and much more. See http://blog.ameisenbar.de + * + * Graph is freely distributable under the terms of an MIT-style license. + * For details, see the Graph web site: http://dev.buildpatternd.com/trac + * + * Links: + * + * Demo of the original applet: + * http://redsquirrel.com/dave/work/webdep/ + * + * Mirrored original source code at snipplr: + * http://snipplr.com/view/1950/graph-javascript-framework-version-001/ + * + * Original usage example: + * http://ajaxian.com/archives/new-javascriptcanvas-graph-library + * +/*--------------------------------------------------------------------------*/ + +/* + * Graph + */ +var Graph = function() { + this.nodes = []; + this.edges = []; +}; +Graph.prototype = { + addNode: function(id, content) { + /* testing if node is already existing in the graph */ + var new_node = this.nodes[id]; + if(new_node == undefined) { + new_node = new Graph.Node(id, content||{"id":id}); + this.nodes[id] = new_node; + this.nodes.push(new_node); // TODO get rid of the array + } + return new_node; + }, + + addEdge: function(source, target, style) { + var s = this.addNode(source); + var t = this.addNode(target); + var color; + var colorbg; + var directed; + if(style) { color = style.color; colorbg = style.colorbg; directed = style.directed } + var edge = { source: s, target: t, color: color, colorbg: colorbg, directed: directed }; + this.edges.push(edge); + } +}; + +/* + * Node + */ +Graph.Node = function(id, value){ + this.id = id; + this.content = value; +}; +Graph.Node.prototype = { +}; +Graph.Renderer = {}; +Graph.Renderer.Raphael = function(element, graph, width, height) { + this.width = width||400; + this.height = height||400; + var selfRef = this; + this.r = Raphael(element, this.width, this.height); + this.radius = 40; /* max dimension of a node */ + this.graph = graph; + this.mouse_in = false; + + /* + * Dragging + */ + this.isDrag = false; + this.dragger = function (e) { + this.dx = e.clientX; + this.dy = e.clientY; + selfRef.isDrag = this; + this.animate({"fill-opacity": .2}, 500); + e.preventDefault && e.preventDefault(); + }; + + document.onmousemove = function (e) { + e = e || window.event; + if (selfRef.isDrag) { + var newX = e.clientX - selfRef.isDrag.dx + (selfRef.isDrag.attrs.cx == null ? (selfRef.isDrag.attrs.x + selfRef.isDrag.attrs.width / 2) : selfRef.isDrag.attrs.cx); + var newY = e.clientY - selfRef.isDrag.dy + (selfRef.isDrag.attrs.cy == null ? (selfRef.isDrag.attrs.y + selfRef.isDrag.attrs.height / 2) : selfRef.isDrag.attrs.cy); + /* prevent shapes from being dragged out of the canvas */ + var clientX = e.clientX - (newX < 20 ? newX - 20 : newX > selfRef.width - 20 ? newX - selfRef.width + 20 : 0); + var clientY = e.clientY - (newY < 20 ? newY - 20 : newY > selfRef.height - 20 ? newY - selfRef.height + 20 : 0); + selfRef.isDrag.translate(clientX - selfRef.isDrag.dx, clientY - selfRef.isDrag.dy); + selfRef.isDrag.label.translate(clientX - selfRef.isDrag.dx, clientY - selfRef.isDrag.dy); + for (var i in selfRef.graph.edges) { + selfRef.graph.edges[i].connection.draw(); + } + //selfRef.r.safari(); + selfRef.isDrag.dx = clientX; + selfRef.isDrag.dy = clientY; + } + }; + document.onmouseup = function () { + selfRef.isDrag && selfRef.isDrag.animate({"fill-opacity": 0}, 500); + selfRef.isDrag = false; + }; +}; + +/* + * Renderer using RaphaelJS + */ +Graph.Renderer.Raphael.prototype = { + translate: function(point) { + return [ + (point[0] - this.graph.layoutMinX) * this.factorX + this.radius, + (point[1] - this.graph.layoutMinY) * this.factorY + this.radius + ]; + }, + + rotate: function(point, length, angle) { + var dx = length * Math.cos(angle); + var dy = length * Math.sin(angle); + return [point[0]+dx, point[1]+dy]; + }, + + draw: function() { + this.factorX = (width - 2 * this.radius) / (this.graph.layoutMaxX - this.graph.layoutMinX); + this.factorY = (height - 2 * this.radius) / (this.graph.layoutMaxY - this.graph.layoutMinY); + for (var i = 0; i < this.graph.nodes.length; i++) { + this.drawNode(this.graph.nodes[i]); + } + for (var i = 0; i < this.graph.edges.length; i++) { + this.drawEdge(this.graph.edges[i]); + } + }, + drawNode: function(node) { + var point = this.translate([node.layoutPosX, node.layoutPosY]); + node.point = point; + + /* if node has already been drawn, move the nodes */ + if(node.shape) { +// console.log(node.shape.attrs ); + var opoint = [ node.shape.attrs.cx || node.shape.attrs.x + node.shape.attrs.width / 2 , node.shape.attrs.cy || node.shape.attrs.y + node.shape.attrs.height / 2 + 15 ]; + node.shape.translate(point[0]-opoint[0], point[1]-opoint[1]); + node.shape.label.translate(point[0]-opoint[0], point[1]-opoint[1]); + this.r.safari(); + return; + } + var shape; + if(node.content.getShape) { + shape = node.content.getShape(this.r, point[0], point[1]); + shape.attr({"fill-opacity": 0}); + } else { + shape = this.r.ellipse(point[0], point[1], 30, 20); + var color = Raphael.getColor(); + shape.attr({fill: color, stroke: color, "fill-opacity": 0, "stroke-width": 2}) + } + shape.mousedown(this.dragger); + shape.node.style.cursor = "move"; + shape.label = this.r.text(point[0], point[1] + 30, node.content.label || node.id); // Beware: operator || also considers values like -1, 0, ... + node.shape = shape; + }, + drawEdge: function(edge) { + /* if edge already has been drawn, only refresh the edge */ + edge.connection && edge.connection.draw(); + if(!edge.connection) + edge.connection = this.r.connection(edge.source.shape, edge.target.shape, { fg: edge.color, bg: edge.colorbg, directed: edge.directed }); + } +}; +Graph.Layout = {}; +Graph.Layout.Spring = function(graph) { + this.graph = graph; + this.iterations = 500; + this.maxRepulsiveForceDistance = 6; + this.k = 2; + this.c = 0.01; + this.maxVertexMovement = 0.5; + }; +Graph.Layout.Spring.prototype = { + layout: function() { + this.layoutPrepare(); + for (var i = 0; i < this.iterations; i++) { + this.layoutIteration(); + } + this.layoutCalcBounds(); + }, + + layoutPrepare: function() { + for (var i = 0; i < this.graph.nodes.length; i++) { + var node = this.graph.nodes[i]; + node.layoutPosX = 0; + node.layoutPosY = 0; + node.layoutForceX = 0; + node.layoutForceY = 0; + } + + }, + + layoutCalcBounds: function() { + var minx = Infinity, maxx = -Infinity, miny = Infinity, maxy = -Infinity; + + for (var i = 0; i < this.graph.nodes.length; i++) { + var x = this.graph.nodes[i].layoutPosX; + var y = this.graph.nodes[i].layoutPosY; + + if(x > maxx) maxx = x; + if(x < minx) minx = x; + if(y > maxy) maxy = y; + if(y < miny) miny = y; + } + + this.graph.layoutMinX = minx; + this.graph.layoutMaxX = maxx; + this.graph.layoutMinY = miny; + this.graph.layoutMaxY = maxy; + }, + + layoutIteration: function() { + // Forces on nodes due to node-node repulsions + for (var i = 0; i < this.graph.nodes.length; i++) { + var node1 = this.graph.nodes[i]; + for (var j = i + 1; j < this.graph.nodes.length; j++) { + var node2 = this.graph.nodes[j]; + this.layoutRepulsive(node1, node2); + } + } + // Forces on nodes due to edge attractions + for (var i = 0; i < this.graph.edges.length; i++) { + var edge = this.graph.edges[i]; + this.layoutAttractive(edge); + } + + // Move by the given force + for (var i = 0; i < this.graph.nodes.length; i++) { + var node = this.graph.nodes[i]; + var xmove = this.c * node.layoutForceX; + var ymove = this.c * node.layoutForceY; + + var max = this.maxVertexMovement; + if(xmove > max) xmove = max; + if(xmove < -max) xmove = -max; + if(ymove > max) ymove = max; + if(ymove < -max) ymove = -max; + + node.layoutPosX += xmove; + node.layoutPosY += ymove; + node.layoutForceX = 0; + node.layoutForceY = 0; + } + }, + + layoutRepulsive: function(node1, node2) { + var dx = node2.layoutPosX - node1.layoutPosX; + var dy = node2.layoutPosY - node1.layoutPosY; + var d2 = dx * dx + dy * dy; + if(d2 < 0.01) { + dx = 0.1 * Math.random() + 0.1; + dy = 0.1 * Math.random() + 0.1; + var d2 = dx * dx + dy * dy; + } + var d = Math.sqrt(d2); + if(d < this.maxRepulsiveForceDistance) { + var repulsiveForce = this.k * this.k / d; + node2.layoutForceX += repulsiveForce * dx / d; + node2.layoutForceY += repulsiveForce * dy / d; + node1.layoutForceX -= repulsiveForce * dx / d; + node1.layoutForceY -= repulsiveForce * dy / d; + } + }, + + layoutAttractive: function(edge) { + var node1 = edge.source; + var node2 = edge.target; + + var dx = node2.layoutPosX - node1.layoutPosX; + var dy = node2.layoutPosY - node1.layoutPosY; + var d2 = dx * dx + dy * dy; + if(d2 < 0.01) { + dx = 0.1 * Math.random() + 0.1; + dy = 0.1 * Math.random() + 0.1; + var d2 = dx * dx + dy * dy; + } + var d = Math.sqrt(d2); + if(d > this.maxRepulsiveForceDistance) { + d = this.maxRepulsiveForceDistance; + d2 = d * d; + } + var attractiveForce = (d2 - this.k * this.k) / this.k; + if(edge.weight == undefined || edge.weight < 1) edge.weight = 1; + attractiveForce *= Math.log(edge.weight) * 0.5 + 1; + + node2.layoutForceX -= attractiveForce * dx / d; + node2.layoutForceY -= attractiveForce * dy / d; + node1.layoutForceX += attractiveForce * dx / d; + node1.layoutForceY += attractiveForce * dy / d; + } +}; diff --git a/presentations/Diskrete-Mathematik/isomorph-graph-example/graph1-js/raphael-min.js b/presentations/Diskrete-Mathematik/isomorph-graph-example/graph1-js/raphael-min.js new file mode 100644 index 0000000..8718b5b --- /dev/null +++ b/presentations/Diskrete-Mathematik/isomorph-graph-example/graph1-js/raphael-min.js @@ -0,0 +1,7 @@ +/* + * Raphael 1.3.1 - JavaScript Vector Library + * + * Copyright (c) 2008 - 2009 Dmitry Baranovskiy (http://raphaeljs.com) + * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. + */ +Raphael=(function(){var a=/[, ]+/,aO=/^(circle|rect|path|ellipse|text|image)$/,L=document,au=window,l={was:"Raphael" in au,is:au.Raphael},an=function(){if(an.is(arguments[0],"array")){var d=arguments[0],e=w[aW](an,d.splice(0,3+an.is(d[0],al))),S=e.set();for(var R=0,a0=d[m];R

";if(ag.childNodes[m]!=2){return null;}}an.svg=!(an.vml=an.type=="VML");aT[aY]=an[aY];an._id=0;an._oid=0;an.fn={};an.is=function(e,d){d=aZ.call(d);return((d=="object"||d=="undefined")&&typeof e==d)||(e==null&&d=="null")||aZ.call(aw.call(e).slice(8,-1))==d;};an.setWindow=function(d){au=d;L=au.document;};var aD=function(e){if(an.vml){var d=/^\s+|\s+$/g;aD=aj(function(R){var S;R=(R+at)[aP](d,at);try{var a0=new ActiveXObject("htmlfile");a0.write("");a0.close();S=a0.body;}catch(a2){S=createPopup().document.body;}var i=S.createTextRange();try{S.style.color=R;var a1=i.queryCommandValue("ForeColor");a1=((a1&255)<<16)|(a1&65280)|((a1&16711680)>>>16);return"#"+("000000"+a1[aA](16)).slice(-6);}catch(a2){return"none";}});}else{var E=L.createElement("i");E.title="Rapha\xebl Colour Picker";E.style.display="none";L.body[aL](E);aD=aj(function(i){E.style.color=i;return L.defaultView.getComputedStyle(E,at).getPropertyValue("color");});}return aD(e);};an.hsb2rgb=aj(function(a3,a1,a7){if(an.is(a3,"object")&&"h" in a3&&"s" in a3&&"b" in a3){a7=a3.b;a1=a3.s;a3=a3.h;}var R,S,a8;if(a7==0){return{r:0,g:0,b:0,hex:"#000"};}if(a3>1||a1>1||a7>1){a3/=255;a1/=255;a7/=255;}var a0=~~(a3*6),a4=(a3*6)-a0,E=a7*(1-a1),e=a7*(1-(a1*a4)),a9=a7*(1-(a1*(1-a4)));R=[a7,e,E,E,a9,a7,a7][a0];S=[a9,a7,a7,e,E,E,a9][a0];a8=[E,E,a9,a7,a7,e,E][a0];R*=255;S*=255;a8*=255;var a5={r:R,g:S,b:a8},d=(~~R)[aA](16),a2=(~~S)[aA](16),a6=(~~a8)[aA](16);d=d[aP](aU,"0");a2=a2[aP](aU,"0");a6=a6[aP](aU,"0");a5.hex="#"+d+a2+a6;return a5;},an);an.rgb2hsb=aj(function(d,e,a1){if(an.is(d,"object")&&"r" in d&&"g" in d&&"b" in d){a1=d.b;e=d.g;d=d.r;}if(an.is(d,"string")){var a3=an.getRGB(d);d=a3.r;e=a3.g;a1=a3.b;}if(d>1||e>1||a1>1){d/=255;e/=255;a1/=255;}var a0=g(d,e,a1),i=aI(d,e,a1),R,E,S=a0;if(i==a0){return{h:0,s:0,b:a0};}else{var a2=(a0-i);E=a2/a0;if(d==a0){R=(e-a1)/a2;}else{if(e==a0){R=2+((a1-d)/a2);}else{R=4+((d-e)/a2);}}R/=6;R<0&&R++;R>1&&R--;}return{h:R,s:E,b:S};},an);var aE=/,?([achlmqrstvxz]),?/gi;an._path2string=function(){return this.join(",")[aP](aE,"$1");};function aj(E,e,d){function i(){var R=Array[aY].slice.call(arguments,0),a0=R[az]("\u25ba"),S=i.cache=i.cache||{},a1=i.count=i.count||[];if(S[Q](a0)){return d?d(S[a0]):S[a0];}a1[m]>=1000&&delete S[a1.shift()];a1[f](a0);S[a0]=E[aW](e,R);return d?d(S[a0]):S[a0];}return i;}an.getRGB=aj(function(d){if(!d||!!((d=d+at).indexOf("-")+1)){return{r:-1,g:-1,b:-1,hex:"none",error:1};}if(d=="none"){return{r:-1,g:-1,b:-1,hex:"none"};}!(({hs:1,rg:1})[Q](d.substring(0,2))||d.charAt()=="#")&&(d=aD(d));var S,i,E,a2,a3,a0=d.match(x);if(a0){if(a0[2]){a2=G(a0[2].substring(5),16);E=G(a0[2].substring(3,5),16);i=G(a0[2].substring(1,3),16);}if(a0[3]){a2=G((a3=a0[3].charAt(3))+a3,16);E=G((a3=a0[3].charAt(2))+a3,16);i=G((a3=a0[3].charAt(1))+a3,16);}if(a0[4]){a0=a0[4][z](/\s*,\s*/);i=W(a0[0]);E=W(a0[1]);a2=W(a0[2]);}if(a0[5]){a0=a0[5][z](/\s*,\s*/);i=W(a0[0])*2.55;E=W(a0[1])*2.55;a2=W(a0[2])*2.55;}if(a0[6]){a0=a0[6][z](/\s*,\s*/);i=W(a0[0]);E=W(a0[1]);a2=W(a0[2]);return an.hsb2rgb(i,E,a2);}if(a0[7]){a0=a0[7][z](/\s*,\s*/);i=W(a0[0])*2.55;E=W(a0[1])*2.55;a2=W(a0[2])*2.55;return an.hsb2rgb(i,E,a2);}a0={r:i,g:E,b:a2};var e=(~~i)[aA](16),R=(~~E)[aA](16),a1=(~~a2)[aA](16);e=e[aP](aU,"0");R=R[aP](aU,"0");a1=a1[aP](aU,"0");a0.hex="#"+e+R+a1;return a0;}return{r:-1,g:-1,b:-1,hex:"none",error:1};},an);an.getColor=function(e){var i=this.getColor.start=this.getColor.start||{h:0,s:1,b:e||0.75},d=this.hsb2rgb(i.h,i.s,i.b);i.h+=0.075;if(i.h>1){i.h=0;i.s-=0.2;i.s<=0&&(this.getColor.start={h:0,s:1,b:i.b});}return d.hex;};an.getColor.reset=function(){delete this.start;};an.parsePathString=aj(function(d){if(!d){return null;}var i={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},e=[];if(an.is(d,"array")&&an.is(d[0],"array")){e=av(d);}if(!e[m]){(d+at)[aP](/([achlmqstvz])[\s,]*((-?\d*\.?\d*(?:e[-+]?\d+)?\s*,?\s*)+)/ig,function(R,E,a1){var a0=[],S=aZ.call(E);a1[aP](/(-?\d*\.?\d*(?:e[-+]?\d+)?)\s*,?\s*/ig,function(a3,a2){a2&&a0[f](+a2);});while(a0[m]>=i[S]){e[f]([E][aS](a0.splice(0,i[S])));if(!i[S]){break;}}});}e[aA]=an._path2string;return e;});an.findDotsAtSegment=function(e,d,be,bc,a0,R,a2,a1,a8){var a6=1-a8,a5=aM(a6,3)*e+aM(a6,2)*3*a8*be+a6*3*a8*a8*a0+aM(a8,3)*a2,a3=aM(a6,3)*d+aM(a6,2)*3*a8*bc+a6*3*a8*a8*R+aM(a8,3)*a1,ba=e+2*a8*(be-e)+a8*a8*(a0-2*be+e),a9=d+2*a8*(bc-d)+a8*a8*(R-2*bc+d),bd=be+2*a8*(a0-be)+a8*a8*(a2-2*a0+be),bb=bc+2*a8*(R-bc)+a8*a8*(a1-2*R+bc),a7=(1-a8)*e+a8*be,a4=(1-a8)*d+a8*bc,E=(1-a8)*a0+a8*a2,i=(1-a8)*R+a8*a1,S=(90-ab.atan((ba-bd)/(a9-bb))*180/ab.PI);(ba>bd||a91){bi=ab.sqrt(by)*bi;bg=ab.sqrt(by)*bg;}var E=bi*bi,br=bg*bg,bt=(a4==S?-1:1)*ab.sqrt(ab.abs((E*br-E*bn*bn-br*bo*bo)/(E*bn*bn+br*bo*bo))),bd=bt*bi*bn/bg+(a9+a8)/2,bc=bt*-bg*bo/bi+(bE+bD)/2,a3=ab.asin(((bE-bc)/bg).toFixed(7)),a2=ab.asin(((bD-bc)/bg).toFixed(7));a3=a9a2){a3=a3-R*2;}if(!S&&a2>a3){a2=a2-R*2;}}else{a3=bb[0];a2=bb[1];bd=bb[2];bc=bb[3];}var a7=a2-a3;if(ab.abs(a7)>bf){var be=a2,bh=a8,a5=bD;a2=a3+bf*(S&&a2>a3?1:-1);a8=bd+bi*ab.cos(a2);bD=bc+bg*ab.sin(a2);bm=K(a8,bD,bi,bg,ba,0,S,bh,a5,[a2,be,bd,bc]);}a7=a2-a3;var a1=ab.cos(a3),bC=ab.sin(a3),a0=ab.cos(a2),bB=ab.sin(a2),bp=ab.tan(a7/4),bs=4/3*bi*bp,bq=4/3*bg*bp,bz=[a9,bE],bx=[a9+bs*bC,bE-bq*a1],bw=[a8+bs*bB,bD-bq*a0],bu=[a8,bD];bx[0]=2*bz[0]-bx[0];bx[1]=2*bz[1]-bx[1];if(bb){return[bx,bw,bu][aS](bm);}else{bm=[bx,bw,bu][aS](bm)[az]()[z](",");var bk=[];for(var bv=0,bl=bm[m];bv1000000000000&&(a0=0.5);ab.abs(S)>1000000000000&&(S=0.5);if(a0>0&&a0<1){e=M(i,d,R,E,a9,a8,a5,a2,a0);a6[f](e.x);a3[f](e.y);}if(S>0&&S<1){e=M(i,d,R,E,a9,a8,a5,a2,S);a6[f](e.x);a3[f](e.y);}a7=(a8-2*E+d)-(a2-2*a8+E);a4=2*(E-d)-2*(a8-E);a1=d-E;a0=(-a4+ab.sqrt(a4*a4-4*a7*a1))/2/a7;S=(-a4-ab.sqrt(a4*a4-4*a7*a1))/2/a7;ab.abs(a0)>1000000000000&&(a0=0.5);ab.abs(S)>1000000000000&&(S=0.5);if(a0>0&&a0<1){e=M(i,d,R,E,a9,a8,a5,a2,a0);a6[f](e.x);a3[f](e.y);}if(S>0&&S<1){e=M(i,d,R,E,a9,a8,a5,a2,S);a6[f](e.x);a3[f](e.y);}return{min:{x:aI[aW](0,a6),y:aI[aW](0,a3)},max:{x:g[aW](0,a6),y:g[aW](0,a3)}};}),H=aj(function(a9,a4){var R=r(a9),a5=a4&&r(a4),a6={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},d={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},a0=function(ba,bb){var i,bc;if(!ba){return["C",bb.x,bb.y,bb.x,bb.y,bb.x,bb.y];}!(ba[0] in {T:1,Q:1})&&(bb.qx=bb.qy=null);switch(ba[0]){case"M":bb.X=ba[1];bb.Y=ba[2];break;case"A":ba=["C"][aS](K[aW](0,[bb.x,bb.y][aS](ba.slice(1))));break;case"S":i=bb.x+(bb.x-(bb.bx||bb.x));bc=bb.y+(bb.y-(bb.by||bb.y));ba=["C",i,bc][aS](ba.slice(1));break;case"T":bb.qx=bb.x+(bb.x-(bb.qx||bb.x));bb.qy=bb.y+(bb.y-(bb.qy||bb.y));ba=["C"][aS](aK(bb.x,bb.y,bb.qx,bb.qy,ba[1],ba[2]));break;case"Q":bb.qx=ba[1];bb.qy=ba[2];ba=["C"][aS](aK(bb.x,bb.y,ba[1],ba[2],ba[3],ba[4]));break;case"L":ba=["C"][aS](aX(bb.x,bb.y,ba[1],ba[2]));break;case"H":ba=["C"][aS](aX(bb.x,bb.y,ba[1],bb.y));break;case"V":ba=["C"][aS](aX(bb.x,bb.y,bb.x,ba[1]));break;case"Z":ba=["C"][aS](aX(bb.x,bb.y,bb.X,bb.Y));break;}return ba;},e=function(ba,bb){if(ba[bb][m]>7){ba[bb].shift();var bc=ba[bb];while(bc[m]){ba.splice(bb++,0,["C"][aS](bc.splice(0,6)));}ba.splice(bb,1);a7=g(R[m],a5&&a5[m]||0);}},E=function(be,bd,bb,ba,bc){if(be&&bd&&be[bc][0]=="M"&&bd[bc][0]!="M"){bd.splice(bc,0,["M",ba.x,ba.y]);bb.bx=0;bb.by=0;bb.x=be[bc][1];bb.y=be[bc][2];a7=g(R[m],a5&&a5[m]||0);}};for(var a2=0,a7=g(R[m],a5&&a5[m]||0);a23){return{container:1,x:arguments[0],y:arguments[1],width:arguments[2],height:arguments[3]};}}},aG=function(d,i){var e=this;for(var E in i){if(i[Q](E)&&!(E in d)){switch(typeof i[E]){case"function":(function(R){d[E]=d===e?R:function(){return R[aW](e,arguments);};})(i[E]);break;case"object":d[E]=d[E]||{};aG.call(this,d[E],i[E]);break;default:d[E]=i[E];break;}}}},ak=function(d,e){d==e.top&&(e.top=d.prev);d==e.bottom&&(e.bottom=d.next);d.next&&(d.next.prev=d.prev);d.prev&&(d.prev.next=d.next);},Y=function(d,e){if(e.top===d){return;}ak(d,e);d.next=null;d.prev=e.top;e.top.next=d;e.top=d;},k=function(d,e){if(e.bottom===d){return;}ak(d,e);d.next=e.bottom;d.prev=null;e.bottom.prev=d;e.bottom=d;},A=function(e,d,i){ak(e,i);d==i.top&&(i.top=e);d.next&&(d.next.prev=e);e.next=d.next;e.prev=d;d.next=e;},aq=function(e,d,i){ak(e,i);d==i.bottom&&(i.bottom=e);d.prev&&(d.prev.next=e);e.prev=d.prev;d.prev=e;e.next=d;},s=function(d){return function(){throw new Error("Rapha\xebl: you are calling to method \u201c"+d+"\u201d of removed object");};},ar=/^r(?:\(([^,]+?)\s*,\s*([^\)]+?)\))?/;if(an.svg){aT[aY].svgns="http://www.w3.org/2000/svg";aT[aY].xlink="http://www.w3.org/1999/xlink";var O=function(d){return +d+(~~d===d)*0.5;},V=function(S){for(var e=0,E=S[m];e0.5)*2-1);aM(a1-0.5,2)+aM(S-0.5,2)>0.25&&(S=ab.sqrt(0.25-aM(a1-0.5,2))*ba+0.5)&&S!=0.5&&(S=S.toFixed(5)-0.00001*ba);}return at;});a7=a7[z](/\s*\-\s*/);if(a4=="linear"){var a0=a7.shift();a0=-W(a0);if(isNaN(a0)){return null;}var R=[0,0,ab.cos(a0*ab.PI/180),ab.sin(a0*ab.PI/180)],a6=1/(g(ab.abs(R[2]),ab.abs(R[3]))||1);R[2]*=a6;R[3]*=a6;if(R[2]<0){R[0]=-R[2];R[2]=0;}if(R[3]<0){R[1]=-R[3];R[3]=0;}}var a3=p(a7);if(!a3){return null;}var e=aJ(a4+"Gradient");e.id="r"+(an._id++)[aA](36);aJ(e,a4=="radial"?{fx:a1,fy:S}:{x1:R[0],y1:R[1],x2:R[2],y2:R[3]});d.defs[aL](e);for(var a2=0,a8=a3[m];a2a1.height)&&(a1.height=a0.y+a0.height-a1.y);(a0.x+a0.width-a1.x>a1.width)&&(a1.width=a0.x+a0.width-a1.x);}}E&&this.hide();return a1;};ax[aY].attr=function(){if(this.removed){return this;}if(arguments[m]==0){var R={};for(var E in this.attrs){if(this.attrs[Q](E)){R[E]=this.attrs[E];}}this._.rt.deg&&(R.rotation=this.rotate());(this._.sx!=1||this._.sy!=1)&&(R.scale=this.scale());R.gradient&&R.fill=="none"&&(R.fill=R.gradient)&&delete R.gradient;return R;}if(arguments[m]==1&&an.is(arguments[0],"string")){if(arguments[0]=="translation"){return t.call(this);}if(arguments[0]=="rotation"){return this.rotate();}if(arguments[0]=="scale"){return this.scale();}if(arguments[0]=="fill"&&this.attrs.fill=="none"&&this.attrs.gradient){return this.attrs.gradient;}return this.attrs[arguments[0]];}if(arguments[m]==1&&an.is(arguments[0],"array")){var d={};for(var e in arguments[0]){if(arguments[0][Q](e)){d[arguments[0][e]]=this.attrs[arguments[0][e]];}}return d;}if(arguments[m]==2){var S={};S[arguments[0]]=arguments[1];aa(this,S);}else{if(arguments[m]==1&&an.is(arguments[0],"object")){aa(this,arguments[0]);}}return this;};ax[aY].toFront=function(){if(this.removed){return this;}this.node.parentNode[aL](this.node);var d=this.paper;d.top!=this&&Y(this,d);return this;};ax[aY].toBack=function(){if(this.removed){return this;}if(this.node.parentNode.firstChild!=this.node){this.node.parentNode.insertBefore(this.node,this.node.parentNode.firstChild);k(this,this.paper);var d=this.paper;}return this;};ax[aY].insertAfter=function(d){if(this.removed){return this;}var e=d.node;if(e.nextSibling){e.parentNode.insertBefore(this.node,e.nextSibling);}else{e.parentNode[aL](this.node);}A(this,d,this.paper);return this;};ax[aY].insertBefore=function(d){if(this.removed){return this;}var e=d.node;e.parentNode.insertBefore(this.node,e);aq(this,d,this.paper);return this;};var P=function(e,d,S,R){d=O(d);S=O(S);var E=aJ("circle");e.canvas&&e.canvas[aL](E);var i=new ax(E,e);i.attrs={cx:d,cy:S,r:R,fill:"none",stroke:"#000"};i.type="circle";aJ(E,i.attrs);return i;};var aF=function(i,d,a1,e,S,a0){d=O(d);a1=O(a1);var R=aJ("rect");i.canvas&&i.canvas[aL](R);var E=new ax(R,i);E.attrs={x:d,y:a1,width:e,height:S,r:a0||0,rx:a0||0,ry:a0||0,fill:"none",stroke:"#000"};E.type="rect";aJ(R,E.attrs);return E;};var ai=function(e,d,a0,S,R){d=O(d);a0=O(a0);var E=aJ("ellipse");e.canvas&&e.canvas[aL](E);var i=new ax(E,e);i.attrs={cx:d,cy:a0,rx:S,ry:R,fill:"none",stroke:"#000"};i.type="ellipse";aJ(E,i.attrs);return i;};var o=function(i,a0,d,a1,e,S){var R=aJ("image");aJ(R,{x:d,y:a1,width:e,height:S,preserveAspectRatio:"none"});R.setAttributeNS(i.xlink,"href",a0);i.canvas&&i.canvas[aL](R);var E=new ax(R,i);E.attrs={x:d,y:a1,width:e,height:S,src:a0};E.type="image";return E;};var X=function(e,d,S,R){var E=aJ("text");aJ(E,{x:d,y:S,"text-anchor":"middle"});e.canvas&&e.canvas[aL](E);var i=new ax(E,e);i.attrs={x:d,y:S,"text-anchor":"middle",text:R,font:j.font,stroke:"none",fill:"#000"};i.type="text";aa(i,i.attrs);return i;};var aV=function(e,d){this.width=e||this.width;this.height=d||this.height;this.canvas[v]("width",this.width);this.canvas[v]("height",this.height);return this;};var w=function(){var E=ao[aW](null,arguments),i=E&&E.container,e=E.x,a0=E.y,R=E.width,d=E.height;if(!i){throw new Error("SVG container not found.");}var S=aJ("svg");R=R||512;d=d||342;aJ(S,{xmlns:"http://www.w3.org/2000/svg",version:1.1,width:R,height:d});if(i==1){S.style.cssText="position:absolute;left:"+e+"px;top:"+a0+"px";L.body[aL](S);}else{if(i.firstChild){i.insertBefore(S,i.firstChild);}else{i[aL](S);}}i=new aT;i.width=R;i.height=d;i.canvas=S;aG.call(i,i,an.fn);i.clear();return i;};aT[aY].clear=function(){var d=this.canvas;while(d.firstChild){d.removeChild(d.firstChild);}this.bottom=this.top=null;(this.desc=aJ("desc"))[aL](L.createTextNode("Created with Rapha\xebl"));d[aL](this.desc);d[aL](this.defs=aJ("defs"));};aT[aY].remove=function(){this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas);for(var d in this){this[d]=s(d);}};}if(an.vml){var aH=function(a8){var a5=/[ahqstv]/ig,a0=r;(a8+at).match(a5)&&(a0=H);a5=/[clmz]/g;if(a0==r&&!(a8+at).match(a5)){var e={M:"m",L:"l",C:"c",Z:"x",m:"t",l:"r",c:"v",z:"x"},R=/([clmz]),?([^clmz]*)/gi,S=/-?[^,\s-]+/g;var a4=(a8+at)[aP](R,function(a9,bb,i){var ba=[];i[aP](S,function(bc){ba[f](O(bc));});return e[bb]+ba;});return a4;}var a6=a0(a8),E,a4=[],d;for(var a2=0,a7=a6[m];a21&&(e=1);a7.opacity=e;}a8.fill&&(a7.on=true);if(a7.on==null||a8.fill=="none"){a7.on=false;}if(a7.on&&a8.fill){var i=a8.fill.match(c);if(i){a7.src=i[1];a7.type="tile";}else{a7.color=an.getRGB(a8.fill).hex;a7.src=at;a7.type="solid";if(an.getRGB(a8.fill).error&&(bd.type in {circle:1,ellipse:1}||(a8.fill+at).charAt()!="r")&&b(bd,a8.fill)){a9.fill="none";a9.gradient=a8.fill;}}}ba&&a6[aL](a7);var R=(a6.getElementsByTagName("stroke")&&a6.getElementsByTagName("stroke")[0]),bb=false;!R&&(bb=R=ah("stroke"));if((a8.stroke&&a8.stroke!="none")||a8["stroke-width"]||a8["stroke-opacity"]!=null||a8["stroke-dasharray"]||a8["stroke-miterlimit"]||a8["stroke-linejoin"]||a8["stroke-linecap"]){R.on=true;}(a8.stroke=="none"||R.on==null||a8.stroke==0||a8["stroke-width"]==0)&&(R.on=false);R.on&&a8.stroke&&(R.color=an.getRGB(a8.stroke).hex);var e=((+a9["stroke-opacity"]+1||2)-1)*((+a9.opacity+1||2)-1),a4=(W(a8["stroke-width"])||1)*0.75;e<0&&(e=0);e>1&&(e=1);a8["stroke-width"]==null&&(a4=a9["stroke-width"]);a8["stroke-width"]&&(R.weight=a4);a4&&a4<1&&(e*=a4)&&(R.weight=1);R.opacity=e;a8["stroke-linejoin"]&&(R.joinstyle=a8["stroke-linejoin"]||"miter");R.miterlimit=a8["stroke-miterlimit"]||8;a8["stroke-linecap"]&&(R.endcap=a8["stroke-linecap"]=="butt"?"flat":a8["stroke-linecap"]=="square"?"square":"round");if(a8["stroke-dasharray"]){var a5={"-":"shortdash",".":"shortdot","-.":"shortdashdot","-..":"shortdashdotdot",". ":"dot","- ":"dash","--":"longdash","- .":"dashdot","--.":"longdashdot","--..":"longdashdotdot"};R.dashstyle=a5[Q](a8["stroke-dasharray"])?a5[a8["stroke-dasharray"]]:at;}bb&&a6[aL](R);}if(bd.type=="text"){var a0=bd.paper.span.style;a9.font&&(a0.font=a9.font);a9["font-family"]&&(a0.fontFamily=a9["font-family"]);a9["font-size"]&&(a0.fontSize=a9["font-size"]);a9["font-weight"]&&(a0.fontWeight=a9["font-weight"]);a9["font-style"]&&(a0.fontStyle=a9["font-style"]);bd.node.string&&(bd.paper.span.innerHTML=(bd.node.string+at)[aP](/"));bd.W=a9.w=bd.paper.span.offsetWidth;bd.H=a9.h=bd.paper.span.offsetHeight;bd.X=a9.x;bd.Y=a9.y+O(bd.H/2);switch(a9["text-anchor"]){case"start":bd.node.style["v-text-align"]="left";bd.bbx=O(bd.W/2);break;case"end":bd.node.style["v-text-align"]="right";bd.bbx=-O(bd.W/2);break;default:bd.node.style["v-text-align"]="center";break;}}};var b=function(d,a1){d.attrs=d.attrs||{};var a2=d.attrs,a4=d.node.getElementsByTagName("fill"),S="linear",a0=".5 .5";d.attrs.gradient=a1;a1=(a1+at)[aP](ar,function(a6,a7,i){S="radial";if(a7&&i){a7=W(a7);i=W(i);aM(a7-0.5,2)+aM(i-0.5,2)>0.25&&(i=ab.sqrt(0.25-aM(a7-0.5,2))*((i>0.5)*2-1)+0.5);a0=a7+am+i;}return at;});a1=a1[z](/\s*\-\s*/);if(S=="linear"){var e=a1.shift();e=-W(e);if(isNaN(e)){return null;}}var R=p(a1);if(!R){return null;}d=d.shape||d.node;a4=a4[0]||ah("fill");if(R[m]){a4.on=true;a4.method="none";a4.type=(S=="radial")?"gradientradial":"gradient";a4.color=R[0].color;a4.color2=R[R[m]-1].color;var a5=[];for(var E=0,a3=R[m];E');};}catch(af){ah=function(d){return L.createElement("<"+d+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">');};}var w=function(){var i=ao[aW](null,arguments),d=i.container,a2=i.height,a3,e=i.width,a1=i.x,a0=i.y;if(!d){throw new Error("VML container not found.");}var R=new aT,S=R.canvas=L.createElement("div"),E=S.style;e=e||512;a2=a2||342;e==+e&&(e+="px");a2==+a2&&(a2+="px");R.width=1000;R.height=1000;R.coordsize="1000 1000";R.coordorigin="0 0";R.span=L.createElement("span");R.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;";S[aL](R.span);E.cssText=an.format("width:{0};height:{1};position:absolute;clip:rect(0 {0} {1} 0);overflow:hidden",e,a2);if(d==1){L.body[aL](S);E.left=a1+"px";E.top=a0+"px";}else{d.style.width=e;d.style.height=a2;if(d.firstChild){d.insertBefore(S,d.firstChild);}else{d[aL](S);}}aG.call(R,R,an.fn);return R;};aT[aY].clear=function(){this.canvas.innerHTML=at;this.span=L.createElement("span");this.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;";this.canvas[aL](this.span);this.bottom=this.top=null;};aT[aY].remove=function(){this.canvas.parentNode.removeChild(this.canvas);for(var d in this){this[d]=s(d);}};}if((/^Apple|^Google/).test(navigator.vendor)&&!(navigator.userAgent.indexOf("Version/4.0")+1)){aT[aY].safari=function(){var d=this.rect(-99,-99,this.width+99,this.height+99);setTimeout(function(){d.remove();});};}else{aT[aY].safari=function(){};}var ae=(function(){if(L.addEventListener){return function(R,i,e,d){var E=function(S){return e.call(d,S);};R.addEventListener(i,E,false);return function(){R.removeEventListener(i,E,false);return true;};};}else{if(L.attachEvent){return function(S,E,i,e){var R=function(a0){return i.call(e,a0||au.event);};S.attachEvent("on"+E,R);var d=function(){S.detachEvent("on"+E,R);return true;};return d;};}}})();for(var ac=F[m];ac--;){(function(d){ax[aY][d]=function(e){if(an.is(e,"function")){this.events=this.events||[];this.events.push({name:d,f:e,unbind:ae(this.shape||this.node,d,e,this)});}return this;};ax[aY]["un"+d]=function(E){var i=this.events,e=i[m];while(e--){if(i[e].name==d&&i[e].f==E){i[e].unbind();i.splice(e,1);!i.length&&delete this.events;return this;}}return this;};})(F[ac]);}ax[aY].hover=function(e,d){return this.mouseover(e).mouseout(d);};ax[aY].unhover=function(e,d){return this.unmouseover(e).unmouseout(d);};aT[aY].circle=function(d,i,e){return P(this,d||0,i||0,e||0);};aT[aY].rect=function(d,R,e,i,E){return aF(this,d||0,R||0,e||0,i||0,E||0);};aT[aY].ellipse=function(d,E,i,e){return ai(this,d||0,E||0,i||0,e||0);};aT[aY].path=function(d){d&&!an.is(d,"string")&&!an.is(d[0],"array")&&(d+=at);return q(an.format[aW](an,arguments),this);};aT[aY].image=function(E,d,R,e,i){return o(this,E||"about:blank",d||0,R||0,e||0,i||0);};aT[aY].text=function(d,i,e){return X(this,d||0,i||0,e||at);};aT[aY].set=function(d){arguments[m]>1&&(d=Array[aY].splice.call(arguments,0,arguments[m]));return new T(d);};aT[aY].setSize=aV;aT[aY].top=aT[aY].bottom=null;aT[aY].raphael=an;function u(){return this.x+am+this.y;}ax[aY].scale=function(a6,a5,E,e){if(a6==null&&a5==null){return{x:this._.sx,y:this._.sy,toString:u};}a5=a5||a6;!+a5&&(a5=a6);var ba,a8,a9,a7,bm=this.attrs;if(a6!=0){var a4=this.getBBox(),a1=a4.x+a4.width/2,R=a4.y+a4.height/2,bl=a6/this._.sx,bk=a5/this._.sy;E=(+E||E==0)?E:a1;e=(+e||e==0)?e:R;var a3=~~(a6/ab.abs(a6)),a0=~~(a5/ab.abs(a5)),be=this.node.style,bo=E+(a1-E)*bl,bn=e+(R-e)*bk;switch(this.type){case"rect":case"image":var a2=bm.width*a3*bl,bd=bm.height*a0*bk;this.attr({height:bd,r:bm.r*aI(a3*bl,a0*bk),width:a2,x:bo-a2/2,y:bn-bd/2});break;case"circle":case"ellipse":this.attr({rx:bm.rx*a3*bl,ry:bm.ry*a0*bk,r:bm.r*aI(a3*bl,a0*bk),cx:bo,cy:bn});break;case"path":var bg=ad(bm.path),bh=true;for(var bj=0,bc=bg[m];bjS){if(e&&!a8.start){a6=an.findDotsAtSegment(a5,a4,E[1],E[2],E[3],E[4],E[5],E[6],(S-a3)/a1);R+=["C",a6.start.x,a6.start.y,a6.m.x,a6.m.y,a6.x,a6.y];if(a0){return R;}a8.start=R;R=["M",a6.x,a6.y+"C",a6.n.x,a6.n.y,a6.end.x,a6.end.y,E[5],E[6]][az]();a3+=a1;a5=+E[5];a4=+E[6];continue;}if(!d&&!e){a6=an.findDotsAtSegment(a5,a4,E[1],E[2],E[3],E[4],E[5],E[6],(S-a3)/a1);return{x:a6.x,y:a6.y,alpha:a6.alpha};}}a3+=a1;a5=+E[5];a4=+E[6];}R+=E;}a8.end=R;a6=d?a3:e?a8:an.findDotsAtSegment(a5,a4,E[1],E[2],E[3],E[4],E[5],E[6],1);a6.alpha&&(a6={x:a6.x,y:a6.y,alpha:a6.alpha});return a6;};},n=aj(function(E,d,a0,S,a6,a5,a4,a3){var R={x:0,y:0},a2=0;for(var a1=0;a1<1.01;a1+=0.01){var e=M(E,d,a0,S,a6,a5,a4,a3,a1);a1&&(a2+=ab.sqrt(aM(R.x-e.x,2)+aM(R.y-e.y,2)));R=e;}return a2;});var ap=aB(1),C=aB(),J=aB(0,1);ax[aY].getTotalLength=function(){if(this.type!="path"){return;}return ap(this.attrs.path);};ax[aY].getPointAtLength=function(d){if(this.type!="path"){return;}return C(this.attrs.path,d);};ax[aY].getSubpath=function(i,e){if(this.type!="path"){return;}if(ab.abs(this.getTotalLength()-e)<0.000001){return J(this.attrs.path,i).end;}var d=J(this.attrs.path,e,1);return i?J(d,i).end:d;};an.easing_formulas={linear:function(d){return d;},"<":function(d){return aM(d,3);},">":function(d){return aM(d-1,3)+1;},"<>":function(d){d=d*2;if(d<1){return aM(d,3)/2;}d-=2;return(aM(d,3)+2)/2;},backIn:function(e){var d=1.70158;return e*e*((d+1)*e-d);},backOut:function(e){e=e-1;var d=1.70158;return e*e*((d+1)*e+d)+1;},elastic:function(i){if(i==0||i==1){return i;}var e=0.3,d=e/4;return aM(2,-10*i)*ab.sin((i-d)*(2*ab.PI)/e)+1;},bounce:function(E){var e=7.5625,i=2.75,d;if(E<(1/i)){d=e*E*E;}else{if(E<(2/i)){E-=(1.5/i);d=e*E*E+0.75;}else{if(E<(2.5/i)){E-=(2.25/i);d=e*E*E+0.9375;}else{E-=(2.625/i);d=e*E*E+0.984375;}}}return d;}};var I={length:0},aR=function(){var a2=+new Date;for(var be in I){if(be!="length"&&I[Q](be)){var bj=I[be];if(bj.stop){delete I[be];I[m]--;continue;}var a0=a2-bj.start,bb=bj.ms,ba=bj.easing,bf=bj.from,a7=bj.diff,E=bj.to,a6=bj.t,a9=bj.prev||0,a1=bj.el,R=bj.callback,a8={},d;if(a0255?255:(d<0?0:d);},t=function(d,i){if(d==null){return{x:this._.tx,y:this._.ty,toString:u};}this._.tx+=+d;this._.ty+=+i;switch(this.type){case"circle":case"ellipse":this.attr({cx:+d+this.attrs.cx,cy:+i+this.attrs.cy});break;case"rect":case"image":case"text":this.attr({x:+d+this.attrs.x,y:+i+this.attrs.y});break;case"path":var e=ad(this.attrs.path);e[0][1]+=+d;e[0][2]+=+i;this.attr({path:e});break;}return this;};ax[aY].animateWith=function(e,i,d,R,E){I[e.id]&&(i.start=I[e.id].start);return this.animate(i,d,R,E);};ax[aY].animateAlong=ay();ax[aY].animateAlongBack=ay(1);function ay(d){return function(E,i,e,S){var R={back:d};an.is(e,"function")?(S=e):(R.rot=e);E&&E.constructor==ax&&(E=E.attrs.path);E&&(R.along=E);return this.animate(R,i,S);};}ax[aY].onAnimation=function(d){this._run=d||0;return this;};ax[aY].animate=function(be,a5,a4,E){if(an.is(a4,"function")||!a4){E=a4||null;}var a9={},e={},a2={};for(var a6 in be){if(be[Q](a6)){if(Z[Q](a6)){a9[a6]=this.attr(a6);(a9[a6]==null)&&(a9[a6]=j[a6]);e[a6]=be[a6];switch(Z[a6]){case"along":var bc=ap(be[a6]),a7=C(be[a6],bc*!!be.back),R=this.getBBox();a2[a6]=bc/a5;a2.tx=R.x;a2.ty=R.y;a2.sx=a7.x;a2.sy=a7.y;e.rot=be.rot;e.back=be.back;e.len=bc;be.rot&&(a2.r=W(this.rotate())||0);break;case"number":a2[a6]=(e[a6]-a9[a6])/a5;break;case"colour":a9[a6]=an.getRGB(a9[a6]);var a8=an.getRGB(e[a6]);a2[a6]={r:(a8.r-a9[a6].r)/a5,g:(a8.g-a9[a6].g)/a5,b:(a8.b-a9[a6].b)/a5};break;case"path":var S=H(a9[a6],e[a6]);a9[a6]=S[0];var a3=S[1];a2[a6]=[];for(var bb=0,a1=a9[a6][m];bb +
+ + + + +
+ +
+ + + diff --git a/presentations/Diskrete-Mathematik/isomorph-graph-example/graph2.html b/presentations/Diskrete-Mathematik/isomorph-graph-example/graph2.html new file mode 100644 index 0000000..4dca637 --- /dev/null +++ b/presentations/Diskrete-Mathematik/isomorph-graph-example/graph2.html @@ -0,0 +1,53 @@ + + + + Graph example + + + + + + + +
1
+
2
+
3
+
4
+
5
+ + + + + +