当前位置: 首页 > news >正文

太原网站建设报价中国移动生活app下载安装

太原网站建设报价,中国移动生活app下载安装,网站开发技术分析,推广活动策划方案范文向量的加减法本文就不再赘述了,本文侧重介绍脚本中的向量写法 一、向量的数乘 定义:k(x,y,z)(kx,ky,kz) 若向量长度为L,k取1/L,就恰好能让原向量长度变成1,变成了单位向量,这称为向量的标准化 。 由于长度…

向量的加减法本文就不再赘述了,本文侧重介绍脚本中的向量写法


一、向量的数乘

定义:k(x,y,z)=(kx,ky,kz)

若向量长度为L,k取1/L,就恰好能让原向量长度变成1,变成了单位向量,这称为向量的标准化 。

由于长度为1的向量很适合表示方向,因此经常会将向量标准化,下面举几个例子:

Vector3 a=new Vector3(2,1,0);
Vector3 na=a/a.magnitude;   //a.magnitude是a的长度,术语叫做“a的模”
//以上写法等价于
Vector3 na2=a.normalized;
//
Vector3 na3=Vector3.Normalized(a);
//
Vector na4=(1/a.magnitude)*a;

以上代码用到的向量的两个常用属性:magnitude(模)和normalized(标准化)。

二、向量的点乘

定义:a · b=|a| · |b|cosα

(x1,y1,z1) · (x2,y2,z2)=x1x2+y1y2+z1z2

物理意义:投影距离

点乘的结果不再是向量,而是一个数,这点要注意一下。

点乘满足交换律,因此a,b谁先谁后都一样。

下面介绍相关脚本

Vector3 a=new Vector3(2,1,0);
Vector3 b=new Vector3(3,0,0);
Vector3 dir_b=b.normalized;
float pa=Vector3.dot(a,dir_b);//dot是点乘函数

 三、向量的叉乘

定义:|a × b|=|a||b|sinα

与点乘不同,叉乘结果是一个新的向量,方向垂直于原来两个向量构成的平面,具体结果用左手定则判断(用左手还是右手与坐标系有关)。

左手定则:手掌沿第一个向量放平,向第二个向量我全,拇指的指向即叉乘方向。如下图

 叉乘不满足交换律,若交换则叉乘方向变相反。即a×b=-b×a

叉乘在游戏开发中的一个重要用途:求法线。

在游戏开发中,平面要区分正反两面,因此法线用向量表示,法线方向就是平面方向,。一般发现长度固定为1以便计算。

用叉乘可以很方便地获取法线。例如,玩家站在地形的一个平面上,想要获取平面的法线,需要先用启发方法获得平面上的任意两个向量,只要这两个向量夹角不为0或180,取它们的叉乘就可以获得法线向量,对镜脚本写法如下

Vector3 a=new Vector3(2,1,1);
Vector3 b=new Vector3(3,0,2);
Vector3 n=Vector3.Cross(a,b);//n为a,b平面的法线。Cross为叉乘
n=n.normalized;//将n标准化

四、Vector3

Vector3属于struct(结构体),这部分给出Vector3的属性、方法、运算符

                                                         Vector3属性

字段或属性说明
x,y,z
normalized得到标准化向量(单位向量)
magnitude得到向量的模,是标量
sqrMagnitude得到模的平方。运算速度比得到模要快,因为少一部开方运算。在仅比较两个长度,不需要求精确求出长度时非常有用

                                                           Vector3方法

方法说明
Cross

向量叉乘

Dot向量点乘
Project()计算向量在另一个向量上的投影
Angle()返回两个向量的夹角
Distance()返回两个向量的距离

Vector3的运算符有还有+,-,*,/,==,!=。

五、向量坐标系的转换

在Unity中,可以使用transform.TransformPoint()方法将局部坐标转换为世界坐标,也可以使用transform.InverseTransformPoint()方法将世界坐标系转换为局部坐标系。

其实也有向量的坐标系转化函数,分别是transform.TransformDirection()和transform.InverseTransformDirection()。

下面举一个实例说明如何通过全局坐标系和局部坐标系改变物体的运动方向:

1.创建一个Cube,设置旋转的Y为300

2.新建脚本CoordinateLocal.cs,内容如下:

using UnityEngine;
public class CoordinateLocal:MonoBehaviour{void Update(){transform.Translate(Vector3.forward*Time.deltaTime);}
}

将脚本挂在Cube上,运行游戏,物体会沿着自身的z轴方向慢慢移动

3.新建脚本CoordinateWorld.cs,内容如下:

using UnityEngine;
public class CoordinateWorld:MonoBehaviour{void Update(){Vector3 v=transform.InverseTransformDirection(Vector3.forward);transform.Translate(v*Time.deltaTime);}
}

将新建的脚本挂到Cube上,取消勾选原来的脚本,运行游戏,发现Cube沿着世界坐标系的z轴方向移动了。下面解释一下原因:

transform.Translate()函数默认是以局部坐标系为基准的,因此在脚本1中,虽然参数为Vetor3.forward,但依然会以局部坐标系的前方为准。

第2个脚本稍微复杂一些。由于Translate默认以局部坐标系为准,因此要把世界坐标系的forward转化为局部坐标系的向量v,然后用v来作为Translate的参数

http://www.yayakq.cn/news/44723/

相关文章:

  • 网站搭建岗位及要求wordpress html5 爱情
  • 山东住房建设部官方网站重庆互联网网站建设
  • 网站建设及维护机智能云建站
  • 网站建设大致分哪几块wordpress注册无法发送邮件
  • 哪有专业做网站网站的功能有哪些
  • 外贸网站零基础建站自己做网站百度能收录码
  • 嘉兴网站建设搭建收费做网站
  • 网站建设襄阳weekly做网站
  • 长沙哪里有网站制作yy直播是干什么的
  • 一个电商网站开发周期是多久国外酷炫网站
  • 祥云网站建设公司 概况网站建设 猴王网络
  • 直播网站开发平台做培训网站前端
  • 网站建设 紧急检查工作wordpress打赏作者插件
  • 安陆网站抖音制作视频的软件
  • 外贸企业网站推广公司wordpress英文主题哪个好用
  • 服装设计师接单网站怎么制作网页视频
  • 如何让网站被百度收入开发公司工程部
  • 大连公司网站开发做网站要需要多少钱
  • 哪里有网站建设手机网页排版怎么设置
  • 网站开发制作培训学校网络营销推广的成功案例
  • 福建省建设厅招标网站长春网站快照优化公司
  • 买的服务器怎么做网站html在线编程网站
  • 网站平台建设哪家公司好wordpress怎么设置标签分类
  • 网站建设需要微信账号和密码成都高端企业网站建设
  • 手机微网站平台登录入口网页制作教程好看视频
  • 天河区建设和水务局网站wordpress登录可见菜单
  • 襄阳网站建设外包仿站工具箱网页版
  • 科技文化网站建设方案投资者网站建设
  • 网站做迅雷下载链接郑州十大网站建设公司
  • 永春网站开发格斗网页游戏大全