精华内容
下载资源
问答
  • av28779788?p=?视频学习笔记 当前为-->第四部分:3D数学 向量 ...向量的模 ...求模,在unity中随便添加1个物体,再将下例脚本拖拽其上,运行结果如图: ...如上,白线为模长--注:为方便,本章代码中摄像机均位于...向量相减...

    av28779788?p=?视频学习笔记

    • 当前为-->第四部分:3D数学

    向量

    向量的模

    求模,在unity中随便添加1个物体,再将下例脚本拖拽其上,运行结果如图:

    如上,白线为模长--注:为方便,本章代码中摄像机均位于世界坐标原点(0,0,0)

    向量的方向

    如上,红线为单位向量-向量方向-归一化向量.

    向量运算(1)

    向量相减

    为了便于观察理解,以下2个物体Y坐标皆是0,运行后感觉结果怪怪的,改成ISO正交模式后观察就容易理解了:



    如上,红线为T1-T2;黄线为T2-T1.以下为草图辅助理解.虚线为我们理解的T2-T1但实际并不存在.因为所有向量起点必须是世界坐标原点0,0,0.

    .

    修改1下代码,再拖放1个物体T3到场景中,将T3和T2放一起.然后t3也挂在脚本上.下例代码按空格键t3(相当于子弹)会向t1移动:




    向量相加

    向量乘除标量

    三角函数





    如上,白线会随物体运动而变化(永远指向物体自身坐标的(0,0,10)).
    不管物体如何运动,红线的终点始终在世界坐标(0,0,10).
    -------------------------------------------------------------------

    练习:计算物体右前方30度,10米远的坐标(如图是横X轴,竖Z轴,Y轴忽略不计)


    如下,白线终点即为所求坐标点.

    向量运算(2)

    点乘

    注意:根据点乘结果计算夹角范围为0-180度.

    结果如下图:


    假如我们在代码中添加判断夹角是否大于60度的逻辑,以下两种写法都可以.其中第二种方法可以避免做一次arccos运算.

    当然,也可以用查表法.即在程序开始之时把各个角度的正弦余弦等提前算好存入数组中.这样在游戏中需要时不必计算(因为计算通常都是在Update中频繁运算,比较浪费计算机资源)直接读取数组相应元素即可.相当于把正弦表余弦表存入计算机,需要时读取:

    叉乘


    结合点乘与叉乘获取两向量夹角,取值范围0-360度:

    注意:结合点乘与叉乘,可判断夹角在0-360度(单独用叉乘获得的夹角在0-90度,一般不用)

    练习:敌人对玩家发动攻击的逻辑

    展开全文
  • 向量

    2017-09-12 22:30:00
    相减(向量之差),向量相应坐标相减产生的新向量向量之差,由减数指向被减数。 标量乘法(scalar),向量的各坐标乘以相应的标量(scalar)后产生的新向量,方向不变。 长度(magnitude),各坐标平方后求和再开...

    向量的基本运算:

    1. 相加(向量之和),向量相应坐标相加产生的新的向量为向量之和。
    2. 相减(向量之差),向量相应坐标相减产生的新向量为向量之差,由减数指向被减数。
    3. 标量乘法(scalar),向量的各坐标乘以相应的标量(scalar)后产生的新向量,方向不变。
    4. 长度(magnitude),各坐标平方后求和再开平方所得的值即为向量的长度。
    5. 方向(direction),可以被同一方向上的单位向量表示,寻找单位向量的过程称为标准化。
    6. 点积(dot product),两个向量相对应坐标的乘积和,为一个数值。
    7. 平行向量,一个向量可以由另一个向量进行标量乘法得到,则互为平行向量。
    8. 正交向量,两个向量的点积为0则互为正交向量。

    转载于:https://www.cnblogs.com/zhixingzhong/p/7512565.html

    展开全文
  • 记录一下对"点和向量在不同坐标系间变换"的理解。 问题1:点在不同坐标系间变换 已知坐标系A以及坐标系中一点C(x,y,z),另一个坐标系B在A中的零点B0(Xo,Yo,Zo)以及坐标系B在A中的x,y,z三方向(Axx,Axy,Axz)、(Ayx,...

    记录一下对"点和向量在不同坐标系间变换"的理解。

    问题1:点在不同坐标系间变换

    已知坐标系A以及坐标系中一点C(x,y,z),另一个坐标系B在A中的零点B0(Xo,Yo,Zo)以及坐标系B在A中的x,y,z三方向(Axx,Axy,Axz)、(Ayx,Ayy,Ayz)、(Azx,Azy,Azz)。

    求点C在B中的坐标D(Xb,Yb,Zb)?

    C(x,y,z)代表的意思是 向量 (C(x,y,z)-(0,0,0)) 在X轴(1,0,0),y轴(0,1,0),Z轴(0,0,1)上的投影。

    而投影就是向量的点乘

    Dot(E(X1,Y1,Z1),F(X2,Y2,Z2)) =( X1X2+Y1Y2+Z1Z2) =|E|*|F|*Cos(夹角)

    也就是

    x = Dot(C,X)  y = Dot(C,y) z =Dot(C,z)
    以此类推求C在B中的坐标就变成了 向量(C-B0)在B的三个坐标轴上的投影。

    (Dot((C-B0),(Axx,Axy,Axz),Dot((C-Bo),(Ayx,Ayy,Ayz)),Dot((C-B0),(Azx,Azy,Azz)))

    进一步也就变成了

    (Acbx*Axx+Acby*Axy+Acbz*Axz,Acbx*Ayx+Acby*Ayy+Acbz*Ayz,Acbx*Azx+Acby*Azy+Acbz*Azz)

    着就是C在B中的坐标(Xb,Yb,Zb)

    此结果正好与下面矩阵乘法结果相同。

    \begin{bmatrix} Axx&Axy &Axz \\ Ayx&Ayy &Ayz \\ Azx&Azy &Azz \end{bmatrix}\begin{bmatrix} Acbx\\ Acby\\ Acbz \end{bmatrix}

    所以矩阵就和坐标变换挂钩。

    \begin{bmatrix} Axx&Axy &Axz \\ Ayx&Ayy &Ayz \\ Azx&Azy &Azz \end{bmatrix} 是一个正交矩阵,正好由B的三轴组成。

    所以点C在坐标系B中的坐标只需要使用上面的矩阵和向量(C-B0)所代表的3X1矩阵即可。

    由于这个矩阵是一个正交矩阵,正交矩阵的转置矩阵==正交矩阵的逆矩阵。

    逆矩阵Ax矩阵AX矩阵B = 矩阵B  也就变成了

    转置矩阵AX矩阵AX矩阵B = 矩阵B

    上面正交矩阵的转置矩阵为\begin{bmatrix} Axx&Ayx &Azx \\ Axy&Ayy &Azy \\ Axz&Ayz &Azz \end{bmatrix},同时也是逆矩阵。

    已知C通过矩阵得到D,那么如果已知D求C 跟据矩阵的特性只需要逆矩阵*D即可。

    逆矩阵AX矩阵AX矩阵cb = 矩阵cb

    矩阵AX矩阵cb =D

    那么 逆矩阵AXD = 矩阵cb.

    矩阵cb 和 (C-B0)相对应。

    所以如果已知D在坐标系B中的坐标,求D在坐标系A中的坐标。只需要

    \begin{bmatrix} Axx&Ayx &Azx \\ Axy&Ayy &Azy \\ Axz&Ayz &Azz \end{bmatrix}\begin{bmatrix} Dbx\\ Dby\\ Dbz \end{bmatrix}

    然后将结果矩阵转成向量再加上B0 即可得到 C。

    问题2:向量在不同坐标系间的变化。

    已知坐标系A,向量C,坐标系B以及三轴在A中的向量,求C在坐标系B中的值。

    向量只跟方向有关,所以可以将A,B的0点重合。也就变成了问题1的简化版,B的0点与A的0点重合。

    那么求向量C在B中的向量就很简单了。

    \begin{bmatrix} Axx&Axy &Axz \\ Ayx&Ayy &Ayz \\ Azx&Azy &Azz \end{bmatrix}\begin{bmatrix} Cx\\ Cy\\ Cz \end{bmatrix}

    延申一下,如果已知向量D在坐标系B中的值,求向量D在A中的值那么就用

    \begin{bmatrix} Axx&Ayx &Azx \\ Axy&Ayy &Azy \\ Axz&Ayz &Azz \end{bmatrix}\begin{bmatrix} Dbx\\ Dby\\ Dbz \end{bmatrix}

    即可。

     

     

     

     

     

     

    展开全文
  • 模:向量的长度=>sqr(x^2+y^2+z^2) //各向量的平方相加,在开方 Unity API: Vector.magnitude 单位向量:长度为1的向量叫单位向量(1,1,1) //各个分量分别除以magnitude模长就等于单位向量 公式: Vector v1= ...

    向量:

    Unity中Vector3 既能表示坐标点又能表示向量。

    向量的概念:有大小有方向的箭头叫向量,没有位置。

    坐标点的相减得到一个向量,由减数指向被减数的。

    A到B的方向=B(被减数)-A(减数)

    B到A的方向=A(被减数)-B(减数)

     

    零向量:(0,0,0)     //没有方向

    负向量:让原向量乘以-1得到了相当于原向量来说的负向量

     

    单位向量:长度为1的向量叫单位向量(1,1,1)        //各个分量分别除以magnitude模长就等于单位向量

         计算公式: Vector v1= new Vector(2,2,3);

         v1= new Vector(v1.x/v1.magnitude,v1.y/v1.magnitude,v1.z/v1.magnitude); //单位化向量之后

         Unity API: Vector.normalized

     


     

    向量的模(向量的长度):

        计算公式:向量的长度=sqr(x^2+y^2+z^2) //各向量的平方相加,再开方。

         Unity API: Vector.magnitude

    向量相加:

         计算公式:a向量+b向量=c向量      a(x,y,z)+b(x,y,z)=c(ax+bx,ay+by,az+bz)   //各分量分别相加

         几何意义:两个向量相加得到新的向量

     

    向量相减:

          计算公式:a向量-b向量=c向量      a(x,y,z)-b(x,y,z)=c(ax-bx,ay-by,az-bz)   //各分量分别相减

          几何意义:两个向量相减得到新的向量。a向量-b向量,得到一个新的向量,从b向量的终点指向a向量的终点。


     

     

    向量的乘法:

    点乘:

         计算公式:a(ax,ay,az) b(bx,by,bz)

         a点乘b=ax乘bx+ay乘by+az乘bz =|a||b|cos<a,b>(a的模乘b的模,再乘以两个向量夹角的余弦值cosΘ)

         Unity API:Vector.Dot(a,b);      //a b向量点乘

         几何意义:a向量在b向量方向上投影的长度。

         变种1:如果b向量为单位向量,意义为a向量在b向量方向上投影的长度

         变种2:如果a向量和b向量都为单位向量,意义为a向量和b向量夹角的余弦值。

     

    叉乘:

         计算公式:a(x1,y1,z1) 叉乘 b(x2,y2,z2)=(y1*z2-z1*y2, z1*x2-x1*z2, x1*y2-y1*x2 ) //交叉相乘再相减

         Unity API:Vector.Cross(A,B);    //a b向量叉乘

         几何意义:两个向量叉乘,得到的结果也是一个向量,结果的向量同事垂直于a b向量,也就是说垂直于 a b向量所在的平面。

     

    图示: a向量为红线,b蓝线,黄线是a叉乘b之后得到的向量

     

     a向量为红线,b蓝线,黄线是b叉乘 a之后得到的向量

     

     

    坐标系转换:

    世界坐标转换为屏幕坐标

    Unity API:Camera.main.WorldToScreenPoint(Vector3 position);

    如图所示:

    世界坐标转换为屏幕坐标,z轴为10,而不是0。屏幕坐标只有x,y轴,而没有z轴。

    这里面的z轴就是相机与需要转换的坐标点也就是WorldToScreenPoint(Vector3 position),这个API中的括号内的Vector3 position参数的景深,深度,不是距离。

     

    把Cube当做坐标点,转换成屏幕坐标

     

    Cube位置偏移之后,z轴还是10,如果是距离,这个时候应该比10大。

     

     

    相对坐标

    相对于某一个物体的局部坐标(某个物体的子节点)

    Unity API :Vector3.InverseTransformPoint(transform.position);

    从世界空间到局部空间的位置转换

     

     

     

     

    如图所示:

    Cube 相对于Sphere的局部坐标

    Sphere.InverseTransformPoint(Cube.position);

     

     

    Cube挂载到Sphere的子节点,位置对比

     

     

     

    游戏物体的旋转在3D引擎中,有三种方式:1、欧拉角 2、四元数 3、矩阵

     

    欧拉角:

    Unity API:Transform.eulerAngles=new Vector3(0,45,0); //绕着y轴旋转45度

    欧拉角,x轴旋转正负90度就会发生万向节死锁

     

    x轴旋转90之后,旋转y轴,实际上旋转的是z轴。

     

     

     

    四元数:

    概念:用四维空间表示三维中的旋转,它有四个分量x,y,z,w

    w+ax+by+cz

    x^2=y^2=z^2=-1

    超复数:一个实部w,三个虚部x,y,z

     

    复数:由实部和虚部组成的数  3(实数)+4i(虚数)

    实数 :有理数和无理数的集合

    有理数:有限小数,无限循环小数,和整数,都叫做有理数(有道理的数)

    无理数: e π

    i^2=-1   //任何数的平方都不等于-1,这是i就叫做 虚数单位

    虚数的例子:5i(前提是i^2=-1),那么5i就是虚数

    虚数部分为0,复数就变成了实数

     

    四元数存储的是轴角对(一个轴,一个角,绕着某个轴旋转多少度角)

    计算公式:

    n(nx,ny,nz) //绕着哪个轴   thetaΘ

    x=nx*Sin(theta/2);

    y=ny*Sin(theta/2);

    z=nz*Sin(theta/2);

    w=Cos(theta/2);

     

    绕着y轴(0,1,0)旋转90度

    //===用公式计算=====

    //Unity API , Mathf.Sin(float f),Mathf.Cos(float f)传的是一个弧度,Mathf.Deg2Rad把角度转换成弧度

    Quaternion q = new Quaternion(0, Mathf.Sin(45 * Mathf.Deg2Rad), 0, Mathf.Cos(45 * Mathf.Deg2Rad));    //90 / 2(theta / 2) == 45;

    transform.rotation = q;      //打印出来的q值(0,0.7,0,0.7)

     

    //===欧拉角转换成四元数===

    Quaternion q = Quaternion.Euler(0, 90,0);       //打印出来的q值(0,0.7,0,0.7)

    //===AngleAxis===

    Quaternion q = Quaternion.AngleAxis(45, Vector3.up); //绕着y轴旋转45度

    transform.rotation = q* q; //四元数相乘,得到旋转量的叠加(90度)

    四元数的乘法:代表旋转量的叠加

     

    四元数的模: l=sqrt(x^2+y^2+z^2+w^2);    //各分量的平方相加再开方

    单位四元数:(0,0,0,1)代表无旋转

    共轭四元数:代表和原四元数方向相反的旋转

    四元数的转置:原四元数的共轭四元数/四元数的模(在标准四元数中,四元数的转置==四元数的共轭)

    标准四元数:模长为1的四元数就叫标准四元数(表示旋转的四元数一定是标准四元数)

    单位四元数一定是标准四元数,标准四元数不一定是单位四元数

     

    四元数和欧拉角的对比:

    四元数:

    优点: 1、没有方向锁

    2、可以绕着任意轴转

    缺点:1、同一时间只能绕着一根轴转

    2、难理解

    3、多个分量,多占内存

     

    欧拉角:

    优点:1、容易理解

    2、省内存

    3、可以三根轴一起旋转

    缺点:1、有万向锁

     

    数据来源:ABOUTCG网站https://www.aboutcg.org/courseDetails/494/introduce

     

    展开全文
  • cocos creator 向量和空间坐标

    千次阅读 2019-05-26 13:40:13
    一、向量 二维向量cc.Vec2 创建一个二维向量 new cc.Vec2(100,100); cc.v2(200,200); cc.p(150,150); 注意:从2.0版本以后cc.p已经被弃用,建议使用cc.v2 向量常用的方法有: var src = cc.v2(150,...
  • 向量运算 unity3d坐标系 *3d坐标系分为两种,分别是左手坐标系和右手坐标系。u3d使用的是左手坐标系*。 通常3d坐标系中x轴右侧代表水平正方形,y轴为垂直正方向向上,z轴分为向里和向外两种,正方向向里的是左手...
  • 向量的计算(减法)

    万次阅读 2019-07-31 15:37:42
    减法:等于各分量相减 ...在Unity中 两个向量相减 后的向量的起始坐标和a,b的起点相同(如下图) 使用 ti-t2后得到的向量是这样的(如下图) 应用:计算两点之间的距离和相对方向 代码表示: ...
  • 一、坐标系 模型坐标系: 物体自身的坐标系,只描述自身各个顶点的情况。 在3D模型坐标系中,z方向前向如果是负值,我们称为右手坐标系,如果是正值,我们称为左手坐标系。在3DMax中使用了右手坐标系,...
  • unity3D数学基础坐标系左右沙鸥坐标系功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants...
  • 一、坐标系 模型坐标系: 物体自身的坐标系,只描述自身各个顶点的情况。 在3D模型坐标系中,z方向前向如果是负值,我们称为右手坐标系,如果是正值,我们称为左手坐标系。在3DMax中使用了右手坐标系,Unity...
  • //用坐标实现一个数学中的向量类,可以处理任意维数的向量(动态分配),包括向量的加法,减法,数乘,内积,外积,测试你的类。 //#include &amp;amp;lt;tchar.h&amp;amp;gt; #include&amp;amp;lt;...
  • MATLAB曲线相减

    2021-05-12 20:42:01
    现有两条曲线(x⃗1\vec x1x1,y⃗1\vec y1y​1),(x⃗2\vec x2x2,y⃗2\vec y2y​2),两条曲线的坐标不一定对齐,点数不一定相同,即 x⃗1≠x⃗2\vec x1\neq \vec x2x1​=x2,现要求两条曲线的差值。 解决方法 在网上...
  • cc.Vec2 二维向量坐标, 表结构{x: 120, y: 120}; cc.v2(x, y) 创建一个二维向量 cc.p() 创建一个二外向量 cc.pSub: 向量相减 cc.pAdd: 向量相加; cc.pLength: 向量长度; //坐标位置3种方法--1 var w_pos = new...
  • 4.cc.Node(三)坐标空间

    2019-04-02 23:13:49
    cc.Vec2 二维向量坐标, 表结构{x: 120, y: 120}; cc.v2(x, y) 创建一个二维向量 cc.p() 创建一个二外向量 cc.pSub: 向量相减 cc.pAdd: 向量相加; cc.pLength: 向量长度; 2. cc.Size/cc.Rect cc.Size: 包含宽度和...
  • cc.Node.坐标空间

    2017-11-07 22:26:00
    cc.vec2二维向量坐标,表结构(x:120,y:120); cc.v2(x,y)创建一个二维向量 方法: cc.pSub向量相减 cc.pAdd向量相加 cc.pLength向量长度 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 o...
  • (实际上物体没有移动,这只是求这个方向一段距离的坐标) Vector3  newPos = rotation * new Vector3 ( 10f , 0f , 0f );  这里拿上上面计算的角度( local的角度,个人坐标系),乘上的新 V3就是...
  • 1.把pi和周围点pj的坐标相减:本质上这生成了许多从pi->pj的向量,理想情况下pi的法线应该是垂直于这些向量的 2.利用奇异值分解求这些向量的0空间,拟合出一个尽可能垂直的向量,作为法线的估计 方法2.基于齐次...
  • 1,理解三角形的重心坐标(面积坐标)假如有任意一个三角形ABC,设它的三个顶点为a,b,c,三角形内任意一点为p,三角形PBC,PCA,PAB面积之比为λ1:λ2:λ3\lambda_1:\lambda_2:\lambda_3且λ1+λ2+λ3=1\lambda_1+\...
  • Unity 3D 数学之向量

    2019-10-16 12:58:10
    进入Vector3类,operator定义这个数据类型(Vector3)都能使用哪些运算符 什么是向量 ...向量相减 即结果为: 代码:移动物体从所在的位置沿着计算出的方向移动 向量相加 58与59行等价 ...
  • Cocos Creator 坐标空间转换

    千次阅读 2019-06-18 14:51:59
    1: cc.Vec2 二维向量坐标, 表结构{x: 120, y: 120}; cc.v2(x, y) 创建一个二维向量 cc.p() 创建一个二维向量(这个2.0被废弃了,用cc.v2替代) 2: cc.pSub: 向量相减 cc.pSub(v1, v2) 被废弃,用v1.sub(v2)替代 3:...
  • 几何意义:得到的是一个新的坐标位置,由A坐标点,沿着b向量的方向,移动b向量的长度的距离,得到的新坐标。 A坐标,沿着b向量的方向,移动b向量的长度,得到C坐标   向量向量相加有意义 向量向量相加...
  • cc.Node—坐标系统

    2018-09-29 17:09:00
    cc.Vec21: cc.Vec2 二维向量坐标, 表结构{x: 120, y: 120}; cc.v2(x, y) 创建一个二维向量 cc.p() 创建一个二外向量;2: cc.pSub: 向量相减;3: cc.pAdd: 向量相加;4: cc.pLength: 向量长度; cc.Size/cc.Rect1: cc....
  • cc.Vec2 二维向量坐标, 表结构{x: 120, y: 120}; cc.v2(x, y) 创建一个二维向量 (v2a对象).sub(v2b对象): a-b向量相减 cc.mag(): 向量长度; 链接: vec2官方API. cc.Size: 包含宽度和高度信息的对象 {width: 100, ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,180
精华内容 1,672
关键字:

向量坐标相减