三角测量在3D空间的任意平面上的点集

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三角测量在3D空间的任意平面上的点集相关的知识,希望对你有一定的参考价值。

我在3D空间中有一组点。最大误差为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的任意平面上有一组三角形的点。

以上是关于三角测量在3D空间的任意平面上的点集的主要内容,如果未能解决你的问题,请参考以下文章

投影3D网格的2D轮廓算法

切片 3D 模型?

透视校正插值

opengl中3d空间平面上的程序网格

python如何绘制一个三维空间下的平面?

为啥要进行平面点云数据的拟合