normal function in surface.py cleaner
This commit is contained in:
parent
9a55935add
commit
043eecf814
|
@ -278,14 +278,12 @@ class Surface:
|
|||
"""
|
||||
if self._normal is None:
|
||||
points = self.points
|
||||
accepted_normal_difference = 0.01
|
||||
# todo: IF THE FIRST ONE IS 0, START WITH THE NEXT
|
||||
point_origin = points[len(points)-2]
|
||||
vector_1 = points[len(points)-1] - point_origin
|
||||
vector_2 = points[0] - point_origin
|
||||
vector_3 = points[1] - point_origin
|
||||
cross_product = np.cross(vector_1, vector_2)
|
||||
cross_product_next = np.cross(vector_2, vector_3)
|
||||
if np.linalg.norm(cross_product) != 0:
|
||||
cross_product = cross_product / np.linalg.norm(cross_product)
|
||||
alpha = GeometryHelper.angle_between_vectors(vector_1, vector_2)
|
||||
|
@ -295,44 +293,37 @@ class Surface:
|
|||
alpha = 0
|
||||
if len(points) == 3:
|
||||
return cross_product
|
||||
if np.linalg.norm(cross_product_next) != 0:
|
||||
cross_product_next = cross_product_next / np.linalg.norm(cross_product_next)
|
||||
beta = GeometryHelper.angle_between_vectors(vector_2, vector_3)
|
||||
else:
|
||||
cross_product_next = [0, 0, 0]
|
||||
beta = 0
|
||||
delta_normals = 0
|
||||
for j in range(0, 3):
|
||||
delta_normals += cross_product[j] - cross_product_next[j]
|
||||
if np.abs(delta_normals) < accepted_normal_difference:
|
||||
alpha += beta
|
||||
else:
|
||||
alpha -= beta
|
||||
alpha += self._angle(vector_2, vector_3, cross_product)
|
||||
for i in range(0, len(points)-4):
|
||||
vector_1 = points[i+1] - point_origin
|
||||
vector_2 = points[i+2] - point_origin
|
||||
alpha += self._angle(vector_1, vector_2, cross_product)
|
||||
vector_1 = points[len(points) - 1] - point_origin
|
||||
vector_2 = points[0] - point_origin
|
||||
if alpha < 0:
|
||||
cross_product = np.cross(vector_2, vector_1)
|
||||
else:
|
||||
cross_product = np.cross(vector_1, vector_2)
|
||||
self._normal = cross_product / np.linalg.norm(cross_product)
|
||||
return self._normal
|
||||
|
||||
@staticmethod
|
||||
def _angle(vector_1, vector_2, cross_product):
|
||||
accepted_normal_difference = 0.01
|
||||
cross_product_next = np.cross(vector_1, vector_2)
|
||||
if np.linalg.norm(cross_product_next) != 0:
|
||||
cross_product_next = cross_product_next / np.linalg.norm(cross_product_next)
|
||||
beta = GeometryHelper.angle_between_vectors(vector_1, vector_2)
|
||||
alpha = GeometryHelper.angle_between_vectors(vector_1, vector_2)
|
||||
else:
|
||||
cross_product_next = [0, 0, 0]
|
||||
beta = 0
|
||||
alpha = 0
|
||||
delta_normals = 0
|
||||
for j in range(0, 3):
|
||||
delta_normals += cross_product[j] - cross_product_next[j]
|
||||
if np.abs(delta_normals) < accepted_normal_difference:
|
||||
alpha += beta
|
||||
return alpha
|
||||
else:
|
||||
alpha -= beta
|
||||
if alpha < 0:
|
||||
cross_product = np.cross(points[0] - points[len(points) - 2],
|
||||
points[len(points) - 1] - points[len(points) - 2])
|
||||
else:
|
||||
cross_product = np.cross(points[len(points) - 1] - points[len(points) - 2],
|
||||
points[0] - points[len(points) - 2])
|
||||
self._normal = cross_product / np.linalg.norm(cross_product)
|
||||
return self._normal
|
||||
return -alpha
|
||||
|
||||
@property
|
||||
def azimuth(self):
|
||||
|
|
Loading…
Reference in New Issue
Block a user