使用法线沿着2维平面移动3D顶点

时间:2018-07-18 22:15:37

标签: algorithm matrix geometry

我有一个三角形,在3D空间中放置了任意顶点。

我认为这样做很容易找到三角形的质心

float centroid[3] = { 0, 0, 0 };

for (int i = 0; i < 3; ++i) {
    for (int j = 0; j < 3; ++j) {
        centroid[i] += points[j][i];
    }
    centroid[i] /= 3.0;
}

使用平面方程

也很容易找到它的法线
crossProduct(points[1] - points[0], points[2] - points[0]);

有一种非常简单的方法可以将顶点从质心移出 ,但这太线性了。我只能来回移动指针。

从三角形法线的角度形成的伪X / Y轴上自由移动顶点所需的公式是什么?

作为参考,我将 C ++ QT 用于向量和矩阵。我正在使用基本的 OpenGL 渲染。

1 个答案:

答案 0 :(得分:1)

要在三角形平面中构建坐标轴,可以使用从重心到任意顶点的轴pseudoX和垂直轴pseudoY = pseudoX.cross.Normal

选择顶点作为基本向量似乎很自然。如果要增加一些随机性,请将此pseudoX旋转任意角度,然后再次生成新的pseudoY作为叉积。

另一种在平面上生成矢量的方法-仅从法线开始。选择幅度最大的正态分量,将其取反并与第二幅度的分量交换,使最小的分量为零。例如,如果

 |ny|>=|nz|>=|nx|
 Vec = (0, nz, -ny)  

请注意Vec.dot.Normal = 0,所以Vec位于三角形平面