3d数学总结帖,以下是对3d学习过程中数学知识的简单总结

  • 角度值和弧度制的互转
  1. Deg2Rad 角度A1转弧度A2 => A2=A1*PI/180
  2. Rad2Deg 弧度A2转换角度A1 => A1=A2*180/PI
  • u3d中Math.Infinity表示正无穷大,不代表任何具体数值,不能用于具体数值计算中。

    Math.Infinity /Math.Infinity = NaN( Not a Number)
  • u3d中(左手坐标系),绕坐标轴按顺时针旋转角度为正值,按逆时针旋转角度为负值。(待验证)
  • 已知当前点为Target,目标点沿着Target的Y轴旋转45度,沿着自身X轴延伸4米求目标点的3D坐标。
// 1. 已知当前点为Target,目标点沿着Target的Y轴旋转45度,沿着自身X轴延伸4米求目标点的3D坐标
void Test1()
{
Quaternion rot = Quaternion.Euler(0,45,0) * m_target.rotation;
Vector3 destPos = rot * new Vector3(4,0,0);
Debug.DrawLine(m_target.position,destPos,Color.red);
transform.rotation = rot;
transform.position = destPos; Debug.Log("newPos = " + destPos + " targetPos = " + m_target.position
+ " ditance = " + Vector3.Distance(destPos,m_target.position));
}
  • 向量点乘相关dotProduct
  1. 满足交换律
  2. dot(a,b) = |a|*|b|cos(A)
  3. 几何意义:点乘结果越大,两个向量越接近。
  4. 结果dot > 0 表示两个向量夹角在[0,90)之间,方向相同。
  5. 结果dot = 0 表示两个向量夹角为90度,相互垂直正交。
  6. 结果dot < 0 表示两个向量夹角为(90,180]度,方向相反。
  • 向量叉乘crossProduct
  1. 不满足交换律 a x b = - b x a
  2. a x b = |a|*|b|sin(A)
  3. 叉乘得到的向量垂直于原来的两个向量。
  4. 叉乘方向的判断
    //计算两个向量ab的法向量的方向
void Test4()
{
Quaternion r0 = transform.rotation; // r0 * Vector3.forward 计算物体朝向的单位向量
//Quaternion r1 = Quaternion.Euler(0,viewAngle,0) * transform.rotation;
//Quaternion r2 = Quaternion.Euler(0,-viewAngle,0) * transform.rotation; //make it faster
Quaternion r1 = Quaternion.Euler(transform.rotation.eulerAngles.x,transform.rotation.eulerAngles.y + viewAngle,transform.rotation.eulerAngles.z);
Quaternion r2 = Quaternion.Euler(transform.rotation.eulerAngles.x,transform.rotation.eulerAngles.y - viewAngle,transform.rotation.eulerAngles.z); Vector3 dest = transform.position + r0 * Vector3.forward * distance;
Vector3 va = transform.position + r1* Vector3.forward * distance;
Vector3 vb = transform.position + r2 * Vector3.forward * distance; Debug.DrawLine(transform.position,va,Color.blue);
Debug.DrawLine(transform.position,vb,Color.red); //在左手坐标系下,在XZ平面上忽略Y轴,判断向量a和向量b的方位(a在b的顺时针方向还是逆时针方向)
//可以通过向量axb的叉乘结果法向量normal的方向来判断。
// 如果normal.y > 0 : b在a的顺时针方向
// 如果normal.y < 0 : b在a的逆时针方向
// 如果normal.y = 0 : b和a方向相同
// 右手坐标系正好相反
//计算法向量
Vector3 normal = Vector3.Cross(va,vb).normalized * 5; // normal.y < 0
//Vector3 normal = Vector3.Cross(vb,va).normalized * 5; // normal.y > 9
Debug.DrawLine(transform.position,transform.position + normal,Color.yellow); }

其中蓝色为向量a,红色为向量b,ab所在平面的法向量y<0



代码链接

