def get_Summitab convex_hull1 = graham_scana #生成顶点坐标 convex_hull2 = graham_scanb return convex_hull1convex_hull2###两个凸包ab是否重叠检测convex_hull1 和 convex_hull2 分别是两个凸包的顶点列表。def check_convex_hulla
这种警告通常是由于除以零或NaN(Not a Number)导致的。在这种情况下,您可以尝试添加一些条件语句来避免出现除以零或NaN的情况。
例如,在计算斜率时,您可以检查分母是否为零,并在分母为零时返回一个大数或NaN。在计算交点时,您可以检查斜率是否为NaN,并在斜率为NaN时返回一个False。
以下是您可以尝试的修改方法:
def intersect(edge1, edge2): # 计算边的斜率和截距 x1, y1 = edge1[0] x2, y2 = edge1[1] if x2-x1==0: # 检查分母是否为零 m1 = float('inf') # 返回一个大数或NaN else: m1 = (y2 - y1) / (x2 - x1) b1 = y1 - m1 * x1
x3, y3 = edge2[0]
x4, y4 = edge2[1]
if x4-x3==0: # 检查分母是否为零
m2 = float('inf') # 返回一个大数或NaN
else:
m2 = (y4 - y3) / (x4 - x3)
b2 = y3 - m2 * x3
# 检查是否有交点
if m1 == m2 or math.isnan(m1) or math.isnan(m2): # 检查斜率是否为NaN
return False
x = (b2 - b1) / (m1 - m2)
if x < min(x1, x2) or x > max(x1, x2) or x < min(x3, x4) or x > max(x3, x4):
return False
return True
def check_convex_hull(a,b): convex_hull1,convex_hull2=get_Summit(a,b) # 计算凸包的边 edges1 = [(convex_hull1[i], convex_hull1[(i+1)%len(convex_hull1)]) for i in range(len(convex_hull1))] edges2 = [(convex_hull2[i], convex_hull2[(i+1)%len(convex_hull2)]) for i in range(len(convex_hull2))]
# 检查边是否有交点
for edge1 in edges1:
for edge2 in edges2:
if intersect(edge1, edge2):
return True
# 如果没有交点,则两个凸包不重叠
return False
现在,您可以在计算斜率或交点之前检查分母是否为零,并在分母为零的情况下返回一个大数或NaN,在计算交点之前检查斜率是否为NaN,并在斜率为NaN的情况下返回一个False,以避免出现除以零或NaN的情况
原文地址: https://www.cveoy.top/t/topic/faco 著作权归作者所有。请勿转载和采集!