弧度和角度的转换
image.png
//角度转换成弧度
float x = Mathf. Deg2Rad * 180(角度);
//弧度转角度
float y = Mathf. Rad2Deg * 3.14f(弧度)
//向量之间的夹角
常见角度的值
image.png
SinSin α曲线的来源 转一圈取Y轴的值 SinSin α = y/1
image.png
Cosα = X/1
image.png
向量
基础知识
坐标系
基础知识
向量是终点位置减起始点位置得到的;向量是没有位置的,可以任意平移;
:1. 相等向量:大小和方向相等就是相等向量;
-
0向量:方向是任意方向,模长为0;
-
单位向量:模长为1的向量;
-
相反向量:大小相等,方向相反;
向量的加法
几何方法理解:1:补全平行四边形方法,把两个相加的向量,起点放在同一个位置,补全为平行四边形,两个向量共同起点做平行四边形的对角线,这个对角线就是两个向量相加的结果;
image.png
2.三角形方法:以某一个(a)向量的终点为另外一个向量(b)起始点,链接a向量的起始点到b向量的终点,得到的向量就是a向量和b向量相加;
image.png
数学方法理解:向量a(6,0,0),向量b(3,0,3) a+b= (6+3,0+0,0+3)= (9,0,3)
a(x,y,z), b(a,b,c) a+b=(x+a,y+b,z+c);
向量的减法
向量的减法:几何方向理解:将两个向量起始点移至同一点,连接两个向量的终点,方向为减向量指向被减向量;
a - b = c 这个地方a是被减数, b是减数 c是差 就是a是被减向量,b是减向量 c向量是从b向量终点指向a向量终点
image.png
数学角度去理解:a(x,y,z) b(a,b,c); a – b = (x-a,y-b,z-c);
向量和标量相乘
得到的结果还是向量,就是原来向量方向不变,模长和标量相乘
向量点乘的应用:
点乘:a · b =|a| · |b|cos(theta)
b向量在a向量方向上投影长度,乘以a向量的模;
数学公式:a(x,y,z) b(a,b,c) a·b = xa+yb+z*c
可以判断出物体是否在另外一个物体前面还是后面
image.png
向量叉乘
image.png几何:两个向量叉乘,得到一个新的向量,新向量跟原始两个向量都垂直,也就是得到由两个向量所确定平面的法向量;
数学:a(x,y,z) b(I,j,k)
a X b = (yk – z * j,-xk + z I,xj-y*i)
代码理解:
Vector3 v = sphere.transform.position - cube.transform.position;
//float w = Vector3. Dot (cube. transform. forward, V. normalized)
Vector3 cross = Vector3.Cross(cube.transform.forward, v);
Debug.DrawLine(cube.transform.position, cube.transform.forward * 10, Color.red);
Debug.DrawLine(cube.transform.position, sphere.transform.position, Color.green);
Debug.DrawRay(cube.transform.position, cross, Color.blue);
if (cross.y > 0){
Debug.Log("在右边");
}
else
{
Debug.Log("在左边");
}
关系复刻
image.png利用向量与四元素计算夹角与距离
方案一
float dot = Vector3.Dot(cube_0.transform.forward,
(shaper_0.transform.position - cube_0.transform.position).normalized);
float deg = Mathf.Acos(dot) * Mathf.Rad2Deg;
//也可以用这种方法直接求得角度
//float deg = Vector3.Angle(shaper_0.transform.forward, (shaper_0.transform.position - cube_0.transform.position).normalized);
//将向量旋转
Vector3 dir2 = Quaternion.AngleAxis(deg, Vector3.up) * cube_1.transform.forward;
Debug.DrawRay(cube_1.transform.position, dir2, Color.red);
//旋转之后将向量平移
shaper_1.transform.position = cube_1.transform.position + dir2;
第二种 直接向量运算
//第二种 直接向量相计算
Vector3 dirnew = shaper_0.transform.position - cube_0.transform.position;
Vector3 dirnew2 = dirnew + cube_1.transform.position;
shaper_1.transform.position = dirnew2;
网友评论