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数学

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