Index: experimental/webgtt/javascript/graph.js |
diff --git a/experimental/webgtt/javascript/graph.js b/experimental/webgtt/javascript/graph.js |
deleted file mode 100644 |
index 099f1c701bb0ea964cc736c4faae3423b2d382bb..0000000000000000000000000000000000000000 |
--- a/experimental/webgtt/javascript/graph.js |
+++ /dev/null |
@@ -1,219 +0,0 @@ |
-// Copyright (c) 2011 The Native Client Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be found |
-// in the LICENSE file. |
- |
-/** |
- * @fileoverview This file contains the JavaScript required for the WebGTT |
- * application, specifically, the implementation of the Graph class. This |
- * implementation provides functions for creating, directing and drawing a |
- * graph, adding/deleting vertices/edges, checking whether an edge exists, |
- * obtaining the vertex that is nearest to a given point on the canvas, and |
- * obtaining the adjacency matrix. |
- * |
- * @author ragad@google.com (Raga Gopalakrishnan) |
- */ |
- |
-/** |
- * This class is used to represent a graph. |
- * @constructor |
- */ |
-Graph = function () { |
- /** |
- * These variables are arrays that hold references to the vertices and edges |
- * that make up the graph. |
- */ |
- this.listOfVertices = new Array(); |
- this.listOfEdges = new Array(); |
- |
- /** |
- * This boolean variable indicates whether the graph is directed or not. |
- */ |
- this.isDirected = false; |
-}; |
- |
-/** |
- * This function sets the value of Graph.isDirected. |
- * |
- * If the graph is being converted from a directed to an undirected graph, then |
- * possible duplicate edges should be deleted. |
- * |
- * @param {boolean} isDirected The value to be assigned to Graph.isDirected. |
- */ |
-Graph.prototype.setDirected = function (isDirected) { |
- if (isDirected) { |
- this.isDirected = true; |
- } else if(this.isDirected) { |
- this.isDirected = false; |
- for (var i = 0 ; i < this.listOfEdges.length - 1 ; i++) { |
- for (var j = i+1 ; j < this.listOfEdges.length ; j++) { |
- if (this.listOfEdges[i].start == this.listOfEdges[j].end && |
- this.listOfEdges[i].end == this.listOfEdges[j].start) { |
- this.deleteEdgeByIndex(j); |
- break; |
- } |
- } |
- } |
- } |
-}; |
- |
-/** |
- * This function adds a vertex to the graph. |
- * |
- * @param {object} newVertex Reference to the new vertex to be added. |
- */ |
-Graph.prototype.addVertex = function (newVertex) { |
- this.listOfVertices.push(newVertex); |
-}; |
- |
-/** |
- * This function deletes a vertex from the graph, given its index in |
- * Graph.listOfVertices. |
- * |
- * @param {number} vertexIndex The index of the vertex to be deleted. |
- */ |
-Graph.prototype.deleteVertexByIndex = function (vertexIndex) { |
- // First, delete all edges from/to this vertex |
- for (var i = 0 ; i < this.listOfEdges.length ; i++) { |
- if (this.listOfEdges[i].start == this.listOfVertices[vertexIndex] || |
- this.listOfEdges[i].end == this.listOfVertices[vertexIndex]) { |
- this.deleteEdgeByIndex(i); |
- i--; |
- } |
- } |
- |
- for (var i = vertexIndex ; i < this.listOfVertices.length - 1 ; i++) { |
- this.listOfVertices[i] = this.listOfVertices[i+1]; |
- } |
- this.listOfVertices.pop(); |
-}; |
- |
-/** |
- * This function returns the vertex nearest to the given coordinates. |
- * |
- * @param {number} x The given x-coordinate. |
- * @param {number} y The given y-coordinate. |
- * @return {object} Reference to the nearest vertex (undefined if none). |
- */ |
-Graph.prototype.getNearestVertex = function (x, y) { |
- var closestVertex = undefined; |
- var closestDistance = 0; |
- if (graph1.listOfVertices.length != 0) { |
- closestVertex = graph1.listOfVertices[0]; |
- closestDistance = Math.sqrt(Math.pow(x-closestVertex.x,2) + |
- Math.pow(y-closestVertex.y,2)); |
- for (var i = 1 ; i < graph1.listOfVertices.length ; i++) { |
- var tempVertex = graph1.listOfVertices[i]; |
- var tempDistance = Math.sqrt(Math.pow(x-tempVertex.x,2) + |
- Math.pow(y-tempVertex.y,2)); |
- if (tempDistance < closestDistance) { |
- closestVertex = tempVertex; |
- closestDistance = tempDistance; |
- } |
- } |
- } |
- return closestVertex; |
-}; |
- |
-/** |
- * This function adds an edge to the graph. |
- * |
- * @param {object} newEdge Reference to the new edge to be added. |
- */ |
-Graph.prototype.addEdge = function (newEdge) { |
- this.listOfEdges.push(newEdge); |
-}; |
- |
-/** |
- * This function deletes an edge from the graph, given its index in |
- * Graph.listOfEdges. |
- * |
- * @param {number} edgeIndex The index of the edge to be deleted. |
- */ |
-Graph.prototype.deleteEdgeByIndex = function (edgeIndex) { |
- for (var i = edgeIndex ; i < this.listOfEdges.length - 1 ; i++) { |
- this.listOfEdges[i] = this.listOfEdges[i+1]; |
- } |
- this.listOfEdges.pop(); |
-}; |
- |
-/** |
- * This function returns a reference to the edge that is adjacent to the given |
- * vertices. |
- * |
- * @param {object} start Reference to the start vertex. |
- * @param {object} end Reference to the end vertex. |
- * @return {object} Reference to the adjacent edge (undefined if none). |
- */ |
-Graph.prototype.getEdge = function (start, end) { |
- var returnEdge = undefined; |
- |
- // This is slightly complex, since the graph could be directed or undirected. |
- for (var i = 0 ; i < this.listOfEdges.length ; i++) { |
- if (this.listOfEdges[i].start == start && this.listOfEdges[i].end == end) { |
- returnEdge = this.listOfEdges[i]; |
- break; |
- } |
- if (this.listOfEdges[i].start == end && this.listOfEdges[i].end == start) { |
- if (!this.isDirected) { |
- returnEdge = this.listOfEdges[i]; |
- break; |
- } |
- } |
- } |
- return returnEdge; |
-}; |
- |
-/** |
- * This function draws the given list of elements (vertices or edges) on the |
- * canvas. |
- * |
- * @param {object} drawingContext The handle to the drawing surface of the |
- * canvas. |
- * @param {object} listOfElements The list of elements (vertices or edges) to be |
- * drawn on to the canvas. |
- */ |
-Graph.prototype.drawSpecific = function (drawingContext, listOfElements) { |
- for (var i = 0 ; i < listOfElements.length ; i++) { |
- listOfElements[i].draw(drawingContext); |
- } |
-}; |
- |
-/** |
- * This function draws the graph on the canvas. |
- * |
- * @param {object} drawingContext The handle to the drawing surface of the |
- * canvas. |
- */ |
-Graph.prototype.draw = function (drawingContext) { |
- drawingContext.globalCompositeOperation = 'destination-over'; |
- this.drawSpecific(drawingContext, this.listOfVertices); |
- this.drawSpecific(drawingContext, this.listOfEdges); |
-}; |
- |
-/** This function returns the adjacency matrix of the graph. |
- * |
- * @return {object} The adjacency matrix of the graph. |
- */ |
-Graph.prototype.getAdjacencyMatrix = function () { |
- var adjacencyMatrix = new Array(); |
- for (var i = 0 ; i < this.listOfVertices.length ; i++) { |
- adjacencyMatrix.push(new Array()); |
- } |
- |
- for (var i = 0 ; i < this.listOfVertices.length ; i++) { |
- for (var j = 0 ; j < this.listOfVertices.length ; j++) { |
- adjacencyMatrix[i][j] = 0; |
- } |
- } |
- |
- for (var i = 0 ; i < this.listOfEdges.length ; i++) { |
- var indexOfStart = this.listOfVertices.indexOf(this.listOfEdges[i].start); |
- var indexOfEnd = this.listOfVertices.indexOf(this.listOfEdges[i].end); |
- adjacencyMatrix[indexOfStart][indexOfEnd] = 1; |
- if (!this.isDirected) { |
- adjacencyMatrix[indexOfEnd][indexOfStart] = 1; |
- } |
- } |
- |
- return adjacencyMatrix; |
-}; |