Unity3D 两向量旋转角

在游戏中经常用到的,已知两向量A, B ,求出A->B的旋转角。但U3D给出的Vector3.Angle()方法只能返回0到180度的向量夹角。如果想得到0到360度的旋转角,需要自己做一些逻辑运算。方法如下:

参数 a:起始向量; b:目标向量; n:旋转方向

public static float SignedAngleBetween(Vector3 a, Vector3 b, Vector3 n)
    {
        float angle = Vector3.Angle(a,b);
        float sign = Mathf.Sign(Vector3.Dot(n,Vector3.Cross(a,b)));
        float signed_angle = angle * sign;
        return (signed_angle <= 0) ? 360 + signed_angle : signed_angle;
    }

例子:已知向量a=(1, 0, 1), b=(-1, 0, 1) ,求a顺时针转到b的旋转角,则n应该为(0, 1, 0),结果为270度。若n=(0, -1, 0),则逆时针,结果为90度。

时间: 2024-10-22 18:27:57

Unity3D 两向量旋转角的相关文章

求两向量在0~360度之间的角度值及实际应用

实际应用 问题 先从实际问题出发,这样可以更好的理解问题. 项目需要控制角色在地图中随意移动,角色素材是8方向的. 那问题就是 如何根据点击的鼠标位置来决定使用哪个方向的图集? 分解问题 首先8方向图集 360/8 = 45 也就是每45度一个图集. 然要注意起始角度并不是0度. 不是0~45度 是图集A, 而应该是 -22.5~22.5 是图集A ,22.5 ~ 67.5(22.5+45) 是图集B 以此类推 根据当前Touch(PosB),和上次Touch(PosA) 做一个向量AB , 只

Unity3D两种方式实现游戏视频播放

准备工作 由于Unity中能够识别的视频格式主要有:.mov, .mpg, .mpeg, .mp4, .avi, .asf,但是其实最后这些格式的时候在导入到Unity中的时候,都会再进行一次Unity内部的视频转码,这是一个耗时的操作,而且要保证视频转码的顺利完成,我们还必须安装Quicktime player工具,用于视频的转码. 按照要求,我安装了Quicktime player之后,将视频war_video.mp4通过拖拽导入到Unity中,结果提示:"Movie importing r

Unity3D两种方式播放视频

  Unity3D中播放游戏视频的方式有两种,第一种是在游戏对象中播放,就好比在游戏世界中创建一个Plane面对象,摄像机直直的照射在这个面上.第二种是在GUI层面上播放视频.播放视频其实和贴图非常相像,因为播放视频用到的MovieTexture属于贴图Texture的子类,那么本章我们就好好学习一下Unity中播放视频的这两种方式.哇咔咔-           Unity支持的播放视频格式有.mov..mpg..mpeg..mp4..avi和.asf.只需将对应的视频文件拖拽入Project视

erlang 通过尾递归实现双层循环,并抽象出两向量的叉积的一般运算式

当我使用erlang 编程的时候,总是为没有循环而苦恼.连乘法口诀表都很难实现,想想都郁闷.     然而当你必须要解决循环的时候,你发现了另外一条路. C语言: for(int i=1;i<10;i++) { for(int j=1;j<10;j++) { if(i>=j) printf("%d",i*j); } printf("\n"); } 第一层循环和第二层的关系: i 为第二层的输入,j从  1 迭代到 9 然后 i 和 从1~9 相乘,

判断两向量之间夹角是顺时针还是逆时针?

设右手坐标系下,向量a = (x1, y1),b = (x2, y2),则从向量a到向量b的角度为: <a, b> = -arcsin((a X b)z / |a| |b|) -arcsin( (x1y2 - x2y1) / |a||b|) 注:1. X——是叉乘: 2. 在右手坐标系中,a X b的方向(即z轴方向)与向量a到向量b的夹角正好相反,故前面加上“-”.右手坐标系中,握拳方向是逆时针.

poj 3129 How I Wonder What You Are! 点积求两向量夹角

水题,直接贴代码. //poj 3129 //sep9 #include <iostream> #include <cmath> using namespace std; const double eps=0.00000001; struct P{ double x,y,z; }p[512],tel[64]; double a[64]; int main() { int i,j,cnt,n,m; while(scanf("%d",&n)==1&&

【Unity3d游戏开发】Unity3D中的3D数学基础---向量

向量是2D.3D数学研究的标准工具,在3D游戏中向量是基础.因此掌握好向量的一些基本概念以及属性和常用运算方法就显得尤为重要.在本篇博客中,马三就来和大家一起回顾和学习一下Unity3D中那些常用的3D数学知识. 一.向量概念及基本定义 1.向量的数学定义 向量就是一个数字列表,对于程序员来说一个向量就是一个数组. 向量的维度就是向量包含的"数"的数目,向量可以有任意正数维,标量可以被认为是一维向量. 书写向量时,用方括号将一列数括起来,如[1,2,3] 水平书写的向量叫行向量 垂直书

判断两个平面向量之间夹角是顺时针还是逆时针

判断两个向量之间夹角是顺时针还是逆时针 利用平面向量的叉乘 a = (x1,y1)    b = (x2,y2) a×b = x1y2 - x2y1 若结果为正,则向量b在a的顺时针方向 否则,在a的逆时针方向 若结果为0,则a与b共线 注:两向量之间夹角以小于180度计算

unity 由两个向量求夹角

1. float angle = Vector3.Angle (fromVector, toVector); //求出两向量之间的夹角 Vector3 normal = Vector3.Cross (fromVector,toVector);//叉乘求出法线向量 angle *= Mathf.Sign (Vector3.Dot(normal,upVector)); //求法线向量与物体上方向向量点乘,结果为1或-1,修正旋转方向 2. Vector3 velocity = Quaternion.