Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
}
def dist_loss_weights(self, anisotropy = (1,1,1)):
"""returns the anisotropy corrected weights for each ray"""
anisotropy = np.array(anisotropy)
assert anisotropy.shape == (3,)
return np.linalg.norm(self.vertices*anisotropy, axis = -1)
def rays_from_json(d):
return eval(d["name"])(**d["kwargs"])
################################################################
class Rays_Cartesian(Rays_Base):
def __init__(self, n_rays_x=11, n_rays_z=5):
super().__init__(n_rays_x=n_rays_x, n_rays_z=n_rays_z)
def setup_vertices_faces(self):
"""has to return list of ( (z_1,y_1,x_1), ... ) _"""
n_rays_x, n_rays_z = self.kwargs["n_rays_x"], self.kwargs["n_rays_z"]
dphi = np.float32(2. * np.pi / n_rays_x)
dtheta = np.float32(np.pi / n_rays_z)
verts = []
for mz in range(n_rays_z):
for mx in range(n_rays_x):
phi = mx * dphi
theta = mz * dtheta
if mz == 0:
theta = 1e-12
[2, 5, 3],
[3, 0, 4],
[3, 5, 0],
]
return verts, faces
def reorder_faces(verts, faces):
"""reorder faces such that their orientation points outward"""
def _single(face):
return face[::-1] if np.linalg.det(verts[face])>0 else face
return tuple(map(_single, faces))
class Rays_GoldenSpiral(Rays_Base):
def __init__(self, n=70, anisotropy = None):
if n<4:
raise ValueError("At least 4 points have to be given!")
super().__init__(n=n, anisotropy = anisotropy if anisotropy is None else tuple(anisotropy))
def setup_vertices_faces(self):
n = self.kwargs["n"]
anisotropy = self.kwargs["anisotropy"]
if anisotropy is None:
anisotropy = np.ones(3)
else:
anisotropy = np.array(anisotropy)
# the smaller golden angle = 2pi * 0.3819...
g = (3. - np.sqrt(5.)) * np.pi
phi = g * np.arange(n)
def _ind(mz, mx):
return mz * n_rays_x + mx
faces = []
for mz in range(n_rays_z - 1):
for mx in range(n_rays_x):
faces.append([_ind(mz, mx), _ind(mz + 1, (mx + 1) % n_rays_x), _ind(mz, (mx + 1) % n_rays_x)])
faces.append([_ind(mz, mx), _ind(mz + 1, mx), _ind(mz + 1, (mx + 1) % n_rays_x)])
faces = np.array(faces)
return verts, faces
class Rays_SubDivide(Rays_Base):
"""
Subdivision polyehdra
n_level = 1 -> base polyhedra
n_level = 2 -> 1x subdivision
n_level = 3 -> 2x subdivision
...
"""
def __init__(self, n_level=4):
super().__init__(n_level=n_level)
def base_polyhedron(self):
raise NotImplementedError()
def setup_vertices_faces(self):