【问题标题】:Get the maximum value for each neighboured triangle获取每个相邻三角形的最大值
【发布时间】:2017-06-11 22:32:49
【问题描述】:

我有一个带有三角形元素的网格。每个元素都有一个索引。我有一个检查邻居的功能,结果如下图。

[1, 2] 例如表示三角形 1 和三角形 2 是邻居,与三角形 1 和三角形 4 相同。

Adjacent_Elements = ([[1, 2], [1, 4], [2, 5], [4, 3], [3, 5] ... ])

现在我检查从一个元素到他的邻居的大小变化。数字表示尺寸比的变化。

例如:对于第一对 [1, 2],我得到转换值 1,这意味着它们具有相同的大小。对于下一对 [1, 4],我得到值 3,这意味着从元素 1 到元素 4 的大小变化是因子 3。对于对 [2, 5],我得到值 2,这意味着,大小的变化是因子 2。 数组 Element_Transition 包含所有这些值。每一对都有一个值。

Element_Transition = ([1, 3, 2, 1, 1.5, ...])

每个三角形至少有 1 个和最多 3 个邻居,所以我为每个三角形得到 1-3 个值。在此示例中,三角形 1 的大小变化因子为 1(在 [1, 2] 处)以及因子 3(在 [1, 4] 处)等等。

这是一个示例图片:

现在我只需要每个三角形的最大过渡值。

All_Trans_Values = ([[1, [1, 3]], [2, [1, 2], [3, [1, 1.5],...])
Max_Trans_Value = ([[1, 3], [2, 2], [3, 1.5], [4, 3]....])
                     ^       ^       ^         ^
                     ^       ^       ^         ^
                    these are the pairs from Adjacent_Elements
                    the second number is always the maximum transition value

或者只是价值

Value = ([3, 2, 1.5, 3, ...])

有没有办法计算它?它用于三角网格内部的质量研究。我只需要“坏”(= big)数字。

【问题讨论】:

  • 我不明白你的设置。您所说的“这些数字引用了 Adjacent_Elements 之前的索引”是什么意思-如何引用?另外,Trans_Value 中的元素是什么意思?例如[1,3],这些数字是什么意思? Value 只是Trans_Value 的每个成员的第二个元素的列表吗?
  • 我编辑了我的帖子,现在更容易理解了吗? [1, 3] 表示元素(或三角形)1s 到相邻元素(三角形)的最大尺寸变化是因子 3。是的,Value 只是 Trans_Value 的第二部分
  • 确实比以前好多了,但还是有一些不清楚的地方。例如All_Trans_Values 中的数字是什么意思? Adjacent_Faces 是什么?我仍然认为它没有很好地解释Max_Trans_Value 是什么,但这可能主要是由于All_Trans_Values 中的含糊不清。
  • 我尽我所能把它解释得更详细,并添加了一张图片。我拼错了 Adjacent_Faces,它必须是 Adjacent_Elements,抱歉。
  • 嗯...所以,如果我理解正确的话,在All_Trans_Values 中,每个子列表的第一个成员是顺序索引?第二个成员是Element_Transition 的所有成员的列表,Adjacent_Elements 中的相应子列表包含该索引?这是我在最近几次编辑中无法理解的主要部分。现在您更改了 All_Trans_Values 以将转换值分组到自己的列表中,我认为,它开始变得有意义了。

标签: python numpy mesh


【解决方案1】:

编辑后我更了解您的问题,因此旧答案只是解决您问题的一部分。最初我以为您已经将值排序为三角形。

新答案:

这应该做你想做的。

Adjacent_Elements = np.array([[1,3],[1,4],[2,3],[3,4]])
Element_Transition = np.array([2,1,4,2])

# maybe you know the amount of triangles already
number_of_triangles = max(Adjacent_Elements.flatten())

# generating list of indexes
indexes = np.arange(1,number_of_triangles+1)
# generating list of zeros
zeros = np.zeros((number_of_triangles))
Max_Trans_Value = np.stack((indexes,zeros),axis=-1)

# iterating over all Adjacent_Elements with corresponding factor
for triangles,factor in zip(Adjacent_Elements,Element_Transition):
    for triangle in triangles:
        # if the factor is heigher than the currently stored one
        if factor >= Max_Trans_Value[triangle-1,1]:
            Max_Trans_Value[triangle-1,1] = factor

print(Max_Trans_Value)
# will print:
#  [[1 2],
#   [2 4],
#   [3 4],
#   [4 2]]

旧答案:

我猜你想为 All_Trans_Values 的每个子列表设置最大值。

我会使用列表理解和 max() 函数中的构建。

a = [[1,1,3],[2,3],[1,2,2]]
c = [max(b) for b in a]

c 现在将包含所有最大值。 [3,3,2]

【讨论】:

    猜你喜欢
    • 2015-10-15
    • 2018-02-11
    • 2018-11-05
    • 2015-06-14
    • 1970-01-01
    • 2021-06-18
    • 2015-11-14
    • 2015-08-29
    • 1970-01-01
    相关资源
    最近更新 更多