Skip to content

Commit dface42

Browse files
committed
add WeightedUndirectedGraph
1 parent 9b168f9 commit dface42

File tree

5 files changed

+116
-9
lines changed

5 files changed

+116
-9
lines changed

index.html

Lines changed: 1 addition & 0 deletions
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

Lines changed: 3 additions & 1 deletion
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

Lines changed: 3 additions & 1 deletion
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

Lines changed: 4 additions & 7 deletions
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
}
Lines changed: 105 additions & 0 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy