三角函数:
概念:用来描述三角形中某个角和对应的三条边的比例关系。
正弦:sin<θ>(sin<theta>)=对边/斜边
余弦:cos<θ>(cos<theta>)=邻边/斜边
正切:tan<θ>(tan<theta>)=对边/邻边
 
正弦函数曲线:随着θ角度不断增大,sinθ的值的变化周期

 
余弦函数曲线:正弦函数曲线左移90度

 
反三角函数:已知比例关系,反推出角度或者弧度。
反正弦:Arcsin(0.5)=30度
反余弦:Arccos
反正切:Arctan
 
向量的乘法:
向量的点乘:a(ax,ay,az) · b(bx.by.bz)
数学运算:a·b = axbx + ayby + azbz,各分量分别相乘再相加
1、满足乘法交换律
2、结果是标量
几何意义:
a·b = |a| * |b| * cos<a,b>,<a,b>夹角范围0~180度,两个向量夹角越小,相似度越高
a·b = (|a| * cos<a,b>) * |b|,最重要的几何意义就是求投影
1、a向量在b向量方向上投影的长度再乘以b向量的模长
2、当b向量为单位向量的时候,结果就是:a向量在b向量方向上投影的长度
3、当a向量和b向量都是单位向量的时候,结果就是:两个向量的夹角的余弦
 
敌人的正前方和敌人与自己连线的夹角,小于90度,在敌人前方,大于90度,在敌人后方
API Vector3.Dot(Vector3 lhs,Vector3 rhs),两个向量点乘满足乘法交换律,但叉乘不行
API Vector3.Angle,直接计算两个向量之间的夹角
 
思考题:入射光线和反射光线不在一个水平线上
 
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class EnemyLook : MonoBehaviour
  5. {
  6. public Transform player;
  7. public float result;
  8. public float distance;
  9. // Use this for initialization
  10. void Start()
  11. {
  12. ////向量点乘的数学运算
  13. //Vector3 enemy2Player = player.position - transform.position;
  14. //Vector3 enemyForward = transform.forward;
  15. //result = enemy2Player.x * enemyForward.x + enemy2Player.y * enemyForward.y + enemy2Player.z + enemyForward.z;
  16. //把向量变成单位向量
  17. Vector3 enemy2Player = (player.position - transform.position).normalized;
  18. Vector3 enemyForward = transform.forward;
  19. //计算两个向量之间的夹角
  20. result = Vector3.Dot(enemy2Player, enemyForward);
  21. //计算两个物体之间的距离
  22. distance = Vector3.Distance(player.position, transform.position);
  23. //API:计算两个向量之间的夹角
  24. //Vector3.Angle();
  25. }
  26. // Update is called once per frame
  27. void Update()
  28. {
  29. }
  30. private void OnGUI()
  31. {
  32. //if (result > 0)
  33. //{
  34. // GUILayout.Label("在敌人前方");
  35. //}
  36. //else
  37. //{
  38. // GUILayout.Label("在敌人后方");
  39. //}
  40. if (result > Mathf.Cos( * Mathf.Deg2Rad) && distance < )
  41. {
  42. GUILayout.Label("在扇形范围内:" + Mathf.Acos(result) * Mathf.Rad2Deg + "度");
  43. }
  44. else
  45. {
  46. GUILayout.Label("不在扇形范围内:" + Mathf.Acos(result) * Mathf.Rad2Deg + "度");
  47. }
  48. }
  49. }
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class TestTrans : MonoBehaviour {
  5. public Transform Target;
  6. public float distance;
  7. private float SkillDistance = ;//扇形距离
  8. private float SkillJiaodu = ;//扇形的角度
  9. // Use this for initialization
  10. void Start () {
  11. ////偶然性编程
  12. distance = Vector3.Distance(transform.position, Target.position);//距离
  13. Vector3 norVec = transform.rotation * Vector3.forward;
  14. Vector3 temVec = Target.position - transform.position;
  15. Debug.DrawLine(transform.position, norVec, Color.red);//画出技能释放者面对的方向向量
  16. Debug.DrawLine(transform.position, Target.position, Color.green);//画出技能释放者与目标点的连线
  17. float jiajiao = Mathf.Acos(Vector3.Dot(norVec.normalized, temVec.normalized)) * Mathf.Rad2Deg;
  18. if (distance <= SkillDistance)
  19. {
  20. if (jiajiao <= SkillJiaodu)
  21. {
  22. Debug.Log("在扇形范围内");
  23. }
  24. else
  25. {
  26. Debug.Log("不在扇形范围内");
  27. }
  28. }
  29. }
  30.  
  31. // Update is called once per frame
  32. void Update () {
  33.  
  34. }
  35. }
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class CrystalMove : MonoBehaviour {
  5. //public Transform startTrans;
  6. //public float moveSpeed = 1;
  7. //public float rotSpeed = 1;
  8. public float rotateSpeed = ;
  9. //调节上下频率和浮动
  10. public float amplitude = 1f;
  11. public float frequency = 1f;
  12. // Use this for initialization
  13. void Start () {
  14.  
  15. }
  16.  
  17. // Update is called once per frame
  18. void Update () {
  19. // transform.Rotate(Vector3.up, Space.World);
  20. // Vector3 delta = Vector3.up * Mathf.Sin(Time.time) * moveSpeed*0.25F;
  21. // transform.position = startTrans.position + delta;
  22. transform.Rotate(Vector3.up * Time.deltaTime * rotateSpeed);
  23. float sin = Mathf.Sin(Time.time * frequency) * amplitude;
  24. transform.Translate(Vector3.up * sin, Space.World);
  25. }
  26. }

