Unity3D

您所在的位置:网站首页 向量的加减怎么算出来的 Unity3D

Unity3D

2024-07-13 20:50:42| 来源: 网络整理| 查看: 265

向量(Vector3)

在虚拟的游戏世界中,3D数学决定了游戏,如何计算和模拟出开发者以及玩家看到的每一帧画面。学习基础的3D数学知识可以帮主用户对游戏引擎产生更深刻的了解。 向量定义:既有大小又有方向的量叫做向量。在空间中,向量用一段有方向的线段来表示。应用十分广泛,可用于描述具有大小和方向两个属性的物理量,例如物体运动的速度、加速度、摄像机观察方向、刚体受到的力等都是向量。因此向量是物理、动画、三维图形的基础。 与向量相对的量成为标量:即只有大小没有方向的量。例如物体移动中的平均速率、路程。 模:向量的长度标准化(Normalizing):保持方向不变,将向量的长度变为1. 单位向量:长度为1的向量。 零向量:各分量均为0的向量 向量运算——加减:向量的加法(减法)为各个分量分别相加(相减)。在物理上可以用来计算两个里的合力,或者几个速度份量的叠加。 这里写图片描述 向量运算——数乘:向量与一个标量相乘称为数乘。数乘可以对向量的长度进行缩放,如果标量大于0,那么向量的方向不变,若标量小于0,则向量的方向会变为反方向。 向量运算——点乘:两个向量点乘得到一个标量,数值等于两个向量长度相乘再乘以两者夹角的余弦值。如果两个向量a,b均为单位向量,那么a.b等于向量b在向量a方向上的投影的长度(或者说向量a在向量b方向上的投影)。 

把词语拆成字逐个分析。 “弦”代表长,也就是斜边,从“勾三股四弦五”中迁移过来。 “正”就是正对,表示直角三角形中角的对边。 “余”代表相邻,表示直角三角形中与角相邻的直角边。 “切”有垂直之意,在圆的切线中有体现。 这样一来,正弦就是对边比斜边,余弦就是邻边比斜边,正切就是对边比(与对边垂直的)邻边。 我们常说切割,在数学里,切和割是相差很远的,比如切线和割线。所以在三角函数里,切割相反。

 

这里写图片描述

叉乘:两个向量的叉乘得到一个新的向量,新向量垂直与原来的两个向量,并且长度等于原来向量长度相乘后夹角的正弦值

注意:叉乘不满足交换律 即a×b 不等于 b×a。 

这里写图片描述

属性

forward Vector3(0, 0, 1)的简码,也就是向z轴。 right Vector3(1, 0, 0)的简码,也就是向x轴。 up Vector3(0, 1, 0)的简码,也就是向y轴。 zero Vector3(0, 0, 0)的简码。 one 是 Vector3(1, 1, 1)的简码。 Vector3.sqrMagnitude 长度平方(只读的)  【注】计算长度的平方而不是magnitude是非常快的。如果你是比较两个向量的长度差,你可以比较他们的平方长度。  向量的长度是用勾股定理计算出来,计算机计算两次方和开根的运算量比加减法要费时的多。所以如果是想比较两个向量的长度,用sqrMagnitude可以快出很多。

向量运算

向量加法  向量加法就是两个向量对应的x,y,z轴坐标进行加法运算  例如以下的代码

Vector3 v1 = new Vector3(1, 2, 3); Vector3 v2 = new Vector3(4, 2, 1); Vector3 v3 = v1 + v2; //v3的结果 (5.0, 4.0, 4.0) Debug.Log(v3); 如果v1和v2都表示一个点的话,那么v3的方向是从v1开始指向v2的一个带有箭头的射线 此时v3就是一个向量 

如果v1和v2都表示一个向量的话,那么v3是一个从v1的尾部指向v2的头部的一个带有方向箭头的一条射线 这里写图片描述 向量减法  向量加法就是两个向量对应的x,y,z轴坐标进行减法运算  例如以下的代码

Vector3 v1 = new Vector3(1, 2, 3); Vector3 v2 = new Vector3(4, 2, 1); Vector3 v3 = v2 - v1; //v3的结果 (3.0, 0.0, -2.0) Debug.Log(v3); 其实就是从向量b头部指向向量a头部的一个向量 

