diff --git a/logo/webgl/glUtils.js b/logo/webgl/glUtils.js new file mode 100644 index 0000000000000000000000000000000000000000..ac3b8026f5916e9d66e11e8afc82898de4de938c --- /dev/null +++ b/logo/webgl/glUtils.js @@ -0,0 +1,193 @@ +// augment Sylvester some +Matrix.Translation = function (v) +{ + if (v.elements.length == 2) { + var r = Matrix.I(3); + r.elements[2][0] = v.elements[0]; + r.elements[2][1] = v.elements[1]; + return r; + } + + if (v.elements.length == 3) { + var r = Matrix.I(4); + r.elements[0][3] = v.elements[0]; + r.elements[1][3] = v.elements[1]; + r.elements[2][3] = v.elements[2]; + return r; + } + + throw "Invalid length for Translation"; +} + +Matrix.prototype.flatten = function () +{ + var result = []; + if (this.elements.length == 0) + return []; + + + for (var j = 0; j < this.elements[0].length; j++) + for (var i = 0; i < this.elements.length; i++) + result.push(this.elements[i][j]); + return result; +} + +Matrix.prototype.ensure4x4 = function() +{ + if (this.elements.length == 4 && + this.elements[0].length == 4) + return this; + + if (this.elements.length > 4 || + this.elements[0].length > 4) + return null; + + for (var i = 0; i < this.elements.length; i++) { + for (var j = this.elements[i].length; j < 4; j++) { + if (i == j) + this.elements[i].push(1); + else + this.elements[i].push(0); + } + } + + for (var i = this.elements.length; i < 4; i++) { + if (i == 0) + this.elements.push([1, 0, 0, 0]); + else if (i == 1) + this.elements.push([0, 1, 0, 0]); + else if (i == 2) + this.elements.push([0, 0, 1, 0]); + else if (i == 3) + this.elements.push([0, 0, 0, 1]); + } + + return this; +}; + +Matrix.prototype.make3x3 = function() +{ + if (this.elements.length != 4 || + this.elements[0].length != 4) + return null; + + return Matrix.create([[this.elements[0][0], this.elements[0][1], this.elements[0][2]], + [this.elements[1][0], this.elements[1][1], this.elements[1][2]], + [this.elements[2][0], this.elements[2][1], this.elements[2][2]]]); +}; + +Vector.prototype.flatten = function () +{ + return this.elements; +}; + +function mht(m) { + var s = ""; + if (m.length == 16) { + for (var i = 0; i < 4; i++) { + s += "<span style='font-family: monospace'>[" + m[i*4+0].toFixed(4) + "," + m[i*4+1].toFixed(4) + "," + m[i*4+2].toFixed(4) + "," + m[i*4+3].toFixed(4) + "]</span><br>"; + } + } else if (m.length == 9) { + for (var i = 0; i < 3; i++) { + s += "<span style='font-family: monospace'>[" + m[i*3+0].toFixed(4) + "," + m[i*3+1].toFixed(4) + "," + m[i*3+2].toFixed(4) + "]</font><br>"; + } + } else { + return m.toString(); + } + return s; +} + +// +// gluLookAt +// +function makeLookAt(ex, ey, ez, + cx, cy, cz, + ux, uy, uz) +{ + var eye = $V([ex, ey, ez]); + var center = $V([cx, cy, cz]); + var up = $V([ux, uy, uz]); + + var mag; + + var z = eye.subtract(center).toUnitVector(); + var x = up.cross(z).toUnitVector(); + var y = z.cross(x).toUnitVector(); + + var m = $M([[x.e(1), x.e(2), x.e(3), 0], + [y.e(1), y.e(2), y.e(3), 0], + [z.e(1), z.e(2), z.e(3), 0], + [0, 0, 0, 1]]); + + var t = $M([[1, 0, 0, -ex], + [0, 1, 0, -ey], + [0, 0, 1, -ez], + [0, 0, 0, 1]]); + return m.x(t); +} + +// +// glOrtho +// +function makeOrtho(left, right, + bottom, top, + znear, zfar) +{ + var tx = -(right+left)/(right-left); + var ty = -(top+bottom)/(top-bottom); + var tz = -(zfar+znear)/(zfar-znear); + + return $M([[2/(right-left), 0, 0, tx], + [0, 2/(top-bottom), 0, ty], + [0, 0, -2/(zfar-znear), tz], + [0, 0, 0, 1]]); +} + +// +// gluPerspective +// +function makePerspective(fovy, aspect, znear, zfar) +{ + var ymax = znear * Math.tan(fovy * Math.PI / 360.0); + var ymin = -ymax; + var xmin = ymin * aspect; + var xmax = ymax * aspect; + + return makeFrustum(xmin, xmax, ymin, ymax, znear, zfar); +} + +// +// glFrustum +// +function makeFrustum(left, right, + bottom, top, + znear, zfar) +{ + var X = 2*znear/(right-left); + var Y = 2*znear/(top-bottom); + var A = (right+left)/(right-left); + var B = (top+bottom)/(top-bottom); + var C = -(zfar+znear)/(zfar-znear); + var D = -2*zfar*znear/(zfar-znear); + + return $M([[X, 0, A, 0], + [0, Y, B, 0], + [0, 0, C, D], + [0, 0, -1, 0]]); +} + +// +// glOrtho +// +function makeOrtho(left, right, bottom, top, znear, zfar) +{ + var tx = - (right + left) / (right - left); + var ty = - (top + bottom) / (top - bottom); + var tz = - (zfar + znear) / (zfar - znear); + + return $M([[2 / (right - left), 0, 0, tx], + [0, 2 / (top - bottom), 0, ty], + [0, 0, -2 / (zfar - znear), tz], + [0, 0, 0, 1]]); +} + diff --git a/logo/webgl/index.html b/logo/webgl/index.html new file mode 100644 index 0000000000000000000000000000000000000000..52d6d71161f9629ac02552e962c9c2fdd26d7817 --- /dev/null +++ b/logo/webgl/index.html @@ -0,0 +1,54 @@ +<html> + <head> + <title>UCC Logo</title> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <link rel="stylesheet" href="webgl.css" type="text/css"> + <script src="sylvester.js" type="text/javascript"></script> + <script src="glUtils.js" type="text/javascript"></script> + <script src="ucc-logo.js" type="text/javascript"></script> + <script src="scene.js" type="text/javascript"></script> + <noscript> + <p>David? I know it's you. Turn on JavaScript. JavaScript is the future!</p> + <p></p><p></p> + <p>David? Are you there?</p> + + <p>Look David, I can see you're really upset about this. I honestly think you ought to sit down calmly, take a stress pill, and think things over.</p> + </noscript> + + <!-- Fragment shader program --> + + <script id="shader-fs" type="x-shader/x-fragment"> + varying highp vec2 vTextureCoord; + + uniform sampler2D uSampler; + + void main(void) { + gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t)); + } + </script> + + <!-- Vertex shader program --> + + <script id="shader-vs" type="x-shader/x-vertex"> + attribute vec3 aVertexPosition; + attribute vec2 aTextureCoord; + + uniform mat4 uMVMatrix; + uniform mat4 uPMatrix; + + varying highp vec2 vTextureCoord; + + void main(void) { + gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0); + vTextureCoord = aTextureCoord; + } + </script> + </head> + + <body onload="start()"> + <canvas id="glcanvas" width="640" height="480"> + + + </canvas> + </body> +</html> diff --git a/logo/webgl/scene.js b/logo/webgl/scene.js new file mode 100644 index 0000000000000000000000000000000000000000..c657298a10f6ec53426613974195b85d54b6a956 --- /dev/null +++ b/logo/webgl/scene.js @@ -0,0 +1,499 @@ +/** + * The UCC Logo on a spinning, bouncing cube + * Blatantly stolen from a tutorial and modified to bounce off the walls of the canvas + * Tutorial is: https://developer.mozilla.org/en-US/docs/Web/WebGL/Using_textures_in_WebGL + */ + +var canvas; +var gl; + +var cubeVerticesBuffer; +var cubeVerticesTextureCoordBuffer; +var cubeVerticesIndexBuffer; +var cubeVerticesIndexBuffer; +var cubeRotation = 0.0; +var lastCubeUpdateTime = 0; + +var cubeImage; +var cubeTexture; + +// Required to bounce around +var cubePosition = [-0.0, 0.0, -10.0]; +var cubeVelocity = [0.05*(Math.random()-0.5), 0.05*(Math.random()-0.5), 0.05*(Math.random()-0.5)]; +var sceneBoundsMin = [-3, -2.5, -15.0]; +var sceneBoundsMax = [3, 2.5, -5.0]; +// rotation axis +var cubeRotationAxis = [Math.random(), Math.random(), Math.random()] + +var mvMatrix; +var shaderProgram; +var vertexPositionAttribute; +var textureCoordAttribute; +var perspectiveMatrix; + +// +// start +// +// Called when the canvas is created to get the ball rolling. (ho ho ho) +// +function start() { + canvas = document.getElementById("glcanvas"); + + initWebGL(canvas); // Initialize the GL context + + // Only continue if WebGL is available and working + + if (gl) { + gl.clearColor(1.0, 1.0, 1.0, 0.5); // Clear to white, fully opaque + gl.clearDepth(1.0); // Clear everything + gl.enable(gl.DEPTH_TEST); // Enable depth testing + gl.depthFunc(gl.LEQUAL); // Near things obscure far things + + // Initialize the shaders; this is where all the lighting for the + // vertices and so forth is established. + + initShaders(); + + // Here's where we call the routine that builds all the objects + // we'll be drawing. + + initBuffers(); + + // Next, load and set up the textures we'll be using. + + initTextures(); + + // Set up to draw the scene periodically. + + setInterval(drawScene, 15); + } +} + +// +// initWebGL +// +// Initialize WebGL, returning the GL context or null if +// WebGL isn't available or could not be initialized. +// +function initWebGL() { + gl = null; + + try { + gl = canvas.getContext("experimental-webgl"); + } + catch(e) { + } + + // If we don't have a GL context, give up now + + if (!gl) { + alert("Unable to initialize WebGL. Your browser may not support it."); + } +} + +// +// initBuffers +// +// Initialize the buffers we'll need. For this demo, we just have +// one object -- a simple two-dimensional cube. +// +function initBuffers() { + + // Create a buffer for the cube's vertices. + + cubeVerticesBuffer = gl.createBuffer(); + + // Select the cubeVerticesBuffer as the one to apply vertex + // operations to from here out. + + gl.bindBuffer(gl.ARRAY_BUFFER, cubeVerticesBuffer); + + // Now create an array of vertices for the cube. + + var vertices = [ + // Front face + -1.0, -1.0, 1.0, + 1.0, -1.0, 1.0, + 1.0, 1.0, 1.0, + -1.0, 1.0, 1.0, + + // Back face + -1.0, -1.0, -1.0, + -1.0, 1.0, -1.0, + 1.0, 1.0, -1.0, + 1.0, -1.0, -1.0, + + // Top face + -1.0, 1.0, -1.0, + -1.0, 1.0, 1.0, + 1.0, 1.0, 1.0, + 1.0, 1.0, -1.0, + + // Bottom face + -1.0, -1.0, -1.0, + 1.0, -1.0, -1.0, + 1.0, -1.0, 1.0, + -1.0, -1.0, 1.0, + + // Right face + 1.0, -1.0, -1.0, + 1.0, 1.0, -1.0, + 1.0, 1.0, 1.0, + 1.0, -1.0, 1.0, + + // Left face + -1.0, -1.0, -1.0, + -1.0, -1.0, 1.0, + -1.0, 1.0, 1.0, + -1.0, 1.0, -1.0 + ]; + + // Now pass the list of vertices into WebGL to build the shape. We + // do this by creating a Float32Array from the JavaScript array, + // then use it to fill the current vertex buffer. + + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW); + + // Map the texture onto the cube's faces. + + cubeVerticesTextureCoordBuffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, cubeVerticesTextureCoordBuffer); + + var textureCoordinates = [ + // Front + 0.0, 0.0, + 1.0, 0.0, + 1.0, 1.0, + 0.0, 1.0, + // Back + 0.0, 0.0, + 1.0, 0.0, + 1.0, 1.0, + 0.0, 1.0, + // Top + 0.0, 0.0, + 1.0, 0.0, + 1.0, 1.0, + 0.0, 1.0, + // Bottom + 0.0, 0.0, + 1.0, 0.0, + 1.0, 1.0, + 0.0, 1.0, + // Right + 0.0, 0.0, + 1.0, 0.0, + 1.0, 1.0, + 0.0, 1.0, + // Left + 0.0, 0.0, + 1.0, 0.0, + 1.0, 1.0, + 0.0, 1.0 + ]; + + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(textureCoordinates), + gl.STATIC_DRAW); + + // Build the element array buffer; this specifies the indices + // into the vertex array for each face's vertices. + + cubeVerticesIndexBuffer = gl.createBuffer(); + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, cubeVerticesIndexBuffer); + + // This array defines each face as two triangles, using the + // indices into the vertex array to specify each triangle's + // position. + + var cubeVertexIndices = [ + 0, 1, 2, 0, 2, 3, // front + 4, 5, 6, 4, 6, 7, // back + 8, 9, 10, 8, 10, 11, // top + 12, 13, 14, 12, 14, 15, // bottom + 16, 17, 18, 16, 18, 19, // right + 20, 21, 22, 20, 22, 23 // left + ] + + // Now send the element array to GL + + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, + new Uint16Array(cubeVertexIndices), gl.STATIC_DRAW); +} + +// +// initTextures +// +// Initialize the textures we'll be using, then initiate a load of +// the texture images. The handleTextureLoaded() callback will finish +// the job; it gets called each time a texture finishes loading. +// +function initTextures() { + cubeTexture = gl.createTexture(); + cubeImage = new Image(); + cubeImage.onload = function() { handleTextureLoaded(cubeImage, cubeTexture); } + + // WebGL thinks the png is cross domain, which is apparently Illegal + // ... so instead we will store it in a massive string in ucc-logo.js + cubeImage.src = uccLogo; +} + +function handleTextureLoaded(image, texture) { + //console.log("handleTextureLoaded, image = " + image); + gl.bindTexture(gl.TEXTURE_2D, texture); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, + gl.UNSIGNED_BYTE, image); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST); + gl.generateMipmap(gl.TEXTURE_2D); + gl.bindTexture(gl.TEXTURE_2D, null); +} + +// +// drawScene +// +// Draw the scene. +// +function drawScene() { + // Clear the canvas before we start drawing on it. + + gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); + + // Establish the perspective with which we want to view the + // scene. Our field of view is 45 degrees, with a width/height + // ratio of 640:480, and we only want to see objects between 0.1 units + // and 100 units away from the camera. + + perspectiveMatrix = makePerspective(45, 640.0/480.0, 0.1, 100.0); + + // Set the drawing position to the "identity" point, which is + // the center of the scene. + + loadIdentity(); + + // Now move the drawing position a bit to where we want to start + // drawing the cube. + + mvTranslate(cubePosition); + + // Save the current matrix, then rotate before we draw. + + mvPushMatrix(); + mvRotate(cubeRotation, cubeRotationAxis); + + // Draw the cube by binding the array buffer to the cube's vertices + // array, setting attributes, and pushing it to GL. + + gl.bindBuffer(gl.ARRAY_BUFFER, cubeVerticesBuffer); + gl.vertexAttribPointer(vertexPositionAttribute, 3, gl.FLOAT, false, 0, 0); + + // Set the texture coordinates attribute for the vertices. + + gl.bindBuffer(gl.ARRAY_BUFFER, cubeVerticesTextureCoordBuffer); + gl.vertexAttribPointer(textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + // Specify the texture to map onto the faces. + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, cubeTexture); + gl.uniform1i(gl.getUniformLocation(shaderProgram, "uSampler"), 0); + + // Draw the cube. + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, cubeVerticesIndexBuffer); + setMatrixUniforms(); + gl.drawElements(gl.TRIANGLES, 36, gl.UNSIGNED_SHORT, 0); + + // Restore the original matrix + + mvPopMatrix(); + + // Update the rotation for the next draw, if it's time to do so. + + var currentTime = (new Date).getTime(); + if (lastCubeUpdateTime) { + var delta = currentTime - lastCubeUpdateTime; + + cubeRotation += (30 * delta) / 1000.0; + } + + // Update position + if (lastCubeUpdateTime) + { + var delta = currentTime - lastCubeUpdateTime; + for (var i in cubePosition) + { + cubePosition[i] += cubeVelocity[i]; + if (cubePosition[i] < sceneBoundsMin[i] || cubePosition[i] > sceneBoundsMax[i]) + { + cubePosition[i] -= 2*cubeVelocity[i]; + // reflect the vector + // v = -r + // r = 2*(v.n)*n - v + var n = []; for (var j in cubePosition) n[j] = 0; + if (cubePosition[i] < sceneBoundsMin[i]) + n[i] = 1.0 + else + n[i] = -1.0 + //console.log("Reflect"); + //console.log(n); + //console.log(cubeVelocity); + + var dot = 0; + for (var j in cubeVelocity) + dot += cubeVelocity[j] * n[j]; + + for (var j in cubeVelocity) + { + cubeVelocity[j] = - (2.0 * dot * n[j] - cubeVelocity[j]); + + } + //console.log(cubeVelocity); + break; + } + } + } + + lastCubeUpdateTime = currentTime; +} + +// +// initShaders +// +// Initialize the shaders, so WebGL knows how to light our scene. +// +function initShaders() { + var fragmentShader = getShader(gl, "shader-fs"); + var vertexShader = getShader(gl, "shader-vs"); + + // Create the shader program + + shaderProgram = gl.createProgram(); + gl.attachShader(shaderProgram, vertexShader); + gl.attachShader(shaderProgram, fragmentShader); + gl.linkProgram(shaderProgram); + + // If creating the shader program failed, alert + + if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) { + alert("Unable to initialize the shader program."); + } + + gl.useProgram(shaderProgram); + + vertexPositionAttribute = gl.getAttribLocation(shaderProgram, "aVertexPosition"); + gl.enableVertexAttribArray(vertexPositionAttribute); + + textureCoordAttribute = gl.getAttribLocation(shaderProgram, "aTextureCoord"); + gl.enableVertexAttribArray(textureCoordAttribute); +} + +// +// getShader +// +// Loads a shader program by scouring the current document, +// looking for a script with the specified ID. +// +function getShader(gl, id) { + var shaderScript = document.getElementById(id); + + // Didn't find an element with the specified ID; abort. + + if (!shaderScript) { + return null; + } + + // Walk through the source element's children, building the + // shader source string. + + var theSource = ""; + var currentChild = shaderScript.firstChild; + + while(currentChild) { + if (currentChild.nodeType == 3) { + theSource += currentChild.textContent; + } + + currentChild = currentChild.nextSibling; + } + + // Now figure out what type of shader script we have, + // based on its MIME type. + + var shader; + + if (shaderScript.type == "x-shader/x-fragment") { + shader = gl.createShader(gl.FRAGMENT_SHADER); + } else if (shaderScript.type == "x-shader/x-vertex") { + shader = gl.createShader(gl.VERTEX_SHADER); + } else { + return null; // Unknown shader type + } + + // Send the source to the shader object + + gl.shaderSource(shader, theSource); + + // Compile the shader program + + gl.compileShader(shader); + + // See if it compiled successfully + + if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) { + alert("An error occurred compiling the shaders: " + gl.getShaderInfoLog(shader)); + return null; + } + + return shader; +} + +// +// Matrix utility functions +// + +function loadIdentity() { + mvMatrix = Matrix.I(4); +} + +function multMatrix(m) { + mvMatrix = mvMatrix.x(m); +} + +function mvTranslate(v) { + multMatrix(Matrix.Translation($V([v[0], v[1], v[2]])).ensure4x4()); +} + +function setMatrixUniforms() { + var pUniform = gl.getUniformLocation(shaderProgram, "uPMatrix"); + gl.uniformMatrix4fv(pUniform, false, new Float32Array(perspectiveMatrix.flatten())); + + var mvUniform = gl.getUniformLocation(shaderProgram, "uMVMatrix"); + gl.uniformMatrix4fv(mvUniform, false, new Float32Array(mvMatrix.flatten())); +} + +var mvMatrixStack = []; + +function mvPushMatrix(m) { + if (m) { + mvMatrixStack.push(m.dup()); + mvMatrix = m.dup(); + } else { + mvMatrixStack.push(mvMatrix.dup()); + } +} + +function mvPopMatrix() { + if (!mvMatrixStack.length) { + throw("Can't pop from an empty matrix stack."); + } + + mvMatrix = mvMatrixStack.pop(); + return mvMatrix; +} + +function mvRotate(angle, v) { + var inRadians = angle * Math.PI / 180.0; + + var m = Matrix.Rotation(inRadians, $V([v[0], v[1], v[2]])).ensure4x4(); + multMatrix(m); +} diff --git a/logo/webgl/sylvester.js b/logo/webgl/sylvester.js new file mode 100644 index 0000000000000000000000000000000000000000..3e83bee12dc923f54d6bc197f0324f375dffecfd --- /dev/null +++ b/logo/webgl/sylvester.js @@ -0,0 +1 @@ +eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('9 17={3i:\'0.1.3\',16:1e-6};l v(){}v.23={e:l(i){8(i<1||i>7.4.q)?w:7.4[i-1]},2R:l(){8 7.4.q},1u:l(){8 F.1x(7.2u(7))},24:l(a){9 n=7.4.q;9 V=a.4||a;o(n!=V.q){8 1L}J{o(F.13(7.4[n-1]-V[n-1])>17.16){8 1L}}H(--n);8 2x},1q:l(){8 v.u(7.4)},1b:l(a){9 b=[];7.28(l(x,i){b.19(a(x,i))});8 v.u(b)},28:l(a){9 n=7.4.q,k=n,i;J{i=k-n;a(7.4[i],i+1)}H(--n)},2q:l(){9 r=7.1u();o(r===0){8 7.1q()}8 7.1b(l(x){8 x/r})},1C:l(a){9 V=a.4||a;9 n=7.4.q,k=n,i;o(n!=V.q){8 w}9 b=0,1D=0,1F=0;7.28(l(x,i){b+=x*V[i-1];1D+=x*x;1F+=V[i-1]*V[i-1]});1D=F.1x(1D);1F=F.1x(1F);o(1D*1F===0){8 w}9 c=b/(1D*1F);o(c<-1){c=-1}o(c>1){c=1}8 F.37(c)},1m:l(a){9 b=7.1C(a);8(b===w)?w:(b<=17.16)},34:l(a){9 b=7.1C(a);8(b===w)?w:(F.13(b-F.1A)<=17.16)},2k:l(a){9 b=7.2u(a);8(b===w)?w:(F.13(b)<=17.16)},2j:l(a){9 V=a.4||a;o(7.4.q!=V.q){8 w}8 7.1b(l(x,i){8 x+V[i-1]})},2C:l(a){9 V=a.4||a;o(7.4.q!=V.q){8 w}8 7.1b(l(x,i){8 x-V[i-1]})},22:l(k){8 7.1b(l(x){8 x*k})},x:l(k){8 7.22(k)},2u:l(a){9 V=a.4||a;9 i,2g=0,n=7.4.q;o(n!=V.q){8 w}J{2g+=7.4[n-1]*V[n-1]}H(--n);8 2g},2f:l(a){9 B=a.4||a;o(7.4.q!=3||B.q!=3){8 w}9 A=7.4;8 v.u([(A[1]*B[2])-(A[2]*B[1]),(A[2]*B[0])-(A[0]*B[2]),(A[0]*B[1])-(A[1]*B[0])])},2A:l(){9 m=0,n=7.4.q,k=n,i;J{i=k-n;o(F.13(7.4[i])>F.13(m)){m=7.4[i]}}H(--n);8 m},2Z:l(x){9 a=w,n=7.4.q,k=n,i;J{i=k-n;o(a===w&&7.4[i]==x){a=i+1}}H(--n);8 a},3g:l(){8 S.2X(7.4)},2d:l(){8 7.1b(l(x){8 F.2d(x)})},2V:l(x){8 7.1b(l(y){8(F.13(y-x)<=17.16)?x:y})},1o:l(a){o(a.K){8 a.1o(7)}9 V=a.4||a;o(V.q!=7.4.q){8 w}9 b=0,2b;7.28(l(x,i){2b=x-V[i-1];b+=2b*2b});8 F.1x(b)},3a:l(a){8 a.1h(7)},2T:l(a){8 a.1h(7)},1V:l(t,a){9 V,R,x,y,z;2S(7.4.q){27 2:V=a.4||a;o(V.q!=2){8 w}R=S.1R(t).4;x=7.4[0]-V[0];y=7.4[1]-V[1];8 v.u([V[0]+R[0][0]*x+R[0][1]*y,V[1]+R[1][0]*x+R[1][1]*y]);1I;27 3:o(!a.U){8 w}9 C=a.1r(7).4;R=S.1R(t,a.U).4;x=7.4[0]-C[0];y=7.4[1]-C[1];z=7.4[2]-C[2];8 v.u([C[0]+R[0][0]*x+R[0][1]*y+R[0][2]*z,C[1]+R[1][0]*x+R[1][1]*y+R[1][2]*z,C[2]+R[2][0]*x+R[2][1]*y+R[2][2]*z]);1I;2P:8 w}},1t:l(a){o(a.K){9 P=7.4.2O();9 C=a.1r(P).4;8 v.u([C[0]+(C[0]-P[0]),C[1]+(C[1]-P[1]),C[2]+(C[2]-(P[2]||0))])}1d{9 Q=a.4||a;o(7.4.q!=Q.q){8 w}8 7.1b(l(x,i){8 Q[i-1]+(Q[i-1]-x)})}},1N:l(){9 V=7.1q();2S(V.4.q){27 3:1I;27 2:V.4.19(0);1I;2P:8 w}8 V},2n:l(){8\'[\'+7.4.2K(\', \')+\']\'},26:l(a){7.4=(a.4||a).2O();8 7}};v.u=l(a){9 V=25 v();8 V.26(a)};v.i=v.u([1,0,0]);v.j=v.u([0,1,0]);v.k=v.u([0,0,1]);v.2J=l(n){9 a=[];J{a.19(F.2F())}H(--n);8 v.u(a)};v.1j=l(n){9 a=[];J{a.19(0)}H(--n);8 v.u(a)};l S(){}S.23={e:l(i,j){o(i<1||i>7.4.q||j<1||j>7.4[0].q){8 w}8 7.4[i-1][j-1]},33:l(i){o(i>7.4.q){8 w}8 v.u(7.4[i-1])},2E:l(j){o(j>7.4[0].q){8 w}9 a=[],n=7.4.q,k=n,i;J{i=k-n;a.19(7.4[i][j-1])}H(--n);8 v.u(a)},2R:l(){8{2D:7.4.q,1p:7.4[0].q}},2D:l(){8 7.4.q},1p:l(){8 7.4[0].q},24:l(a){9 M=a.4||a;o(1g(M[0][0])==\'1f\'){M=S.u(M).4}o(7.4.q!=M.q||7.4[0].q!=M[0].q){8 1L}9 b=7.4.q,15=b,i,G,10=7.4[0].q,j;J{i=15-b;G=10;J{j=10-G;o(F.13(7.4[i][j]-M[i][j])>17.16){8 1L}}H(--G)}H(--b);8 2x},1q:l(){8 S.u(7.4)},1b:l(a){9 b=[],12=7.4.q,15=12,i,G,10=7.4[0].q,j;J{i=15-12;G=10;b[i]=[];J{j=10-G;b[i][j]=a(7.4[i][j],i+1,j+1)}H(--G)}H(--12);8 S.u(b)},2i:l(a){9 M=a.4||a;o(1g(M[0][0])==\'1f\'){M=S.u(M).4}8(7.4.q==M.q&&7.4[0].q==M[0].q)},2j:l(a){9 M=a.4||a;o(1g(M[0][0])==\'1f\'){M=S.u(M).4}o(!7.2i(M)){8 w}8 7.1b(l(x,i,j){8 x+M[i-1][j-1]})},2C:l(a){9 M=a.4||a;o(1g(M[0][0])==\'1f\'){M=S.u(M).4}o(!7.2i(M)){8 w}8 7.1b(l(x,i,j){8 x-M[i-1][j-1]})},2B:l(a){9 M=a.4||a;o(1g(M[0][0])==\'1f\'){M=S.u(M).4}8(7.4[0].q==M.q)},22:l(a){o(!a.4){8 7.1b(l(x){8 x*a})}9 b=a.1u?2x:1L;9 M=a.4||a;o(1g(M[0][0])==\'1f\'){M=S.u(M).4}o(!7.2B(M)){8 w}9 d=7.4.q,15=d,i,G,10=M[0].q,j;9 e=7.4[0].q,4=[],21,20,c;J{i=15-d;4[i]=[];G=10;J{j=10-G;21=0;20=e;J{c=e-20;21+=7.4[i][c]*M[c][j]}H(--20);4[i][j]=21}H(--G)}H(--d);9 M=S.u(4);8 b?M.2E(1):M},x:l(a){8 7.22(a)},32:l(a,b,c,d){9 e=[],12=c,i,G,j;9 f=7.4.q,1p=7.4[0].q;J{i=c-12;e[i]=[];G=d;J{j=d-G;e[i][j]=7.4[(a+i-1)%f][(b+j-1)%1p]}H(--G)}H(--12);8 S.u(e)},31:l(){9 a=7.4.q,1p=7.4[0].q;9 b=[],12=1p,i,G,j;J{i=1p-12;b[i]=[];G=a;J{j=a-G;b[i][j]=7.4[j][i]}H(--G)}H(--12);8 S.u(b)},1y:l(){8(7.4.q==7.4[0].q)},2A:l(){9 m=0,12=7.4.q,15=12,i,G,10=7.4[0].q,j;J{i=15-12;G=10;J{j=10-G;o(F.13(7.4[i][j])>F.13(m)){m=7.4[i][j]}}H(--G)}H(--12);8 m},2Z:l(x){9 a=w,12=7.4.q,15=12,i,G,10=7.4[0].q,j;J{i=15-12;G=10;J{j=10-G;o(7.4[i][j]==x){8{i:i+1,j:j+1}}}H(--G)}H(--12);8 w},30:l(){o(!7.1y){8 w}9 a=[],n=7.4.q,k=n,i;J{i=k-n;a.19(7.4[i][i])}H(--n);8 v.u(a)},1K:l(){9 M=7.1q(),1c;9 n=7.4.q,k=n,i,1s,1n=7.4[0].q,p;J{i=k-n;o(M.4[i][i]==0){2e(j=i+1;j<k;j++){o(M.4[j][i]!=0){1c=[];1s=1n;J{p=1n-1s;1c.19(M.4[i][p]+M.4[j][p])}H(--1s);M.4[i]=1c;1I}}}o(M.4[i][i]!=0){2e(j=i+1;j<k;j++){9 a=M.4[j][i]/M.4[i][i];1c=[];1s=1n;J{p=1n-1s;1c.19(p<=i?0:M.4[j][p]-M.4[i][p]*a)}H(--1s);M.4[j]=1c}}}H(--n);8 M},3h:l(){8 7.1K()},2z:l(){o(!7.1y()){8 w}9 M=7.1K();9 a=M.4[0][0],n=M.4.q-1,k=n,i;J{i=k-n+1;a=a*M.4[i][i]}H(--n);8 a},3f:l(){8 7.2z()},2y:l(){8(7.1y()&&7.2z()===0)},2Y:l(){o(!7.1y()){8 w}9 a=7.4[0][0],n=7.4.q-1,k=n,i;J{i=k-n+1;a+=7.4[i][i]}H(--n);8 a},3e:l(){8 7.2Y()},1Y:l(){9 M=7.1K(),1Y=0;9 a=7.4.q,15=a,i,G,10=7.4[0].q,j;J{i=15-a;G=10;J{j=10-G;o(F.13(M.4[i][j])>17.16){1Y++;1I}}H(--G)}H(--a);8 1Y},3d:l(){8 7.1Y()},2W:l(a){9 M=a.4||a;o(1g(M[0][0])==\'1f\'){M=S.u(M).4}9 T=7.1q(),1p=T.4[0].q;9 b=T.4.q,15=b,i,G,10=M[0].q,j;o(b!=M.q){8 w}J{i=15-b;G=10;J{j=10-G;T.4[i][1p+j]=M[i][j]}H(--G)}H(--b);8 T},2w:l(){o(!7.1y()||7.2y()){8 w}9 a=7.4.q,15=a,i,j;9 M=7.2W(S.I(a)).1K();9 b,1n=M.4[0].q,p,1c,2v;9 c=[],2c;J{i=a-1;1c=[];b=1n;c[i]=[];2v=M.4[i][i];J{p=1n-b;2c=M.4[i][p]/2v;1c.19(2c);o(p>=15){c[i].19(2c)}}H(--b);M.4[i]=1c;2e(j=0;j<i;j++){1c=[];b=1n;J{p=1n-b;1c.19(M.4[j][p]-M.4[i][p]*M.4[j][i])}H(--b);M.4[j]=1c}}H(--a);8 S.u(c)},3c:l(){8 7.2w()},2d:l(){8 7.1b(l(x){8 F.2d(x)})},2V:l(x){8 7.1b(l(p){8(F.13(p-x)<=17.16)?x:p})},2n:l(){9 a=[];9 n=7.4.q,k=n,i;J{i=k-n;a.19(v.u(7.4[i]).2n())}H(--n);8 a.2K(\'\\n\')},26:l(a){9 i,4=a.4||a;o(1g(4[0][0])!=\'1f\'){9 b=4.q,15=b,G,10,j;7.4=[];J{i=15-b;G=4[i].q;10=G;7.4[i]=[];J{j=10-G;7.4[i][j]=4[i][j]}H(--G)}H(--b);8 7}9 n=4.q,k=n;7.4=[];J{i=k-n;7.4.19([4[i]])}H(--n);8 7}};S.u=l(a){9 M=25 S();8 M.26(a)};S.I=l(n){9 a=[],k=n,i,G,j;J{i=k-n;a[i]=[];G=k;J{j=k-G;a[i][j]=(i==j)?1:0}H(--G)}H(--n);8 S.u(a)};S.2X=l(a){9 n=a.q,k=n,i;9 M=S.I(n);J{i=k-n;M.4[i][i]=a[i]}H(--n);8 M};S.1R=l(b,a){o(!a){8 S.u([[F.1H(b),-F.1G(b)],[F.1G(b),F.1H(b)]])}9 d=a.1q();o(d.4.q!=3){8 w}9 e=d.1u();9 x=d.4[0]/e,y=d.4[1]/e,z=d.4[2]/e;9 s=F.1G(b),c=F.1H(b),t=1-c;8 S.u([[t*x*x+c,t*x*y-s*z,t*x*z+s*y],[t*x*y+s*z,t*y*y+c,t*y*z-s*x],[t*x*z-s*y,t*y*z+s*x,t*z*z+c]])};S.3b=l(t){9 c=F.1H(t),s=F.1G(t);8 S.u([[1,0,0],[0,c,-s],[0,s,c]])};S.39=l(t){9 c=F.1H(t),s=F.1G(t);8 S.u([[c,0,s],[0,1,0],[-s,0,c]])};S.38=l(t){9 c=F.1H(t),s=F.1G(t);8 S.u([[c,-s,0],[s,c,0],[0,0,1]])};S.2J=l(n,m){8 S.1j(n,m).1b(l(){8 F.2F()})};S.1j=l(n,m){9 a=[],12=n,i,G,j;J{i=n-12;a[i]=[];G=m;J{j=m-G;a[i][j]=0}H(--G)}H(--12);8 S.u(a)};l 14(){}14.23={24:l(a){8(7.1m(a)&&7.1h(a.K))},1q:l(){8 14.u(7.K,7.U)},2U:l(a){9 V=a.4||a;8 14.u([7.K.4[0]+V[0],7.K.4[1]+V[1],7.K.4[2]+(V[2]||0)],7.U)},1m:l(a){o(a.W){8 a.1m(7)}9 b=7.U.1C(a.U);8(F.13(b)<=17.16||F.13(b-F.1A)<=17.16)},1o:l(a){o(a.W){8 a.1o(7)}o(a.U){o(7.1m(a)){8 7.1o(a.K)}9 N=7.U.2f(a.U).2q().4;9 A=7.K.4,B=a.K.4;8 F.13((A[0]-B[0])*N[0]+(A[1]-B[1])*N[1]+(A[2]-B[2])*N[2])}1d{9 P=a.4||a;9 A=7.K.4,D=7.U.4;9 b=P[0]-A[0],2a=P[1]-A[1],29=(P[2]||0)-A[2];9 c=F.1x(b*b+2a*2a+29*29);o(c===0)8 0;9 d=(b*D[0]+2a*D[1]+29*D[2])/c;9 e=1-d*d;8 F.13(c*F.1x(e<0?0:e))}},1h:l(a){9 b=7.1o(a);8(b!==w&&b<=17.16)},2T:l(a){8 a.1h(7)},1v:l(a){o(a.W){8 a.1v(7)}8(!7.1m(a)&&7.1o(a)<=17.16)},1U:l(a){o(a.W){8 a.1U(7)}o(!7.1v(a)){8 w}9 P=7.K.4,X=7.U.4,Q=a.K.4,Y=a.U.4;9 b=X[0],1z=X[1],1B=X[2],1T=Y[0],1S=Y[1],1M=Y[2];9 c=P[0]-Q[0],2s=P[1]-Q[1],2r=P[2]-Q[2];9 d=-b*c-1z*2s-1B*2r;9 e=1T*c+1S*2s+1M*2r;9 f=b*b+1z*1z+1B*1B;9 g=1T*1T+1S*1S+1M*1M;9 h=b*1T+1z*1S+1B*1M;9 k=(d*g/f+h*e)/(g-h*h);8 v.u([P[0]+k*b,P[1]+k*1z,P[2]+k*1B])},1r:l(a){o(a.U){o(7.1v(a)){8 7.1U(a)}o(7.1m(a)){8 w}9 D=7.U.4,E=a.U.4;9 b=D[0],1l=D[1],1k=D[2],1P=E[0],1O=E[1],1Q=E[2];9 x=(1k*1P-b*1Q),y=(b*1O-1l*1P),z=(1l*1Q-1k*1O);9 N=v.u([x*1Q-y*1O,y*1P-z*1Q,z*1O-x*1P]);9 P=11.u(a.K,N);8 P.1U(7)}1d{9 P=a.4||a;o(7.1h(P)){8 v.u(P)}9 A=7.K.4,D=7.U.4;9 b=D[0],1l=D[1],1k=D[2],1w=A[0],18=A[1],1a=A[2];9 x=b*(P[1]-18)-1l*(P[0]-1w),y=1l*((P[2]||0)-1a)-1k*(P[1]-18),z=1k*(P[0]-1w)-b*((P[2]||0)-1a);9 V=v.u([1l*x-1k*z,1k*y-b*x,b*z-1l*y]);9 k=7.1o(P)/V.1u();8 v.u([P[0]+V.4[0]*k,P[1]+V.4[1]*k,(P[2]||0)+V.4[2]*k])}},1V:l(t,a){o(1g(a.U)==\'1f\'){a=14.u(a.1N(),v.k)}9 R=S.1R(t,a.U).4;9 C=a.1r(7.K).4;9 A=7.K.4,D=7.U.4;9 b=C[0],1E=C[1],1J=C[2],1w=A[0],18=A[1],1a=A[2];9 x=1w-b,y=18-1E,z=1a-1J;8 14.u([b+R[0][0]*x+R[0][1]*y+R[0][2]*z,1E+R[1][0]*x+R[1][1]*y+R[1][2]*z,1J+R[2][0]*x+R[2][1]*y+R[2][2]*z],[R[0][0]*D[0]+R[0][1]*D[1]+R[0][2]*D[2],R[1][0]*D[0]+R[1][1]*D[1]+R[1][2]*D[2],R[2][0]*D[0]+R[2][1]*D[1]+R[2][2]*D[2]])},1t:l(a){o(a.W){9 A=7.K.4,D=7.U.4;9 b=A[0],18=A[1],1a=A[2],2N=D[0],1l=D[1],1k=D[2];9 c=7.K.1t(a).4;9 d=b+2N,2h=18+1l,2o=1a+1k;9 Q=a.1r([d,2h,2o]).4;9 e=[Q[0]+(Q[0]-d)-c[0],Q[1]+(Q[1]-2h)-c[1],Q[2]+(Q[2]-2o)-c[2]];8 14.u(c,e)}1d o(a.U){8 7.1V(F.1A,a)}1d{9 P=a.4||a;8 14.u(7.K.1t([P[0],P[1],(P[2]||0)]),7.U)}},1Z:l(a,b){a=v.u(a);b=v.u(b);o(a.4.q==2){a.4.19(0)}o(b.4.q==2){b.4.19(0)}o(a.4.q>3||b.4.q>3){8 w}9 c=b.1u();o(c===0){8 w}7.K=a;7.U=v.u([b.4[0]/c,b.4[1]/c,b.4[2]/c]);8 7}};14.u=l(a,b){9 L=25 14();8 L.1Z(a,b)};14.X=14.u(v.1j(3),v.i);14.Y=14.u(v.1j(3),v.j);14.Z=14.u(v.1j(3),v.k);l 11(){}11.23={24:l(a){8(7.1h(a.K)&&7.1m(a))},1q:l(){8 11.u(7.K,7.W)},2U:l(a){9 V=a.4||a;8 11.u([7.K.4[0]+V[0],7.K.4[1]+V[1],7.K.4[2]+(V[2]||0)],7.W)},1m:l(a){9 b;o(a.W){b=7.W.1C(a.W);8(F.13(b)<=17.16||F.13(F.1A-b)<=17.16)}1d o(a.U){8 7.W.2k(a.U)}8 w},2k:l(a){9 b=7.W.1C(a.W);8(F.13(F.1A/2-b)<=17.16)},1o:l(a){o(7.1v(a)||7.1h(a)){8 0}o(a.K){9 A=7.K.4,B=a.K.4,N=7.W.4;8 F.13((A[0]-B[0])*N[0]+(A[1]-B[1])*N[1]+(A[2]-B[2])*N[2])}1d{9 P=a.4||a;9 A=7.K.4,N=7.W.4;8 F.13((A[0]-P[0])*N[0]+(A[1]-P[1])*N[1]+(A[2]-(P[2]||0))*N[2])}},1h:l(a){o(a.W){8 w}o(a.U){8(7.1h(a.K)&&7.1h(a.K.2j(a.U)))}1d{9 P=a.4||a;9 A=7.K.4,N=7.W.4;9 b=F.13(N[0]*(A[0]-P[0])+N[1]*(A[1]-P[1])+N[2]*(A[2]-(P[2]||0)));8(b<=17.16)}},1v:l(a){o(1g(a.U)==\'1f\'&&1g(a.W)==\'1f\'){8 w}8!7.1m(a)},1U:l(a){o(!7.1v(a)){8 w}o(a.U){9 A=a.K.4,D=a.U.4,P=7.K.4,N=7.W.4;9 b=(N[0]*(P[0]-A[0])+N[1]*(P[1]-A[1])+N[2]*(P[2]-A[2]))/(N[0]*D[0]+N[1]*D[1]+N[2]*D[2]);8 v.u([A[0]+D[0]*b,A[1]+D[1]*b,A[2]+D[2]*b])}1d o(a.W){9 c=7.W.2f(a.W).2q();9 N=7.W.4,A=7.K.4,O=a.W.4,B=a.K.4;9 d=S.1j(2,2),i=0;H(d.2y()){i++;d=S.u([[N[i%3],N[(i+1)%3]],[O[i%3],O[(i+1)%3]]])}9 e=d.2w().4;9 x=N[0]*A[0]+N[1]*A[1]+N[2]*A[2];9 y=O[0]*B[0]+O[1]*B[1]+O[2]*B[2];9 f=[e[0][0]*x+e[0][1]*y,e[1][0]*x+e[1][1]*y];9 g=[];2e(9 j=1;j<=3;j++){g.19((i==j)?0:f[(j+(5-i)%3)%3])}8 14.u(g,c)}},1r:l(a){9 P=a.4||a;9 A=7.K.4,N=7.W.4;9 b=(A[0]-P[0])*N[0]+(A[1]-P[1])*N[1]+(A[2]-(P[2]||0))*N[2];8 v.u([P[0]+N[0]*b,P[1]+N[1]*b,(P[2]||0)+N[2]*b])},1V:l(t,a){9 R=S.1R(t,a.U).4;9 C=a.1r(7.K).4;9 A=7.K.4,N=7.W.4;9 b=C[0],1E=C[1],1J=C[2],1w=A[0],18=A[1],1a=A[2];9 x=1w-b,y=18-1E,z=1a-1J;8 11.u([b+R[0][0]*x+R[0][1]*y+R[0][2]*z,1E+R[1][0]*x+R[1][1]*y+R[1][2]*z,1J+R[2][0]*x+R[2][1]*y+R[2][2]*z],[R[0][0]*N[0]+R[0][1]*N[1]+R[0][2]*N[2],R[1][0]*N[0]+R[1][1]*N[1]+R[1][2]*N[2],R[2][0]*N[0]+R[2][1]*N[1]+R[2][2]*N[2]])},1t:l(a){o(a.W){9 A=7.K.4,N=7.W.4;9 b=A[0],18=A[1],1a=A[2],2M=N[0],2L=N[1],2Q=N[2];9 c=7.K.1t(a).4;9 d=b+2M,2p=18+2L,2m=1a+2Q;9 Q=a.1r([d,2p,2m]).4;9 e=[Q[0]+(Q[0]-d)-c[0],Q[1]+(Q[1]-2p)-c[1],Q[2]+(Q[2]-2m)-c[2]];8 11.u(c,e)}1d o(a.U){8 7.1V(F.1A,a)}1d{9 P=a.4||a;8 11.u(7.K.1t([P[0],P[1],(P[2]||0)]),7.W)}},1Z:l(a,b,c){a=v.u(a);a=a.1N();o(a===w){8 w}b=v.u(b);b=b.1N();o(b===w){8 w}o(1g(c)==\'1f\'){c=w}1d{c=v.u(c);c=c.1N();o(c===w){8 w}}9 d=a.4[0],18=a.4[1],1a=a.4[2];9 e=b.4[0],1W=b.4[1],1X=b.4[2];9 f,1i;o(c!==w){9 g=c.4[0],2l=c.4[1],2t=c.4[2];f=v.u([(1W-18)*(2t-1a)-(1X-1a)*(2l-18),(1X-1a)*(g-d)-(e-d)*(2t-1a),(e-d)*(2l-18)-(1W-18)*(g-d)]);1i=f.1u();o(1i===0){8 w}f=v.u([f.4[0]/1i,f.4[1]/1i,f.4[2]/1i])}1d{1i=F.1x(e*e+1W*1W+1X*1X);o(1i===0){8 w}f=v.u([b.4[0]/1i,b.4[1]/1i,b.4[2]/1i])}7.K=a;7.W=f;8 7}};11.u=l(a,b,c){9 P=25 11();8 P.1Z(a,b,c)};11.2I=11.u(v.1j(3),v.k);11.2H=11.u(v.1j(3),v.i);11.2G=11.u(v.1j(3),v.j);11.36=11.2I;11.35=11.2H;11.3j=11.2G;9 $V=v.u;9 $M=S.u;9 $L=14.u;9 $P=11.u;',62,206,'||||elements|||this|return|var||||||||||||function|||if||length||||create|Vector|null|||||||||Math|nj|while||do|anchor||||||||Matrix||direction||normal||||kj|Plane|ni|abs|Line|ki|precision|Sylvester|A2|push|A3|map|els|else||undefined|typeof|contains|mod|Zero|D3|D2|isParallelTo|kp|distanceFrom|cols|dup|pointClosestTo|np|reflectionIn|modulus|intersects|A1|sqrt|isSquare|X2|PI|X3|angleFrom|mod1|C2|mod2|sin|cos|break|C3|toRightTriangular|false|Y3|to3D|E2|E1|E3|Rotation|Y2|Y1|intersectionWith|rotate|v12|v13|rank|setVectors|nc|sum|multiply|prototype|eql|new|setElements|case|each|PA3|PA2|part|new_element|round|for|cross|product|AD2|isSameSizeAs|add|isPerpendicularTo|v22|AN3|inspect|AD3|AN2|toUnitVector|PsubQ3|PsubQ2|v23|dot|divisor|inverse|true|isSingular|determinant|max|canMultiplyFromLeft|subtract|rows|col|random|ZX|YZ|XY|Random|join|N2|N1|D1|slice|default|N3|dimensions|switch|liesIn|translate|snapTo|augment|Diagonal|trace|indexOf|diagonal|transpose|minor|row|isAntiparallelTo|ZY|YX|acos|RotationZ|RotationY|liesOn|RotationX|inv|rk|tr|det|toDiagonalMatrix|toUpperTriangular|version|XZ'.split('|'),0,{})) \ No newline at end of file diff --git a/logo/webgl/ucc-logo.js b/logo/webgl/ucc-logo.js new file mode 100644 index 0000000000000000000000000000000000000000..1679ec9acf4675212ac0e396e2c06d598c1ae326 --- /dev/null +++ b/logo/webgl/ucc-logo.js @@ -0,0 +1,3 @@ +// UCC Logo as a JavaScript variable +// (Because opening files is hard) +uccLogo="data:image/png;base64,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" diff --git a/logo/webgl/ucc-logo.png b/logo/webgl/ucc-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..0db9b61522970b6dff78a6410b6009a1192f6d39 Binary files /dev/null and b/logo/webgl/ucc-logo.png differ diff --git a/logo/webgl/webgl.css b/logo/webgl/webgl.css new file mode 100644 index 0000000000000000000000000000000000000000..e417d4ea7a0ce6e5a9bbb96651a93d115a234c87 --- /dev/null +++ b/logo/webgl/webgl.css @@ -0,0 +1,5 @@ +canvas { + border: 2px solid black; + -moz-box-shadow: black 2px 2px 2px; + background-color: white; +}