var table; var sub; var s = 25; var vertices = []; var edges = []; var width = 1000; var length = 1000; function preload() { table = loadStrings('0.txt'); sub = subset(table, 0, s); } var temp; var temp1; var temp2; function setup() { createCanvas(1100, 1100); for (var i = 0; i < s; i++) { temp = split(table[i], ' '); vertices.push(new Vertex(temp[0])); vertices.push(new Vertex(temp[1])); edges.push(new Edge(vertices[i], vertices[i + 1])); } } var area; var k; var t; function draw() { //text (vertices.length, 50, 50); area = width * length; k = sqrt(area/abs(vertices.length)); //edge object to store location of nodes //collection of edge objects /* for (var i = 0; i < vertices.length; i++) { fill('blue'); vertices[i].display(); } for (var i = 0; i < edges.length; i++) { fill('blue'); edges[i].display(); }*/ //force directed layout var delta = []; var edelta = []; t = 50; //iterations for (var i = 0; i < 10; i++) { //repulsive for (var i = 0; i < vertices.length; i++) { vertices[i].disp = 0; for (var j = 0; j < vertices.length; j++) { if(i != j) { delta[0] = vertices[i].x - vertices[j].x; delta[1] = vertices[i].y - vertices[j].y; vertices[i].disp = vertices[i].disp + (delta/abs(delta))*(sq(k)/delta); //(delta[0]/abs(delta[0])*(sq(k)/x) delta[1]/abs(delta[1]))*(sq(k)/x) } } } //attractive for (var i = 0; i < edges.length; i++) { edelta[0] = edges[i].v1.x - edges[i].v2.x; edelta[1] = edges[i].v1.y - edges[i].v2.y; edges[i].v1.disp = edges[i].v1.disp - (edelta/abs(edelta))*(sq(abs(edelta))/k); edges[i].v2.disp = edges[i].v2.disp - (edelta/abs(edelta))*(sq(abs(edelta))/k); } //limit displacement for (var i = 0; i < vertices.length; i++) { vertices[i].pos = vertices[i].pos + (vertices[i].disp/abs(vertices[i].disp)) //vertices[i].x = vertices[i].x + (vertices[i].disp/abs(vertices[i].disp)) //vertices[i].y = vertices[i].y + (vertices[i].disp/abs(vertices[i].disp)) *min(vertices[i].disp, t); vertices[i].x = min(width/2, max(-width/2, vertices[i].x)); vertices[i].y = min(width/2, max(-width/2, vertices[i].y)); } t = cool(t); } for (var i = 0; i < vertices.length; i++) { vertices[i].display(); } for (var i = 0; i < edges.length; i++) { edges[i].display(); } //base axes line (10, 10, 10, 1000); line (10, 1000, 1070, 1000); } function cool(t) { return t - 5; } //vertex object function Vertex(id) { this.x = random(width) + 10; this.y = random(length) + 10; this.pos = [this.x, this.y]; this.id = id; this.disp; this.display = function() { ellipse(this.x, this.y, 8, 8); } } //edge object function Edge(v1, v2) { this.v1 = v1; this.v2 = v2; this.display = function() { line(this.v1.x, this.v1.y, this.v2.x, this.v2.y); //line(this.v1.x, this.v1.y, this.v2.x, this.v2.y); } }