计算中位数3D向量(而不是平均值)?

4
我有一个3D网格,正在计算顶点法线,从网格的面法线计算。每个顶点法线被计算为共享该顶点的所有面的法线的平均值。
除了在网格表面的面不均匀细分导致顶点法线可能会倾斜的情况下,一切正常。以下是一个具有倾斜顶点法线的对象示例,位于其一个角落中:

Box

在这张图片中,您可以看到各种面法线(蓝色),理想的顶点法线(黄色)以及有问题的顶点法线(红色),它被网格重度细分侧面的许多共享该顶点的面法线所扭曲。

所以我的问题是:是否可能计算向量中位数,而不是平均值?以下是额外的一张图片,以进一步说明:

Median


1
中位数只有在比较运算中才有意义,例如(相对)围绕固定轴的角度——在这种情况下可能是面法线。 - meowgoesthedog
1
用面积归一化不会解决这个问题吗? - Anton Menshov
很抱歉,@Anton。提供的图像只是一个易于理解的示例,但可能存在问题法线也附加到面积累计大于组中其他法线的面上,导致倾斜的情况。 - Tyson
@Tyson 所以,如果一个顶点被面积不相等的面共享,您仍然希望将法线定义为如果它们的面积相同吗? - Anton Menshov
@安东,理想的解决方案应该是独立于面部区域的。 - Tyson
你应该了解一下“中位数”的实际含义——在你最后的例子中,红色箭头并不是蓝色箭头的中位数。通常来说,@Anton的建议是正确的,但正如你自己发现的那样,在这种情况下,按角度加权比按面积加权更好。 - chtz
1个回答

3

这个想法是通过连接到当前顶点的边的角度来加权面法线,然后再将它们添加到该顶点的法线中。

因此,在我的第一张图中,右侧大量的法线与左上方单个法线具有相同的累积权重...从而为该角落顶点得出一个整体理想的法线。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接