规模不可知,可微分,共面性测量

时间:2011-02-02 14:50:04

标签: math 3d

我正在寻找一个(几乎无处不在)可微分函数f(p1, p2, p3, p4),给出四点将给出一个与共面性无关的尺度。如果四个点位于同一平面上则为零,否则为正。尺度不可知意味着,当我统一缩放所有点时,平面度量将返回相同的值。

我想出了一些相当复杂且不易优化的东西。定义u=p2-p1v=p3-p1w=p4-p1。然后平面度量是:

[(u x v) * w]² / (|u x v|² |w|²)

其中x表示交叉乘积,'*'表示点积。

分子是由四个点定义的四面体体积的简单(平方),分母是一个归一化因子,使得该度量变为简单的角度余弦。由于角度在均匀比例下没有变化,因此该功能满足了我的所有要求。

有人知道更简单的事吗?

亚历。

修改

我最终使用增广拉格朗日方法来执行优化,因此我不需要它与规模无关。仅使用约束(u x v) * w = 0就足够了,因为优化过程会找到正确的拉格朗日乘数来补偿比例。

3 个答案:

答案 0 :(得分:2)

你的方法似乎没问题,为了有效实施,我会做这样的事情:

  • 按照你的方式接受你,v,w
  • 规范化它们:存在各种技巧来有效地评估逆平方根,无论你想要什么样的精度,如this jewel。大多数现代处理器都内置了此操作。
  • 取f = | det(u,v,w)| (=(u x v)。w)。有3x3矩阵的快速直接实现;请参阅@ batty对this question的回答。

这相当于没有正方形的情况。它仍然是同质的,几乎无处不在。如果你想要在任何地方都可以区分的话,可以选择行列式的平方。

编辑:@phkahler隐含地建议使用内接球体的半径与外接球体的半径之比作为平面度的度量。这是点的有界可微函数,通过缩放不变。但是,这至少和你(和我)建议的一样难以计算。特别是计算外接球体的半径对于舍入误差非常敏感。

答案 1 :(得分:1)

怎么样

|(u x v) * w| / |u|^3

(如果您认为更简单,可以将|x|更改为(x)^2

答案 2 :(得分:1)

关于点重新排序应该对称的度量是:

((u x v).w)^2/(|u||v||w||u-v||u-w||v-w|)

,其与四面体平方的体积除以所有6个边长度成比例。它并不比你的公式或亚历山大C.更简单,但它并不复杂得多。然而,当任何两点重合时,它确实变得不必要地单数。

性能更好,对顺序不敏感的公式为:

let a = u x v
    b = v x w
    c = w x u
(a.w)^2/(|a| + |b| + |c| + |a+b+c|)^3

这类似于四面体的体积除以表面积,但是提升到适当的力量以使整个物体对尺度不敏感。这也比你的公式复杂一点,但它有效,除非所有4个点都是共线的。