Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何确定显示三维平面的哪一侧?_Wpf_3d_Quaternions - Fatal编程技术网

Wpf 如何确定显示三维平面的哪一侧?

Wpf 如何确定显示三维平面的哪一侧?,wpf,3d,quaternions,Wpf,3d,Quaternions,这是一个3d n00b问题 我正在开发一个WPF控件,它实现了Silverlight透视变换功能的基础,允许2D平面在三个轴中的任意一个轴上旋转。它工作得很好。然而,我对确定飞机后部是否显示所需的数学有点困惑。我现在明白这一点的天真代码是: bool isBackShowing = Math.Abs(RotationX) > 90 && Math.Abs(RotationY) < 90; if (!isBackShowing) { isBackShowing

这是一个3d n00b问题

我正在开发一个WPF控件,它实现了Silverlight透视变换功能的基础,允许2D平面在三个轴中的任意一个轴上旋转。它工作得很好。然而,我对确定飞机后部是否显示所需的数学有点困惑。我现在明白这一点的天真代码是:

bool isBackShowing = Math.Abs(RotationX) > 90 && Math.Abs(RotationY) < 90;
if (!isBackShowing)
{
    isBackShowing = Math.Abs(RotationX) < 90 && Math.Abs(RotationY) > 90;
}
bool-isBackShowing=Math.Abs(RotationX)>90&&Math.Abs(RotationY)<90;
如果(!isBackShowing)
{
isBackShowing=数学Abs(旋转X)<90和数学Abs(旋转Y)>90;
}
但是,当任一轴上的旋转介于+-270和+-360之间时,此操作失败


基本变换是使用一个四元数对象来进行实际旋转,它具有很好的轴和角度属性,因此我猜如果我知道如何进行,我可以使用它。

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

如果它是正的,那么飞机就背对着你

如果是负数,那么飞机就朝向你

如果它为零,则您正在查看上的平面边

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


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

如果它是正的,那么飞机就背对着你

如果是负数,那么飞机就朝向你

如果它为零,则您正在查看上的平面边

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


只是不想再谈这个问题,很抱歉耽搁了。愚蠢的问题,但我怎么才能发现飞机正常?我有视线方向。只是不想回到这里,抱歉耽搁了。愚蠢的问题,但我怎么才能发现飞机正常?我确实知道方向。