Unity3d修炼之路:游戏开发中,3d数学知识的练习【1】(不断更新.......)
#pragma strict public var m_pA : Vector3 = new Vector3(2.0f, 4.0f, 0.0f);
public var m_pB : Vector3 = new Vector3(-4.0f, 2.0f,0.0f);
private var m_pTemp : Vector3 = new Vector3(0.0f,0.0f,0.0f);
private var m_fTemp : float = 0.0f;
private var m_fAngle : float = 0.0f; function Awake(){
Debug.Log("向量缩小2倍 :" + VectorScale(m_pA,2).ToString());
//Debug.Log(m_pA.operator * 2(););
Debug.Log("向量的负向量 :" + FVector(m_pB).ToString()); Debug.Log("向量标准化 :" + VectorZuo3(m_pA).ToString());
Debug.Log(Vector3.Normalize(m_pA)); Debug.Log("a向量到b向量的长度 :" + Vector2VectorDis(m_pA,m_pB));
Debug.Log(Vector3.Distance(m_pA,m_pB)); Debug.Log("b向量与a向量的夹角 :" + VectorAndVectorAngle(m_pA,m_pB));
Debug.Log(Vector3.Angle(m_pA,m_pB)); Debug.Log("a向量垂直于b向量的向量 :" + VectorZuoye6(m_pA,m_pB).ToString());
Debug.Log(m_pA - Vector3.Project(m_pA,m_pB)); Debug.Log("两个向量在平面上的夹角 :" + VectorZuoye7(m_pA,m_pB));
} //求向量的模
function VerctorMagnitudeTest(a : Vector3) : float{
return Mathf.Sqrt(a.x * a.x + a.y * a.y + a.z * a.z);
} //求向量的点积
function VectorDotTest(a : Vector3,b : Vector3) : float{ m_fTemp = a.x * b.x + a.y * b.y + a.z * b.z; return m_fTemp;
}
//求向量的叉乘
function VectorChaTest(a : Vector3 , b : Vector3) : Vector3{ m_pTemp.x = a.y * b.z - a.z * b.y;
m_pTemp.y = a.z * b.x - a.x * b.z;
m_pTemp.z = a.x * b.y - a.y * b.x; return m_pTemp;
} //向量进行缩放
function VectorScale(a : Vector3,n : int) : Vector3{
m_pTemp = a;
if(n != 0) //判0
{
m_pTemp.x /= n;
m_pTemp.y /= n;
m_pTemp.z /= n;
} return m_pTemp;
}
//向量的负向量
function FVector(a : Vector3) : Vector3{ m_pTemp = a;
m_pTemp.x = 0.0f -m_pTemp.x;
m_pTemp.y = 0.0f -m_pTemp.y;
m_pTemp.z = 0.0f -m_pTemp.z; return m_pTemp;
} //向量标准化
function VectorZuo3(a : Vector3) : Vector3{ m_pTemp = a;
//var fDis : float = a.magnitude;//qiu mo de
var fDis : float = VerctorMagnitudeTest(a);//求模
m_pTemp.x = a.x / fDis;//不须要判0
m_pTemp.y = a.y / fDis;
m_pTemp.z = a.z / fDis; return m_pTemp; }
//a向量到b向量的长度
function Vector2VectorDis(a : Vector3,b : Vector3) : float{ m_pTemp.x = b.x - a.x;
m_pTemp.y = b.y - a.y;
m_pTemp.z = b.z - a.z;
m_fTemp = VerctorMagnitudeTest(m_pTemp);//用自己定义的求模函数 return m_fTemp;
} //b向量与a向量的夹角
// arcos((a与b点乘)/(a模*b模))
function VectorAndVectorAngle(a : Vector3,b : Vector3) : float{
var fDot : float = VectorDotTest(a,b);//向量的点乘
var fDisM : float = VerctorMagnitudeTest(a) * VerctorMagnitudeTest(b);
var fTemp : float = Mathf.Acos(fDot / fDisM);
m_fAngle = fTemp * Mathf.Rad2Deg; return m_fAngle;
} //a向量垂直于b向量的向量
// a向量 – b*((a与b的点乘)/b模的平方) function VectorZuoye6(a : Vector3, b : Vector3) : Vector3{
var pTemp1 : Vector3 = b;
var pTemp2 : Vector3 = a; pTemp1.x *= VectorDotTest(a,b)/(VerctorMagnitudeTest(b)*VerctorMagnitudeTest(b));//用自己定义的点积和求模函数
pTemp1.y *= VectorDotTest(a,b)/(VerctorMagnitudeTest(b)*VerctorMagnitudeTest(b));//用自己定义的点积和求模函数
pTemp1.z *= VectorDotTest(a,b)/(VerctorMagnitudeTest(b)*VerctorMagnitudeTest(b));//用自己定义的点积和求模函数 m_pTemp.x = pTemp2.x - pTemp1.x;
m_pTemp.y = pTemp2.y - pTemp1.y;
m_pTemp.z = pTemp2.z - pTemp1.z; return m_pTemp;
} //a向量与b向量在 向量a与向量b所形成平面 上的夹角
// arsin(a与b叉乘的模/(a模*b模)) function VectorZuoye7(a : Vector3,b : Vector3) : float{
m_fTemp = Mathf.Asin( VerctorMagnitudeTest( VectorChaTest(a,b)) / ( VerctorMagnitudeTest(a) * VerctorMagnitudeTest(b) ) );//用自己定义的叉乘和求模函数
m_fAngle = m_fTemp * Mathf.Rad2Deg; return m_fAngle;
}
Unity3d修炼之路:游戏开发中,3d数学知识的练习【1】(不断更新.......)的更多相关文章
- [Unity游戏开发]向量在游戏开发中的应用(三)
本文已同步发表在CSDN:http://blog.csdn.net/wenxin2011/article/details/51088236 在上一篇博客中讲了利用向量点乘在游戏开发中应用的几种情景.本 ...
- [Unity游戏开发]向量在游戏开发中的应用(二)
本文已同步发表在CSDN:http://blog.csdn.net/wenxin2011/article/details/50972976 在上一篇博客中讲了利用向量方向的性质来解决问题.这篇博客将继 ...
- [Unity游戏开发]向量在游戏开发中的应用(一)
本文已同步发表在CSDN:http://blog.csdn.net/wenxin2011/article/details/50810102 向量在游戏开发中是非常实用的,我们在学校学完向量的知识后,只 ...
- 游戏开发中IIS常见支持MIME类型文件解析
游戏开发中IIS常见支持MIME类型文件解析 .apkapplication/vnd.android .ipaapplication/vnd.iphone .csbapplication/octet- ...
- Cocos2d-x游戏开发中的消息机制:CCNotificationCenter的使用
在HTML5游戏开发中,js可以使用Event对象的addEventListener(添加事件监听).dispatchEvent(触发事件)实现监听机制,如果在coocos2d-x中,去实现这种机制该 ...
- 二、Cocos2dx概念介绍(游戏开发中不同的坐标系,cocos2dx锚点)
注:ccp是cocos2dx中的一个宏定义,#define ccp(__X__,__Y__)CCPointMake((float)__X__, (float)__Y__),在此文章中表示坐标信息 1. ...
- [C++基金会]位计算 游戏开发中的应用
定义的位操作:通俗点说,,位计算是计算机操作二进制整数. 无论整数可以用二的方式来表示进度,不同类型的其长度的整数位的是不一样的.INT8要么char靠8个月2 位表示,INT16或者short是由1 ...
- 在基于TypeScript的LayaAir HTML5游戏开发中使用AMD
在基于TypeScript的LayaAir HTML5游戏开发中使用AMD AMD AMD是"Asynchronous Module Definition"的缩写,意思就是&quo ...
- 借助AMD来解决HTML5游戏开发中的痛点
借助AMD来解决HTML5游戏开发中的痛点 游戏开发的痛点 现在,基于国内流行引擎(LayaAir和Egret)和TypeScript的HTML5游戏开发有诸多痛点: 未采用TypeScript编译器 ...
- C#游戏开发中快速的游戏循环
C#游戏开发中快速的游戏循环的实现.参考<精通C#游戏编程>一书. using System; using System.Collections.Generic; using System ...
随机推荐
- android hook 框架 ADBI 如何实现dalvik函数挂钩
Android so注入-libinject2 简介.编译.运行 Android so注入-libinject2 如何实现so注入 Android so注入-Libinject 如何实现so注入 A ...
- 华为上机测试题(表达式运算-java)
PS:自己写的,自测试OK,供大家参考. 补充:数据解析的过程,评论区有更好的处理方式,可参考. /* * 输入一个表达式,3*8+7-2,没有括号 输出结果 */ /* 本程序暂不考虑容错处理 */ ...
- 基于UDT connect连接通信以及文件传输--客户端
上面一篇文章中提出了服务端的,其实这里没有严格意义的服务端和客户端之分,因为我在代码中是基于UDP的,不存在服务端与客户端,两个都是对等的,只是我这里进行一下简单的区分而已.在这里,客户端所进行的主要 ...
- [BZOJ1260][CQOI2007]涂色paint 区间dp
1260: [CQOI2007]涂色paint Time Limit: 30 Sec Memory Limit: 64 MB Submit: 1575 Solved: 955 [Submit][S ...
- 使用iSCSI Target创建集中式安全存储(一)
iSCSI 是一种块级别的协议,用于通过TCP/IP网络共享原始存储设备,可以用已经存在的IP和以太网如网卡.交换机.路由器等通过iSCSI协议共享和访问存储.iSCSI target是一种由远程iS ...
- Spring:特殊数据类型的属性注入(基于配置文件)
该处提到的特殊数据类型指的是除了基础数据类型和String以外的其他常用的数据类型,如:List.Map.Set.以及pojo对象等.则我们创建的Person类定义为: package bjtu.we ...
- asp.net core 身份认证/权限管理系统简介及简单案例
如今的网站大多数都离不开账号注册及用户管理,而这些功能就是通常说的身份验证.这些常见功能微软都为我们做了封装,我们只要利用.net core提供的一些工具就可以很方便的搭建适用于大部分应用的权限管理系 ...
- Linux下多进程服务端客户端模型一(单进程与多进程模型)
本文将会简单介绍Linux下如何利用C库函数与系统调用编写一个完整的.初级可用的C-S模型. 一.基本模型: 1.1 首先服务器调用socket()函数建立一个套接字,然后bind()端口,开始l ...
- Ubuntu14.04 在右键中添加 在终端中打开
1.在terminal中执行: sudo apt-get install nautilus-open-terminal 此时可能会提示:nable to locate package nautilus ...
- 大数据技术之_16_Scala学习_09_函数式编程-高级
第十三章 函数式编程-高级13.1 偏函数(partial function)13.1.1 提出一个需求,引出思考13.1.2 解决方式-filter + map 返回新的集合13.1.3 解决方式- ...