Unity3D学习笔记(六):三角函数和点乘的更多相关文章

  1. java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

    java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...

  2. Learning ROS for Robotics Programming Second Edition学习笔记(六) indigo xtion pro live

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  3. Typescript 学习笔记六:接口

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  4. python3.4学习笔记(六) 常用快捷键使用技巧,持续更新

    python3.4学习笔记(六) 常用快捷键使用技巧,持续更新 安装IDLE后鼠标右键点击*.py 文件,可以看到Edit with IDLE 选择这个可以直接打开编辑器.IDLE默认不能显示行号,使 ...

  5. Go语言学习笔记六: 循环语句

    Go语言学习笔记六: 循环语句 今天学了一个格式化代码的命令:gofmt -w chapter6.go for循环 for循环有3种形式: for init; condition; increment ...

  6. 【opencv学习笔记六】图像的ROI区域选择与复制

    图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...

  7. Linux学习笔记(六) 进程管理

    1.进程基础 当输入一个命令时,shell 会同时启动一个进程,这种任务与进程分离的方式是 Linux 系统上重要的概念 每个执行的任务都称为进程,在每个进程启动时,系统都会给它指定一个唯一的 ID, ...

  8. # go微服务框架kratos学习笔记六(kratos 服务发现 discovery)

    目录 go微服务框架kratos学习笔记六(kratos 服务发现 discovery) http api register 服务注册 fetch 获取实例 fetchs 批量获取实例 polls 批 ...

  9. Spring Boot 学习笔记(六) 整合 RESTful 参数传递

    Spring Boot 学习笔记 源码地址 Spring Boot 学习笔记(一) hello world Spring Boot 学习笔记(二) 整合 log4j2 Spring Boot 学习笔记 ...

  10. unity3d学习笔记(一) 第一人称视角实现和倒计时实现

    unity3d学习笔记(一) 第一人称视角实现和倒计时实现 1. 第一人称视角 (1)让mainCamera和player(视角对象)同步在一起 因为我们的player是生成的,所以不能把mainCa ...

随机推荐

  1. python 基础 字典

    字典操作 字典一种key - value 的数据类型 特性: 无顺序 去重 查询速度快,比列表快多了 比list占用内存多 语法: info = { 'abc001': "Ben" ...

  2. 启动InnoDB引擎的方法

    启动InnoDB引擎的方法 http://down.chinaz.com/server/201207/2090_1.htm 启动InnoDB引擎的方法 Mysql中默认的是MyISAM数据引擎,可惜此 ...

  3. MySQL IFNULL()函数用法MySQL

    用法说明:IFNULL(expr1,expr2) 如果 expr1 不是 NULL,IFNULL() 返回 expr1,否则它返回 expr2. IFNULL()返回一个数字或字符串值,取决于它被使用 ...

  4. zabbix3.0 centos7 yum 安装与简单配置

    参考文档https://www.zabbix.com/documentation/3.0/start zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案.zab ...

  5. 为什么size_t重要?

    参见 http://en.cppreference.com/w/cpp/types/size_t size_t其实与uintptr_t一个道理.就是一个东西.指针其实就是寻址,与地址总线位数一致,编译 ...

  6. 借root之名,行流氓之实,劝告,root需谨慎

    20160425++++++ 今日再回头看这篇文章,貌似有点偏激了一点,不过xda论坛上有个疑似kingroot开发团队的用户说明了kingroot确实对supersu做了限制,说是supersu在替 ...

  7. 植物大战僵尸作弊器源代码(MFC版)

    控制版使用不太方便,此MFC版与控制台版内容一样.具体可以参考前面.此处只附源代码,不加以说明.......... 头文件 // jsMFCDlg.h : 头文件 // #pragma once // ...

  8. yii2常用的migrate命令

    开发中经常会用到的方法小结: 1../yii migrate xxx_xx 在表中插入某字段 : public function up() {$this->addColumn('{{applic ...

  9. LINUX环境变量(一)

    Linux 的变量可分为两类:环境变量和本地变量 环境变量,或者称为全局变量,存在与所有的shell 中,在你登陆系统的时候就已经有了相应的系统定义的环境变量了.Linux 的环境变量具有继承性,即子 ...

  10. 在windows上构建LLVM 7.0.1

    关于在windows上构建LLVM,网上有不少文章,但都是互相抄来的,写作时极不认真,不是少这个,就是少那个,没有一篇是可以完整照着做下来的,实在气人. 本文的安装和配置过程,我亲自操作过好几遍,不惜 ...