如何样旋转使得两个立方体对应的法向量平行且同向
怎么样旋转使得两个立方体对应的法向量平行且同向
在三维空间中有两个物体A,B,不一定是立方体,现在为了方便起见,视为立方体。
物体A有一个平面A', 对应的法向量是AA
物体B有一个平面B', 对应的法向量是BB.
现在我要旋转B, 使得法向量BB和法向量AA平行且同向。
这个该如何实现? 不需要代码。 麻烦知道的告诉一下具体实现的数学公式。
比如物体B上有一个点 b(x1,y1,z1)。 旋转之后对应的点为b’
知道的指点一下哈,非常感谢
------解决方案--------------------
根据AA和BB向量可以计算出一个四元数,然后四元素转化成变换矩阵M[4*4]
然后把齐次坐标b(x1, y1, z1, 1)乘以M即可
------解决方案--------------------
给你贴一段代码吧:
http://code.google.com/p/geometry/source/browse/trunk/geometry/include/gtl/quat.hpp
重点看这个函数:
//! Construct a rotation which is the minimum rotation necessary to make vector \a rotate_from point in the direction of vector \a rotate_to.
void setValue(const Vec3<Type> & a_rotate_from, const Vec3<Type> & a_rotate_to)
通过两个向量 a_rotate_from和a_rotate_to构造一个四元素,通过四元素产生一个选择矩阵M4*4.
在三维空间中有两个物体A,B,不一定是立方体,现在为了方便起见,视为立方体。
物体A有一个平面A', 对应的法向量是AA
物体B有一个平面B', 对应的法向量是BB.
现在我要旋转B, 使得法向量BB和法向量AA平行且同向。
这个该如何实现? 不需要代码。 麻烦知道的告诉一下具体实现的数学公式。
比如物体B上有一个点 b(x1,y1,z1)。 旋转之后对应的点为b’
知道的指点一下哈,非常感谢
------解决方案--------------------
根据AA和BB向量可以计算出一个四元数,然后四元素转化成变换矩阵M[4*4]
然后把齐次坐标b(x1, y1, z1, 1)乘以M即可
------解决方案--------------------
给你贴一段代码吧:
http://code.google.com/p/geometry/source/browse/trunk/geometry/include/gtl/quat.hpp
重点看这个函数:
//! Construct a rotation which is the minimum rotation necessary to make vector \a rotate_from point in the direction of vector \a rotate_to.
void setValue(const Vec3<Type> & a_rotate_from, const Vec3<Type> & a_rotate_to)
通过两个向量 a_rotate_from和a_rotate_to构造一个四元素,通过四元素产生一个选择矩阵M4*4.