0

这是一个 3d n00b 问题。

我正在开发一个 WPF 控件,它实现了 Silverlight 的 PerspectiveTransform 功能的基础知识,允许在三个轴中的任何一个上旋转 2D 平面。它工作得很好。但是,我对确定飞机后部是否显示所需的数学有点犹豫。我现在弄清楚这一点的天真代码是:

bool isBackShowing = Math.Abs(RotationX) > 90 && Math.Abs(RotationY) < 90;
if (!isBackShowing)
{
    isBackShowing = Math.Abs(RotationX) < 90 && Math.Abs(RotationY) > 90;
}

但是,当任一轴上的旋转在 +-270 和 +-360 之间时,这将失败。

底层变换是使用四元数对象进行实际旋转,它具有很好的 Axis 和 Angle 属性,所以我猜如果我知道如何使用它,我可以使用它。

4

1 回答 1

5

你需要做平面法线和视图方向的点积。

如果是肯定的,那么飞机背对着你。

如果它是负数,那么飞机正对着你。

如果它为零,那么您正在查看平面边缘。

要找到平面法线,请在平面上取任意三个点——我们称它们为 OA 和 B。取从 O 到 A 和从 O 到 B 的向量。如果你取这两个向量的叉积,你会得到法线。请小心,因为您进行计算的顺序很重要。一本关于 3D 几何的好书/网站将提供无价的帮助

维基百科

于 2010-05-24T16:20:25.150 回答