"""Builds ../data/rooms.json and ../data/die.json, the only numbers the page shows. python3 die.py && python3 make_data.py (about two minutes)""" import json, os from billiard import check HERE=os.path.dirname(os.path.abspath(__file__)); OUT=os.path.join(HERE,'..','data') N=40 rooms={} for name in 'AB': r=json.load(open(os.path.join(HERE,f'room_{name}.json'))) poly=[tuple(p) for p in r['poly']] c,lit=check(poly,tuple(r['S']),tuple(r['D']),N) rooms[name]={'S':r['S'],'D':r['D'],'poly':r['poly'],'tiles':r['tiles'], 'directions':sum(c.values()),'reach':c.get('lit',0),'corner':c.get('corner',0),'loop':c.get('loop',0), 'reach_dirs':sorted(lit,key=lambda d:abs(d[0])+abs(d[1]))[:12]} print(name,len(poly),'sides',dict(c)) json.dump({'N':N,'rooms':rooms},open(os.path.join(OUT,'rooms.json'),'w'),separators=(',',':')) import roll d=json.load(open(os.path.join(HERE,'die.json'))) d['roll_paths']={str(s):roll.roll_path(s) for s in range(14)} d['shift_mm_per_100mm']={str(f):round(float(roll.poly_dist(f)/roll.L*100),4) for f in range(14)} d['thickness_mm_per_100mm']=[round(float(x),2) for x in (roll.np.ptp(roll.V[:,1])/roll.L*100, roll.np.ptp(roll.V[:,2])/roll.L*100)] json.dump(d,open(os.path.join(OUT,'die.json'),'w'),separators=(',',':')) print('die stable',d['stable'],'paths',d['roll_paths'])