Skip to content

Commit dface42

Browse files
committed
add WeightedUndirectedGraph
1 parent 9b168f9 commit dface42

5 files changed

+116
-9
lines changed

index.html

+1
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ <h3>Reference</h3>
111111
<script src="js/module/directed_graph.js"></script>
112112
<script src="js/module/undirected_graph.js"></script>
113113
<script src="js/module/weighted_directed_graph.js"></script>
114+
<script src="js/module/weighted_undirected_graph.js"></script>
114115
<script src="js/module/array2d.js"></script>
115116
<script src="js/module/array1d.js"></script>
116117
<script src="js/script.js"></script>

js/module/directed_graph.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,9 @@ var DirectedGraph = {
335335
for (var i = 0; i < N; i++) {
336336
G[i] = new Array(N);
337337
for (var j = 0; j < N; j++) {
338-
if (i != j) G[i][j] = (Math.random() * (1 / ratio) | 0) == 0 ? 1 : 0;
338+
if (i != j) {
339+
G[i][j] = (Math.random() * (1 / ratio) | 0) == 0 ? 1 : 0;
340+
}
339341
}
340342
}
341343
return G;

js/module/undirected_graph.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,9 @@ var UndirectedGraph = {
123123
for (var i = 0; i < N; i++) G[i] = new Array(N);
124124
for (var i = 0; i < N; i++) {
125125
for (var j = 0; j < N; j++) {
126-
if (i > j) G[i][j] = G[j][i] = (Math.random() * (1 / ratio) | 0) == 0 ? 1 : 0;
126+
if (i > j) {
127+
G[i][j] = G[j][i] = (Math.random() * (1 / ratio) | 0) == 0 ? 1 : 0;
128+
}
127129
}
128130
}
129131
return G;

js/module/weighted_directed_graph.js

+4-7
Original file line numberDiff line numberDiff line change
@@ -215,15 +215,12 @@ var WeightedDirectedGraph = {
215215
if (!ratio) ratio = .3;
216216
if (!min) min = 1;
217217
if (!max) max = 5;
218-
var G = [];
218+
var G = new Array(N);
219219
for (var i = 0; i < N; i++) {
220-
G.push([]);
220+
G[i] = new Array(N);
221221
for (var j = 0; j < N; j++) {
222-
if (i == j) G[i].push(0);
223-
else if ((Math.random() * (1 / ratio) | 0) == 0) {
224-
G[i].push((Math.random() * (max - min + 1) | 0) + min);
225-
} else {
226-
G[i].push(0);
222+
if (i != j && (Math.random() * (1 / ratio) | 0) == 0) {
223+
G[i][j] = (Math.random() * (max - min + 1) | 0) + min;
227224
}
228225
}
229226
}
+105
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
function WeightedUndirectedGraphTracer(module) {
2+
if (WeightedDirectedGraphTracer.call(this, module || WeightedUndirectedGraphTracer)) {
3+
WeightedUndirectedGraphTracer.prototype.init.call(this);
4+
return true;
5+
}
6+
return false;
7+
}
8+
9+
WeightedUndirectedGraphTracer.prototype = $.extend(true, Object.create(WeightedDirectedGraphTracer.prototype), {
10+
constructor: WeightedUndirectedGraphTracer,
11+
init: function () {
12+
var tracer = this;
13+
14+
s.settings({
15+
defaultEdgeType: 'def'
16+
});
17+
sigma.canvas.edges.def = function (edge, source, target, context, settings) {
18+
var color = tracer.getColor(edge, source, target, settings);
19+
tracer.drawEdge(edge, source, target, color, context, settings);
20+
tracer.drawEdgeWeight(edge, source, target, color, context, settings);
21+
};
22+
},
23+
_setData: function (G) {
24+
if (Tracer.prototype._setData.call(this, arguments)) return true;
25+
26+
graph.clear();
27+
var nodes = [];
28+
var edges = [];
29+
var unitAngle = 2 * Math.PI / G.length;
30+
var currentAngle = 0;
31+
for (var i = 0; i < G.length; i++) {
32+
currentAngle += unitAngle;
33+
nodes.push({
34+
id: this.n(i),
35+
label: '' + i,
36+
x: .5 + Math.sin(currentAngle) / 2,
37+
y: .5 + Math.cos(currentAngle) / 2,
38+
size: 1,
39+
color: this.color.default,
40+
weight: 0
41+
});
42+
}
43+
for (var i = 0; i < G.length; i++) {
44+
for (var j = 0; j <= i; j++) {
45+
if (G[i][j] || G[j][i]) {
46+
edges.push({
47+
id: this.e(i, j),
48+
source: this.n(i),
49+
target: this.n(j),
50+
color: this.color.default,
51+
size: 1,
52+
weight: G[i][j]
53+
});
54+
}
55+
}
56+
}
57+
58+
graph.read({
59+
nodes: nodes,
60+
edges: edges
61+
});
62+
s.camera.goTo({
63+
x: 0,
64+
y: 0,
65+
angle: 0,
66+
ratio: 1
67+
});
68+
this.refresh();
69+
70+
return false;
71+
},
72+
e: UndirectedGraphTracer.prototype.e,
73+
drawOnHover: UndirectedGraphTracer.prototype.drawOnHover,
74+
drawEdge: UndirectedGraphTracer.prototype.drawEdge,
75+
drawEdgeWeight: function (edge, source, target, color, context, settings) {
76+
var prefix = settings('prefix') || '';
77+
if (source[prefix + 'x'] > target[prefix + 'x']) {
78+
var temp = source;
79+
source = target;
80+
target = temp;
81+
}
82+
console.log(source);
83+
console.log(target);
84+
WeightedDirectedGraphTracer.prototype.drawEdgeWeight.call(this, edge, source, target, color, context, settings);
85+
}
86+
});
87+
88+
var WeightedUndirectedGraph = {
89+
random: function (N, ratio, min, max) {
90+
if (!N) N = 5;
91+
if (!ratio) ratio = .3;
92+
if (!min) min = 1;
93+
if (!max) max = 5;
94+
var G = new Array(N);
95+
for (var i = 0; i < N; i++) G[i] = new Array(N);
96+
for (var i = 0; i < N; i++) {
97+
for (var j = 0; j < N; j++) {
98+
if (i > j && (Math.random() * (1 / ratio) | 0) == 0) {
99+
G[i][j] = G[j][i] = (Math.random() * (max - min + 1) | 0) + min;
100+
}
101+
}
102+
}
103+
return G;
104+
}
105+
};

0 commit comments

Comments
 (0)