3D数学

作者: SeanLink | 来源:发表于2023-07-23 17:27 被阅读0次

弧度和角度的转换


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. 相等向量:大小和方向相等就是相等向量;

  1. 0向量:方向是任意方向,模长为0;

  2. 单位向量:模长为1的向量;

  3. 相反向量:大小相等,方向相反;

向量的加法

几何方法理解: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

向量叉乘

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;

相关文章

  • 书单

    《3D数学基础》《代码大全2》《CLR Via C#》《程序员的数学》

  • OpenGL向量、矩阵应用

    一、3D数学 3D数学.在图像图形开发中的充当了什么⻆色?对于学习OpenGL 有一个误区,就是大家认为如果不能精...

  • OpenGL 之3D数学

    3D数学和图像图形的关系 对于学习OpenGL 有一个误区,就是大家认为如果不能精通那些3D图形数学知识,会让我们...

  • 3D数学

    1, 向量 2, 矩阵 3, 欧拉角 4, 四元数 5, 坐标系变换 6, 齐次坐标与透视变换的推导 齐次坐标 向...

  • [3D数学]

    一:坐标系 1.笛卡尔坐标系 2D坐标系都是‘’等价‘’的,无论原点在哪里,我们都可以通过平移将两个坐标系重合 3...

  • Unity基础-向量

    向量是2D、3D数学研究的标准工具,在3D游戏中向量是基础。 一、向量 1、向量的数学定义 向量就是一个数字列表,...

  • 动画

    3D旋转3D数学:欧拉角、万向锁、四元数[https://www.cnblogs.com/HDDDDDD/p/15...

  • 3D引擎编程的4个阶段

    3D引擎编程的4个阶段 第一阶段是了解3D原理和数学基础,大学里面学的线性代数,概率统计和高等数学完全足够,在3D...

  • 3D数学基础

    向量 标量(Magnitude) 坐标系 左手坐标系和右手坐标系 点积 Vector3.Dot(VectorA,V...

  • 3D数学介绍

    多坐标系 摄像机坐标系是和观察者密切相关的坐标系。摄像机坐标系和屏幕坐标系相似,差别在于摄像机坐标系处于3D空间中...

网友评论

      本文标题:3D数学

      本文链接:https://www.haomeiwen.com/subject/zlofpdtx.html