1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
import sys, json, random
from math import ceil, pi, sin, cos
sizes = [1.0, 0.9, 0.8, 0.7, 0.3, 0.2, 0.1]
counts = sys.argv[1:8]
base_size = 200
mass_quotient = float(sys.argv[8])
size_quotient = float(sys.argv[9])
subnode_threshold = float(sys.argv[10])
nodes = {}
nodes['n0'] = {'width': base_size, 'height': base_size, 'color': 'white', 'mass': base_size, 'fixed': True, 'x': 0, 'y': 0}
node_count = 1
node_sizes = []
for i in counts:
node_sizes = node_sizes + [sizes.pop(0)] * int(i)
node_images = {
1.0: 'blue.png',
0.9: 'blue.png',
0.8: 'blue.png',
0.7: 'blue.png',
0.3: 'red.png',
0.2: 'yellow.png',
0.1: 'black.png'
}
node_colors = {
1.0: '#3495FF',
0.9: '#3495FF',
0.8: '#3495FF',
0.7: '#3495FF',
0.3: 'red',
0.2: 'yellow',
0.1: 'white'
}
angular_positions = [2 * pi / len(node_sizes) * (n - 1) for n in range(1, len(node_sizes)+1)]
random.shuffle(angular_positions)
edges = {}
edges['n0'] = {}
for node_size in node_sizes:
node_id = 'n' + str(node_count)
node_dimension = max(10, int(ceil(base_size * node_size * size_quotient)))
node_mass = int(ceil(base_size * mass_quotient))
node_angular_position = angular_positions[node_count-1]
node_position = { 'x': 0.05 * cos(node_angular_position),
'y': 0.05 * sin(node_angular_position) }
nodes[node_id] = {'width': node_dimension, 'height': node_dimension, 'mass': node_mass, 'color': node_colors[node_size], 'fixed': True, 'x': node_position['x'], 'y': node_position['y']}
edges['n0'][node_id] = {}
edges[node_id] = {}
node_count += 1
subnode_count = 1
subnode_sizes = [n for n in node_sizes if (node_size > 0.2) and (random.random() > subnode_threshold)]
for subnode_size in subnode_sizes:
subnode_id = node_id + '_' + str(subnode_count)
subnode_dimension = max(5, int(ceil(base_size * node_size * subnode_size * size_quotient * size_quotient)))
subnode_mass = int(ceil(base_size * mass_quotient))
nodes[subnode_id] = {'width': subnode_dimension, 'height': subnode_dimension, 'mass': subnode_mass, 'color': node_colors[subnode_size], 'fixed': True, 'x': node_position['x'], 'y': node_position['y']}
edges[node_id][subnode_id] = {}
subnode_count += 1
print json.dumps(
{
'repulsion': 1000,
'stiffness': 100,
'friction': 100,
'precision': 0.99,
'fps': 40,
'dt': 0.05,
'gravity': True,
'nodes': nodes,
'edges': edges
}
)
|