三角函数:
概念:用来描述三角形中某个角和对应的三条边的比例关系。
正弦: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,直接计算两个向量之间的夹角
 
思考题:入射光线和反射光线不在一个水平线上
 
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyLook : MonoBehaviour
{
public Transform player;
public float result;
public float distance;
// Use this for initialization
void Start()
{
////向量点乘的数学运算
//Vector3 enemy2Player = player.position - transform.position;
//Vector3 enemyForward = transform.forward;
//result = enemy2Player.x * enemyForward.x + enemy2Player.y * enemyForward.y + enemy2Player.z + enemyForward.z;
//把向量变成单位向量
Vector3 enemy2Player = (player.position - transform.position).normalized;
Vector3 enemyForward = transform.forward;
//计算两个向量之间的夹角
result = Vector3.Dot(enemy2Player, enemyForward);
//计算两个物体之间的距离
distance = Vector3.Distance(player.position, transform.position);
//API:计算两个向量之间的夹角
//Vector3.Angle();
}
// Update is called once per frame
void Update()
{
}
private void OnGUI()
{
//if (result > 0)
//{
// GUILayout.Label("在敌人前方");
//}
//else
//{
// GUILayout.Label("在敌人后方");
//}
if (result > Mathf.Cos( * Mathf.Deg2Rad) && distance < )
{
GUILayout.Label("在扇形范围内:" + Mathf.Acos(result) * Mathf.Rad2Deg + "度");
}
else
{
GUILayout.Label("不在扇形范围内:" + Mathf.Acos(result) * Mathf.Rad2Deg + "度");
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TestTrans : MonoBehaviour {
public Transform Target;
public float distance;
private float SkillDistance = ;//扇形距离
private float SkillJiaodu = ;//扇形的角度
// Use this for initialization
void Start () {
////偶然性编程
distance = Vector3.Distance(transform.position, Target.position);//距离
Vector3 norVec = transform.rotation * Vector3.forward;
Vector3 temVec = Target.position - transform.position;
Debug.DrawLine(transform.position, norVec, Color.red);//画出技能释放者面对的方向向量
Debug.DrawLine(transform.position, Target.position, Color.green);//画出技能释放者与目标点的连线
float jiajiao = Mathf.Acos(Vector3.Dot(norVec.normalized, temVec.normalized)) * Mathf.Rad2Deg;
if (distance <= SkillDistance)
{
if (jiajiao <= SkillJiaodu)
{
Debug.Log("在扇形范围内");
}
else
{
Debug.Log("不在扇形范围内");
}
}
} // Update is called once per frame
void Update () { }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CrystalMove : MonoBehaviour {
//public Transform startTrans;
//public float moveSpeed = 1;
//public float rotSpeed = 1;
public float rotateSpeed = ;
//调节上下频率和浮动
public float amplitude = 1f;
public float frequency = 1f;
// Use this for initialization
void Start () { } // Update is called once per frame
void Update () {
// transform.Rotate(Vector3.up, Space.World);
// Vector3 delta = Vector3.up * Mathf.Sin(Time.time) * moveSpeed*0.25F;
// transform.position = startTrans.position + delta;
transform.Rotate(Vector3.up * Time.deltaTime * rotateSpeed);
float sin = Mathf.Sin(Time.time * frequency) * amplitude;
transform.Translate(Vector3.up * sin, Space.World);
}
}

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. Android(一) 动态菜单

    1.android的一个activity可以再选中某项之后按menu键弹出特定的菜单,也就是动态菜单.动态菜单的实现是靠menu类中的addIntentOptions函数实现的,具体的声明如下: in ...

  2. iOS10网络权限数据

    参考地址:1.http://www.cocoachina.com/ios/20180723/24274.html   https://blog.csdn.net/wang_bo_justone/art ...

  3. android指纹

    Android 6.0+指纹识别心得 Android 6.0+Fingerprint心得 数据来源:https://blog.csdn.net/lhj1076880929/article/detail ...

  4. UITextField输入中文

    [self.rightTF addTarget:self action:@selector(rightTFValueChange:) forControlEvents:UIControlEventEd ...

  5. Javascript核心对象

    JavaScript的实现包括以下3个部分: 1)核心(ECMAScript):描述了JS的语法和基本对象. 2)文档对象模型 (DOM):处理网页内容的方法和接口 3)浏览器对象模型(BOM):与浏 ...

  6. [py]列表生成式-支持条件,多值的拼接

    列表生成式 代码简洁一些 支持多条件, 过滤,或拼接某些值 支持返回多值 是一种生成式 # 生成一个列表 print(list(range(1, 11))) # 生成一个列表x^2 ## 方法1: 返 ...

  7. MVC中Controller与View之间的数据传递

    一.Controller向View传递数据 Controller向View传递数据有3种形式: 通过ViewData传递 在Controller里面的Action方法中定义ViewData,并且赋值, ...

  8. python安装HTMLTestRunner

    == https://pypi.org/project/html-testRunner/#files 下载 放在这路径下 cmd中进行安装

  9. Java之构造器和构造方法的使用和意义

    我总是要把构造器和方法混淆,后来发现, 方法,实际上,是需要用于执行java代码的,而构造器, 构造器,,,是一个类的实例!!(我的理解,构造器是一个对象) 为什么呢? 类的实例,我们需要用类来创建对 ...

  10. c#string为传值模式

    闲的无聊,记忆中好像是在c/c++语言中string为传址模式(函数修改参数时会影响原来的string参数值),比较好奇c#下对于string参数到底是传值还是传址有些疑问,便亲自测试. 1.结果aa ...