在 3D 中对任意平面上的一组点进行三角测量 space

Triangulate set of points on arbitrary plane in 3D space

我有一组 3D 点 space。最大误差为 10^-5 我可以放置一个平面穿过它们(误差是点到平面的距离)。

有没有办法在这个任意平面上对这些点进行三角测量?我已经尝试过 Bowyer-Watson,但这仅在错误为 0 时有效。其他任何东西都不会进行三角剖分,或者我不会得到很好的三角剖分(重叠三角形)。

编辑

我想我找到了问题所在。在某些角度,bowyer watson 算法将不起作用,因为我对外心的计算已关闭。如何计算 3D 三角形的外接圆心?

因为我知道平面上的点,所以我可以计算出一个向量。该矢量位于平面上。接下来我计算点的质心。

使用矢量和质心我可以在平面上创建一个大三角形

        Vertex p1 = new Vertex(dir * 3000 + center);
        Vertex p2 = new Vertex(Quaternion.AngleAxis(120, plane.normal) * dir * 3000 + center);
        Vertex p3 = new Vertex(Quaternion.AngleAxis(240, plane.normal) * dir * 3000 + center);

现在我有了封闭的三角形,我可以使用 Bowyer-Watson。 对于 3D 中的外心,我使用:

Vector3 ac = p3 - p1;
    Vector3 ab = p2 - p1;
    Vector3 abXac = Vector3.Cross(ab, ac);

    circumceter = p1 + (Vector3.Cross(abXac, ab) * ac.sqrMagnitude + Vector3.Cross(ac, abXac) * ab.sqrMagnitude) / (2 * abXac.sqrMagnitude);

现在我在 3D 的任意平面上有一组三角点。