向量减法图片 向量数乘 实数和向量相乘的过程就是数乘  如果实数大于0 那么数乘后的向量的方向和原始向量的方向一致,如果实数小于0 那么数乘后的向量的方向和原始向量的方向相反  数乘的几何意义:就是沿着原始变量的方向或者变量的相反方向放大或者缩小

方法

Vector3.Dot 点乘 (又称”点积”,”数量积”,”内积”)(Dot Product, 用*) 定义:a·b=|a|·|b|cos< a,b> 【注:粗体小写字母表示向量,< a,b>表示向量a,b的夹角,取值范围为[0,180]】 几何意义:是一条边向另一条边的投影乘以另一条边的长度. v1和v2向量的点乘运算:相应元素的乘积的和:v1( x1, y1,z1) v2(x2, y2,z2) = x1x2 + y1y2+z1z2; 注意 : 结果不是一个向量,而是一个标量。 性质1: ab = |a||b|Cos(θ) ,θ是向量a 和向量 b之间的夹角。 性质2: ab = b*a 满足乘法交换律 Unity项目应用: 1.根据点乘计算两个向量的夹角。< a,b>= arccos(a·b / (|a|·|b|)) 2.根据点乘的正负值,得到夹角大小范围,【大于>0,则夹角(0,90)】,【 小于 性质3:(数学上)满足右手法则, a x b = -b x a,所以我们可以使用叉乘的正负值来判断

Unity当中叉乘的左手法则  Unity项目应用:  1.根据叉乘得到a,b向量的相对位置,和顺时针或逆时针方位。  简单的说: 点乘判断角度,叉乘判断方向。  形象的说: 当一个敌人在你身后的时候,叉乘可以判断你是往左转还是往右转更好的转向敌人,点乘得到你当前的面朝向的方向和你到敌人的方向的所成的角度大小。  2.得到a,b夹角的正弦值,计算向量的夹角(0,90),可以配合点乘和Angle方法计算出含正负的方向。  3.根据叉乘大小,得到a,b向量所形成的平行四边形的面积大小,根据面积大小得到向量的相对大小。

Vector3.Distance 距离

void Test() { Vector3 v1 = new Vector3(0, 0, 2); Vector3 v2 = new Vector3(2, 0, 0); //求两个点之间的距离 Debug.Log(Vector3.Distance(v1,v2)); } Vector3.Lerp 插值 

obj1的位置是上一帧的位置加上(目标位置-上一帧的位置)*0.1

obj1.transform.position = Vector3.Lerp(obj1.transform.position, obj2.transform.position, 0.1f); 1

Vector3.Normalize 规范化  使向量编程长度为1的单位向量  - Vector2和Vector4

Vector2 二维向量  这个结构用于在一些地方表示2D的位置和向量(例如:网格中的纹理坐标,或者材质中的纹理偏移)。在其他情况下大多数使用Vector3。其操作基本可Vector3差不多  静态变量  one  Vector2(1, 1)的简写。  right  Vector2(1, 0)的简写。  up  Vector2(0, 1)的简写。  zero  Vector2(0, 0)的简写。

Vector4 二维向量  表示四维向量。  这个结构在一些地方用来表示四维向量(例如:网格切线,着色器的参数)。在其他情况下大多数使用Vector3。  其他操作和Vector3雷同

参考代码

点乘

using System.Collections; using System.Collections.Generic; using UnityEngine; public class Vector3Test : MonoBehaviour { // Use this for initialization void Start () { Vector3 v1 = new Vector3(1, 0, 0); Vector3 v2 = new Vector3(1, 0, 1); TestDot(v1, v2); } // Update is called once per frame void Update () { } private void TestDot(Vector3 a,Vector3 b) { //计算两个向量点乘的结果 得到的是一个数值 //求得的是向量b在向量a方向上的投影 float result = Vector3.Dot(a,b); Debug.Log("Result = "+result); //计算两个向量的夹角,该方法得到的是一个角度 计算出来的夹角的范围是0-180度 float angle = Vector3.Angle(a,b); Debug.Log("angle = " + angle); //向量b方向上的单位向量在向量a方向单位向量的投影 //计算 a、b 单位向量的点积,得到夹角余弦值,|a.normalized|*|b.normalized|=1; result = Vector3.Dot(a.normalized,b.normalized); Debug.Log("result = " + result); // 通过反余弦函数获取 向量 a、b 夹角(默认为 弧度) float radians = Mathf.Acos(result); angle = radians * Mathf.Rad2Deg; Debug.Log(angle); } } 叉乘

 



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