3d数学总结帖的更多相关文章

  1. 3D数学的实际应用

    以前自己在学习三维程序开发时并没有在意3D数学在程序中的重要作用,但在实际工作中逐渐发现:自己忽视了3D数学的作用,我们实际开发工作总要求模型准确的变换,而不是强调渲染有多炫,那是游戏,如果是仿真程序 ...

  2. 3D数学 ---- 矩阵和线性变换[转载]

    http://blog.sina.com.cn/s/blog_536e0eaa0100jn7c.html 一般来说,方阵能描述任意线性变换.线性变换保留了直线和平行线,但原点没有移动.线性变换保留直线 ...

  3. Unity3D之空间转换学习笔记(三):3D数学

    3D数学基础 向量 向量可以看做具有方向和大小的一条线段. 比如:我们如果用点A减去点B,则可以得到一个向量,该向量的方向为点B面向点A的方向,而大小为两点的距离.这个方法在游戏开发中经常用到,比如我 ...

  4. 3D数学学习笔记——笛卡尔坐标系

    本系列文章由birdlove1987编写.转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/24601215 1.3D数学 ...

  5. 3D数学读书笔记——矩阵基础

     本系列文章由birdlove1987编写,转载请注明出处.    文章链接:http://blog.csdn.net/zhurui_idea/article/details/24975031   矩 ...

  6. Unity3D学习笔记(五):坐标系、向量、3D数学

    Unity复习 using System.Collections; using System.Collections.Generic; using UnityEngine; public class ...

  7. 3D数学读书笔记——四元数

    本系列文章由birdlove1987编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/25400659 什么是四元数 ...

  8. Unity3D for VR 学习(6): 再次温故知新-3D数学

    一年前,系统学习过3D数学,并记录了一篇博客<C#程序员整理的Unity 3D笔记(十):Unity3D的位移.旋转的3D数学模型>. 一年后,再次温习之. 坐标系:Unity3D使用左手 ...

  9. 3D数学读书笔记——矩阵基础番外篇之线性变换

    本系列文章由birdlove1987编写.转载请注明出处. 文章链接:http://blog.csdn.net/zhurui_idea/article/details/25102425 前面有一篇文章 ...

随机推荐

  1. 界面绚丽的SharePoint仪表盘控件Nevron Gauge for SharePoint 控件详细介绍

    Nevron .NET Vision 是一款用于创建独特的.强大的数据表示应用程序的最终控件,它具有超强的数据可视化性能. 整合了Nevron Chart for .NET, Nevron Diagr ...

  2. (转) 如何让 UITableView 的 headerView跟随 cell一起滚动

    在我们利用 UITableView 展示我们的内容的时候,我需要在顶部放一个不同于一般的cell的 界面,这个界面比较独特. 1. 所以我就把它 作为一个section的 headerView. 也就 ...

  3. 《Java应用程序(Application)》

    在编写Java应用程序(Application)时可以这样: 1,定义包名. 2, 导入相关的包. 3, 定义一个类. 4,定义相关变量. 5,定义构造函数.(在构造函数内调用init()方法和add ...

  4. js的异常捕获

    try{ ...some code... }catch(e){ ...some code... //处理错误 throw(e.name); //抛出异常 }finally{<BR> // ...

  5. 位置指纹(LF)定位技术简介-室内定位

        信号的多径传播对环境具有依赖性,呈现出非常强的特殊性.对于每个位置而言,该位置上信道的多径结构是惟一的,终端发射的无线电渡经过反射和折射,产生与周围环境密切相关的特定模式的多径信号,这样的多径 ...

  6. Android Studio 常用快捷键

     继承Eclipse的快捷键 : File->Settings->Keymap->有一个Keymaps 下拉菜单,选择Eclipse.    这里讲主要常用的快捷键 :  Ctrl ...

  7. 关于IE9-解决background-size的问题

    body{background:url("/branch/comm/images-new/login.jpg") no-repeat;background-size:100%;fi ...

  8. MySQL设置字符集为UTF8(Windows版)

    Windows版MySQL设置字符集全部为utf8的方式 MySQL安装目录下的my.ini文件 [client]节点 default-character-set=utf8    (增加) [mysq ...

  9. [BZOJ 3223 & Tyvj 1729]文艺平衡树 & [CodeVS 3243]区间翻转

    题目不说了,就是区间翻转 传送门:BZOJ 3223 和 CodeVS 3243 第一道题中是1~n的区间翻转,而第二道题对于每个1~n还有一个附加值 实际上两道题的思路是一样的,第二题把值对应到位置 ...

  10. go语言的 数组、slice、map使用(转)

    golang群 点击加入 go语言的 数组.slice.map使用, 由于网上有很好的说明, 不需要再写了,请看这几篇: Go语言中的 Array, Slice和 Map 深入学习golang五篇,以 ...