mirror of https://gitlab.com/pamhyr/pamhyr2
another purge criterion
parent
e1880c6549
commit
888002cd10
|
|
@ -230,6 +230,7 @@ class PointXYZ(Point, SQLSubModel):
|
|||
c = PointXYZ.distance(p1, p3)
|
||||
return acos((a**2 + b**2 - c**2) / (2 * a * b))
|
||||
|
||||
|
||||
@staticmethod
|
||||
def triangle_height(p1, p2, p3):
|
||||
"""triangle p1 p2 p3 height starting at p2.
|
||||
|
|
@ -247,3 +248,19 @@ class PointXYZ(Point, SQLSubModel):
|
|||
c = PointXYZ.distance(p1, p3)
|
||||
h2 = a**2 - ((c**2 - b**2 + a**2) / 2*c)**2
|
||||
return sqrt(h2)
|
||||
|
||||
@staticmethod
|
||||
def triangle_area(p1, p2, p3):
|
||||
"""triangle p1 p2 p3 area.
|
||||
|
||||
Args:
|
||||
p1: A XYZ Point
|
||||
p2: A XYZ Point
|
||||
p3: A XYZ Point
|
||||
|
||||
Returns:
|
||||
triangle height starting at p2
|
||||
"""
|
||||
h = PointXYZ.triangle_height(p1, p2, p3)
|
||||
d = PointXYZ.distance(p1, p3)
|
||||
return h*d/2
|
||||
|
|
|
|||
|
|
@ -435,7 +435,7 @@ class ProfileXYZ(Profile, SQLSubModel):
|
|||
return lcum
|
||||
|
||||
@timer
|
||||
def purge(self, np) -> list:
|
||||
def purge1(self, np) -> list:
|
||||
|
||||
points = self.points
|
||||
if (self.number_points <= np): return points
|
||||
|
|
@ -464,6 +464,20 @@ class ProfileXYZ(Profile, SQLSubModel):
|
|||
|
||||
return points
|
||||
|
||||
@timer
|
||||
def purge3(self, np) -> list:
|
||||
|
||||
points = self.points
|
||||
if (self.number_points <= np): return points
|
||||
while len(points) > np:
|
||||
l2 = []
|
||||
for i in range(len(points)-2)
|
||||
l2.append(PointXYZ.triangle_area(points(i),points(i+1),points(i+2)))
|
||||
imin = np.argmin(l2)+1
|
||||
points.pop(imin)
|
||||
|
||||
return points
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue