找到给定顶点对称对的最佳(最快)方法是什么(即网格左侧的顶点及其右侧等效点)是否可以使用打开的maya api在python中为此还是有更好的方法?
答案 0 :(得分:1)
你不想一遍又一遍地检查每个顶点相对于其他顶点的位置,这将非常慢。
一个简单的方法是获得一个哈希值 - 一个简单的比较操作 - 对于两个对称的顶点是相同的每个顶点。幸运的是元组 - 不是列表! - 可以洗。所以算法将是:
为对面的顶点制作第二个字典(位置:顶点),对称轴翻转:如果你做的是左/右轴,左边的列表将是
{ (x, y, z) : "pCube1.vtx[0]" } #etc
,右边的列表是
{ (-1 * x, y, z) : "pCube1.vtx[99]" } # and so on
在两个字典中都重复的任何键都是对称的,因此您需要收集显示在两者中的键,然后从它们所代表的每一侧获取顶点:
duplicates = [j for j in leftDictionary if j in rightDictionary]
pairs = [leftDictionary[k], rightDictionary[k] for k in keys]
这对于大网格来说不会超快,但它应该可以解决问题。
它可能存在问题的一个地方是两侧之间是否存在浮点差异,因此视觉上对称的项目可能在数学上不对称。您可以修改它以匹配具有给定容差的数字,比如量化您放入元组的值 - 简单的方法是用一些因子(比如1000)将它们炸掉,然后将它们变成整数。原始方法错误地忽略了一些看起来对称但不完全的东西,量化的方法如果太靠近则可能会折叠多个匹配。我坚持使用原始数据,除非它没有做你需要的。