如何计算两个空间向量之间的转角

原创 2005年04月28日 18:16:00

在三维空间当中,经常涉及到计算两个向量之间的角度问题,而且这个角度是特定的方向角度

也就是说,围绕他们的公共法向量旋转的角度

假定这两个向量是a和b

我们知道 c=a×b是一个向量,方向是按照右手坐标系生成的,垂直于ab所在平面的向量,c向量的模是|c|=|a|*|b|*sinCita

同时,我们知道,向量a*b是一个数,它的大小是是 |a|*|b|*cosCita

根据这两个表达式,我们似乎可以用  tanCita = |a×b|/(a*b)来计算夹角

但是,这个计算是有问题的,因为|c|这个求模运算,永远返回的是一个整数,体现不出方向的问题

为了解决这个问题,我们可以把c向量和ab的转轴也是法向量N进行点乘来解决

假定b是围绕N这个单位向量旋转了cita角达到了b

那么显然(a×b)*N就是我们需要的c的模了

另外,我们需要知道的是,从a到b的旋转角度是0到360度范围的

借助atan2函数,可以完美的计算出这个旋转角度

cita = atan2( (a×b)*N,  a*b)

这个计算当中,a和b的模长可以是任意的,只要非0即可

无需对他们进行单位化处理,唯一需要单位化的转轴(法向量)N

附注:这个技术在物体的运动控制,比如导弹跟踪的算法当中会用到

基于Visual C#的DirectX开发实例——透视投影矩阵

透视投影矩阵投影就是将一个三维空间中某点(或线、面等)根据一定的规则转换到二维空间中,投影根据其投影方式又分为透视投影和正射投影,如下图即为透视投影的示意图:透视投影有四个重要的参数,即视角(φ)、宽...

点的法向量计算

在OPENGL编程中,三维模型顶点法向量的计算很重要,它直接影响着显示的效果;本人接触OPENGL时间不长,很长一段时间一直困惑于法向量计算的问题,后经仔细研究并找了些资料才基本实现了法向量的计算算法...
  • GISSTAR
  • GISSTAR
  • 2011年12月08日 20:24
  • 5721

一个简单的三维向量类

《3D数学基础:图形与游戏开发》中的一个三维向量类,自己做了一些小修改。...

计算重要天文坐标系之间的转换(C#)

用了一个多月的时间研究天文坐标系之间的坐标转换,虽然最终项目不得不砍掉与之相关的功能(因为某些原因),但是对于使用计算机模拟宇宙中天体坐标系的相互转换还是有一些非常重要的成果值得分享,希望对从事虚拟现...

计算两向量的旋转角

向量的点乘和叉乘都是很有用的数学工具,不过他们也有局限性。关键是向量点乘可以得到两个向量之间的夹角, 而不是旋转角,这个角度是没有方向的,范围是[0-pi], 而这往往不是我们想要的, 实际问题中我们...

3D数学基础之C#实现矩阵变换

Never put off what you can do today until tomorrow.从刚开始学unity各种组件,C#基础,API,到现在的学习Cg语言,学习shaderLab 用...

三维空间中关于点线面的计算

1. 求两点间的距离

Vector3 三维向量

Vector3 三维向量 Struct Representation of 3D vectors and points. 表示3D的向量和点。 This structure i...

向量维数与向量空间维数的区别

最近复习做题发现维数这个概念不难理解,但是一会是列的个数,一会又是行的个数,混乱了。一查书,果然是将概念搞混了。向量的维数和向量空间的维数是不同的,本文的向量是列向量。 向量的维数指的向量分量的...

点积应用-求两个向量夹角

之前,由点积求两条直线的夹角,只知道会用,不知道原量,今天看计算机图形学,才知道其原量,待记录如下:    点积最重要的应用时计算两个向量的夹角,或者两条直线的夹角。图给出了二维的情况,其中向量...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何计算两个空间向量之间的转角
举报原因:
原因补充:

(最多只允许输入30个字)