在3d中仅给出一个向量,构造一个标准正交基

时间:2011-10-13 11:22:52

标签: 3d vector-graphics base

我正在寻找一种简单有效的方法来解决以下问题:

我在3d中有一个向量,我希望得到一个正交基( x y z )其中一个基数向量(假设 x )是给定的向量。所以我正在寻找两个相互垂直的向量,它们也垂直于我给定的向量。

我知道这有很多解决方案,但我不关心我得到哪一个,只要它满足上述要求并使其简单有效。

2 个答案:

答案 0 :(得分:0)

让我们调用你的单位向量x。致电u = (1,0,0)。如果是dot(u,x) ~= 0,请点击u = (0,1,0)。然后,y = x ^ uz = x ^ y

答案 1 :(得分:0)

要摆脱Tibur's if,你可以通过使用廉价(呃)mul + float cast来获得轻微改善

y = x ^ u
y.z += float(y==0); // this changes a zero-vector into (0,0,1)
z = x ^ y

在交叉产品之后进行矢量比较比检查u == x提供更稳定的解决方案,浮动转换取决于您的体系结构,但适用于大多数编译器/平台。

基本上,当x与u共线时,这种基函数总是具有奇点,所以尽量从上下文中明智地选择,记住你不必是常数。在大多数情况下,你可以选择你与一个简单的案例相吻合,这样你就可以平滑奇点并保持你的整体变换稳定。