You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Dribble/cpp/a_star/expansion_groups.py

61 lines
1.6 KiB
Python

from os import getcwd
from os.path import join, dirname
from math import sqrt
MAX_RADIUS = 5
LINES = 321
COLS = 221
expansion_groups = dict()
CWD = join(getcwd(), dirname(__file__))
for l in range(MAX_RADIUS*10+1):
for c in range(MAX_RADIUS*10+1):
dist = sqrt(l*l+c*c)*0.1
if dist <= MAX_RADIUS:
if not dist in expansion_groups:
expansion_groups[dist] = []
expansion_groups[dist].append((l,c))
if c>0: expansion_groups[dist].append((l,-c))
if l>0: expansion_groups[dist].append((-l,c))
if c>0 and l>0: expansion_groups[dist].append((-l,-c))
ascending_dist = sorted(expansion_groups)
groups_no = len(expansion_groups)
#============================================= prepare text to file
no_of_pos = 0
for g in expansion_groups.values():
no_of_pos += len(g)
file = []
file.append(f"const int expansion_positions_no = {no_of_pos};\n")
file.append(f"const float expansion_pos_dist[{no_of_pos}] = {{")
for dist in ascending_dist:
for p in expansion_groups[dist]:
file.extend([f"{dist}",","])
file.pop()
file.append(f"}};\n\nconst int expansion_pos_l[{no_of_pos}] = {{")
for dist in ascending_dist:
for p in expansion_groups[dist]:
file.extend([f"{p[0]}",","])
file.pop()
file.append(f"}};\n\nconst int expansion_pos_c[{no_of_pos}] = {{")
for dist in ascending_dist:
for p in expansion_groups[dist]:
file.extend([f"{p[1]}",","])
file.pop()
file.append("};\n")
#============================================= write to file
with open(join(CWD, "expansion_groups.h"), 'w') as f:
f.write(''.join(file))