从单个/两个向量构建一组正交基底

来自《Fundamentals of computer graphic》2.4.6 和 2.4.7。

从单个向量构造基底

我们经常需要一组与某个给定向量对齐的正交基底。
即,给定一个向量 a \mathbf{a} a,我们需要一组正交向量 u , v , w \mathbf{u},\mathbf{v},\mathbf{w} u,v,w
其中 w \mathbf{w} w a \mathbf{a} a有相同的方向,但是我们不关心 u , v \mathbf{u},\mathbf{v} u,v具体是什么。一个向量不足以唯一地确定基底,我们只是需要一种鲁棒的机制来找到其中任意一种可能基底。
 
首先,使得 w \mathbf{w} w a \mathbf{a} a 方向上的一个单位向量:
w = a ∥ a ∥ \mathbf{w}=\frac{\mathbf{a}}{\| \mathbf{a} \|} w=aa
然后,选取同 w \mathbf{w} w 不共线的任意一个向量 t \mathbf{t} t,如下构建一个正交于向量 w \mathbf{w} w 的单位向量 u \mathbf{u} u:
u = t × w ∥ t × w ∥ \mathbf{u} = \frac{\mathbf{t} \times \mathbf{w}}{ \|\mathbf{t} \times \mathbf{w}\| } u=t×wt×w

叉积交换顺序也可以,但是需要确定得到的基底是右手坐标系。

如果 t \mathbf{t} t w \mathbf{w} w共线或者接近共线,结果都不准确。
一个简单的机制是从 w \mathbf{w} w 开始构造 t \mathbf{t} t,首先令 t \mathbf{t} t 等于 w \mathbf{w} w,然后将其分量中绝对值最小的分量改为 1。
举个例子,如果 w = ( 1 / 2 , − 1 / 2 , 0 ) \mathbf{w} =(1/\sqrt{2},-1/\sqrt{2},0) w=(1/2 ,1/2 ,0),那么, t = ( 1 / 2 , − 1 / 2 , 1 ) \mathbf{t} =(1/\sqrt{2},-1/\sqrt{2},1) t=(1/2 ,1/2 ,1)
在知道 w \mathbf{w} w u \mathbf{u} u后,
v = w × u \mathbf{v} = \mathbf{w} \times \mathbf{u} v=w×u
使用这种构造方法的一个场景是表面上色。一组和表面法线对齐的基底是需要的,但是关于发现的旋转是不重要的。

从两个向量构造基底

一个常见的例子是为一个相机构造一组基底;沿着相机看的方向有一个对齐的向量是重要的,但是围绕这个向量的旋转并不是任意的,而且这需要以某种方式指定。一旦确定了旋转,这组基底就完全决定了。
完全指定一帧的方法是通过提供两个向量 a \mathbf{a} a(指定 w \mathbf{w} w)和 b \mathbf{b} b(指定 v \mathbf{v} v)。如果这两个向量是正交的,那么构造第三个向量的简单的方法是通过 u = b × a \mathbf{u}=\mathbf{b} \times \mathbf{a} u=b×a

u = a × b \mathbf{u}=\mathbf{a} \times \mathbf{b} u=a×b 也是构造一组正交基,但是这是左手坐标系。

为了得到正交基底,即使输入的向量不正交,我们需要如下操作:
w = a ∥ a ∥ \mathbf{w} = \frac{\mathbf{a}}{\| \mathbf{a}\|} w=aa
u = b × w ∥ b × w ∥ \mathbf{u} = \frac{\mathbf{b} \times \mathbf{w}}{ \|\mathbf{b} \times \mathbf{w}\| } u=b×wb×w
v = w × u \mathbf{v} = \mathbf{w} \times \mathbf{u} v=w×u
如果 a \mathbf{a} a b \mathbf{b} b平行,上述方法失效。在这种情况下, b \mathbf{b} b对于选择我们应该使用的与 a \mathbf{a} a 正交的方向没有帮助。

在指定摄像机位置的例子中(本书 Section 4.3),我们想要构造一个帧:拥有平行于摄像机所观察的方向 w \mathbf{w} w,并且 v \mathbf{v} v应该指向摄像机的顶部。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

培之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值