我有一个面向任何方向的多边形,并且定位在三维空间的任何位置。我需要将多边形转换为xy平面,以便我可以在2D中执行各种操作(尤其是在多边形的边界框上生成点网格),然后将其转换回来。将3d多边形旋转到xy平面中,同时保持方向
问题出现在转换后的多边形的方向上。如果我只想旋转到平面中,我可以取多边形的法线与xy平面之间的角度,并围绕与两个方向正交的轴旋转(叉积)。但是,我要求多边形的边界框的方向应使边界框的底部(最低z值)边与xy平面共面,无论是在变换之前还是之后。换句话说,边界框平齐地平放在与地面平行的一侧。转换后,该边缘将平行于x轴。这是为了使我在表面上生成的点的网格始终有平行于地面的行,而不管多边形的方向如何。
我的方法是执行两次旋转;首先围绕z轴旋转由多边形平面与xy平面相交形成的线与x轴之间的角度。这确保边界框的底部不会移出xy平面。然后,再次围绕x轴旋转多边形(新)法线与xz平面之间的角度。以下是步骤:
- 找到多边形平面的公式(来自法线)。
- 找到多边形的平面和xy平面的交点。这是xy平面中的一条线。
- 找到这条线和x轴之间的角度。
- 绕z轴旋转多边形的角度。
- 确定新的正常。
- 找出新法线与xy平面之间的夹角。
- 围绕x轴以此角度旋转多边形。
- 多边形现在应该位于xz平面中;使用最大/最小x和y值生成边界框,生成点网格等,然后将所有内容都转换回开始位置。
我意识到应该合并两个旋转来减少矩阵乘法的次数,但这是一般算法。
我不是图形专家;任何人都可以提供有关此技术的建议有没有更好的办法?我的方法听起来是否正确?我正在使用Java进行开发,并正在使用Transform3D类来进行旋转。
我投票结束我的问题。这可能太过本地化,而且我的方法无论如何都或多或少是正确的。它会更适合图形论坛。写这个问题的行为帮助我解决了这个问题。 – 2011-06-01 04:35:42