gpt4 book ai didi

python - 平面算法之间的角度太慢

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:14:04 25 4
gpt4 key购买 nike

我已经编写了计算相邻平面之间角度的工作代码。

这是我已经尝试优化的内容:

1) 我去掉了几个 np 内置函数,例如np.cross() 和 np.linalg.norm(),这给了我几秒钟的时间。

2) 对于 z in range(1, n),我将 1 更改为 k,以便不考虑已经计算出的三角形。

我也尝试过加快输入速度,但无济于事。

拜托,有人能告诉我如何让它更快吗?我对图表不太熟悉,对此我有一种不好的预感......

(迁移到代码审查)

最佳答案

您可以通过将所有三角形相互匹配来确定三角形的邻接关系。如果您创建一个边字典,您可以更有效地找到相邻的三角形。

使用边的两个节点作为键。为了使键唯一,使索引最低的节点成为第一个。您可以在读取索引时创建字典:

edge = {}

for i in range(n):
a, b, c = [int(j) for j in raw_input().split()]
ind.append((a, b, c))

k = (min(a, b), max(a, b))
edge[k] = edge.get(k, []) + [i]

k = (min(b, c), max(b, c))
edge[k] = edge.get(k, []) + [i]

k = (min(c, a), max(c, a))
edge[k] = edge.get(k, []) + [i]

像这样使用字典:

def calculate_angle():
for e in edge:
if len(e) == 2:
i1, i2 = e
n1 = norm[i1]
n2 = norm[i2]

a = abs(math.acos(max(-1, min(1, dot(n1, n2)))))
angles_list.append(a)

return max(angles_list)

这里的缺点是角度在列表中以任意顺序出现,但这也是您原始代码中发生的情况。

您可以通过为每个 tria 预先计算法线作为单位向量一次并将其存储在列表 norm 中来加速程序。这就是我上面所做的。角度计算则只是点积的反余弦。

你只需要最大值吗?然后不创建列表,但保留一个运行最大值,如果当前角度大于当前最大值,则更新该最大值。

关于python - 平面算法之间的角度太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43810124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com