Unity_角度_弧度_向量-----(最近遇到一点这方面的小问题,发现有些遗忘了,特此温故,并摘抄了部分大佬们的优秀注释)

1,角度

两条相交直线中的任何一条与另一条相叠合时必须转动的量的量度,转动在这两条直线的所在平面上并绕交点进行。

角度是用以量度角的单位,符号为°。一周角分为360等份,每份定义为1度(1°)。

之所以采用360这数值,是因为它容易被整除。360除了1和自己,还有21个真因子(2、3、4、5、6、8、9、10、12、15、18、20、24、30、36、45、60、72、90、120、180),所以很多特殊的角的角度都是整数。

2.弧度

在数学和物理中,弧度是角的度量单位。它是由国际单位制导出的单位,单位缩写是rad。定义:弧长等于半径的弧,其所对的圆心角为1弧度。(即两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。当这段弧长正好等于圆的半径时,两条射线的夹角的弧度为1)。

3.关系

角度和弧度关系是:2π弧度=360°。从而1°≈0.0174533弧度,1弧度≈57.29578°。

1) 角度转换为弧度公式:弧度=角度×(π ÷180 )

2)弧度转换为角度公式: 角度=弧度×(180÷π)

4.向量

点乘积的计算方式为:a*b=|a|*|b|*cos<a,b>,其中|a|和|b|表示向量的模,<a,b>表示两个向量的夹角。在点积中<a,b>和<b,a>夹角是不分顺序的。所以通过点积,可以计算两个向量的夹角。

还可以粗略的判断当前物体是否朝向另一个物体,或者说物体是否在我的前面(后面)。只需要计算

Vector3 selfforward = self.transform.forward;

Vector3 selftotarget = (target.transform.position - self.transform.position).normalized;

的点积即可,结果大于0则目标在我前方。

  叉积定义:c = a x b,其中a b c均为向量,即两个向量的叉积结果还是一个向量。

  性质1:c⊥a,c⊥b,即向量c垂直于向量a b所在平面。

  性质2:模长|c|=|a|*|b|*sin<a,b>。

  性质3:满足右手法则。有a x b ≠ b x a,而a x b = - b x a。

  简单的说: 点乘判断角度,叉乘判断方向。 叉乘可以判断你是往左转还是往右转更好的转向敌人,点乘得到你当前的面朝向的方向和你到敌人的方向的所成的角度大小。

代码如下:

using UnityEngine;

public class Vector3Test : MonoBehaviour
{
    private Vector3 a = new Vector3(1, 0, 1);
    private Vector3 b = new Vector3(-2, 0, -2);
    private void Start()
    {
        //--向量点乘--结果为一个数值
        float value = Vector3.Dot(a, b);
        //Debug.Log(value);

        float radians = Mathf.Acos(Vector3.Dot(a.normalized, b.normalized));//--弧度
        //Debug.Log(radians);

        float degrees = radians * Mathf.Rad2Deg;//--角度
        //Debug.Log(degrees);

        float angle = Vector3.Angle(a, b);//--角度
        //Debug.Log(angle);

        //--向量叉乘--结果是一个向量
        Vector3 e = Vector3.Cross(a, b);
        //Debug.Log(e.y);
        Vector3 f = Vector3.Cross(b, a);
        float degrees1 = Mathf.Asin(Vector3.Cross(a.normalized, b.normalized).magnitude) * Mathf.Rad2Deg;
        //Debug.Log(e);
        //Debug.Log(f);
        // Debug.Log(degrees1);

        TestDot(a, b);
        TestCross(a, b);
        GetAngle(a, b);
    }

    //点积
    private void TestDot(Vector3 a, Vector3 b)
    {
        float result = Vector3.Dot(a, b);
        if (result > 0)
        {
            Debug.Log("b在a前");
        }
        else if (result == 0)
        {
            Debug.Log("ab垂直");
        }
        else
        {
            Debug.Log("b在a后");
        }
        float angle = Vector3.Angle(a, b);//[0 - 180]
        result = Vector3.Dot(a.normalized, b.normalized);
        float radians = Mathf.Acos(result);
        angle = radians * Mathf.Rad2Deg;
    }

    //叉乘
    private void TestCross(Vector3 a, Vector3 b)
    {
        Vector3 c = Vector3.Cross(a, b);
        if (c == Vector3.zero)
        {
            Debug.Log("b和a(平行),夹角:" + Vector3.Angle(a, b));
            return;
        }
        float radians = Mathf.Asin(Vector3.Distance(Vector3.zero, Vector3.Cross(a.normalized, b.normalized)));
        float angle = radians * Mathf.Rad2Deg;

        // 判断顺时针、逆时针方向,是在 2D 平面内的,所以需指定一个平面
        //下面以X、Z轴组成的平面为例 , (Y 轴为纵轴),
        // 在 X、Z 轴平面上,判断 b 在 a 的顺时针或者逆时针方向,
        if (c.y > 0)
        {
            Debug.Log("b在a的顺时针方向");
        }
        else if (c.y == 0)
        {
            //--
        }
        else
        {
            Debug.Log("b在a的逆时针方向");
        }
    }

    // 获取两个向量的夹角  Vector3.Angle 只能返回 [0, 180] 的值
    // 如真实情况下向量 a 到 b 的夹角(80 度)则 b 到 a 的夹角是(-80)
    // 通过 Dot、Cross 结合获取到 a 到 b, b 到 a 的不同夹角
    private void GetAngle(Vector3 a, Vector3 b)
    {
        Vector3 c = Vector3.Cross(a, b);
        float angle = Vector3.Angle(a, b);

        // b 到 a 的夹角
        float sign = Mathf.Sign(Vector3.Dot(c.normalized, Vector3.Cross(a.normalized, b.normalized)));
        float signed_angle = angle * sign;

        Debug.Log("b -> a :" + signed_angle);

        // a 到 b 的夹角
        sign = Mathf.Sign(Vector3.Dot(c.normalized, Vector3.Cross(b.normalized, a.normalized)));
        signed_angle = angle * sign;

        Debug.Log("a -> b :" + signed_angle);
    }
}

参考:https://blog.csdn.net/yupu56/article/details/53609028

原文地址:https://www.cnblogs.com/Roz-001/p/12144423.html

时间: 2024-10-12 17:26:05

Unity_角度_弧度_向量-----(最近遇到一点这方面的小问题,发现有些遗忘了,特此温故,并摘抄了部分大佬们的优秀注释)的相关文章

三口之家2014年买房理财规划:组合贷缓月供压力 理财资讯 财富故事 理财案例_新浪财经_新浪网

投资与理财记者 吴辉 春暖花开时,江苏常州的读者陈芊芊致信<投资与理财>,诉说她的买房计划.她纠结于要不要现在买房,担心买房后,生活压力变大,影响了现在的生活质量,并希望我们的理财师能给她一些建议,告诉她怎样的理财规划更为合理? 芊芊今年32岁了,目前在一个集团公司上班,税后年收入55000元,年底其他收入29000元,有社保和公积金.但公积金每月交的钱只有300元,而且存款才一年.老公税后年收入60000元,无社保,无公积金,也没有任何商业保险.年底时,老公会交给她3 0 0 0 0元存款.

内地客买30万重疾险香港便宜1 3 可保重疾多13种 香港 保险公司 保险_新浪财经_新浪网

买30万重疾险香港便宜1/3可保重疾多出13种 一群群内地客在香港海港城,排起长龙,炎热的夏天,时不时见有人用纸巾擦擦汗--这一幕不只是为了购买Gucci.LV等奢侈品,还有的为了香港保险公司的保单,有人戏谑香港保险代理签内地单签到"手软". 虽然到香港买保险,很多人心存疑虑,不少媒体也大称"地下保单"非法.无效,未来或存在理赔风险的告诫声也不绝于耳,但据香港保险业监理处统计,自2005年起,内地客新增保单保费总额从18.2亿港元上升到去年的149亿港元,增幅逾7倍

(素材源码)猫猫学IOS(三十六)UI之手势事件旋转_缩放_拖拽

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents 源码:http://download.csdn.net/detail/u013357243/8671943 效果 完成一个图片的捏合缩放,拖拽,旋转动作. 代码:NYViewController.m // // NYViewController.m // 旋转_缩放_拖拽 // // Created by apple on 1

转载--如何使用# ## ... _ _VA_ARGS_ _

作者:hxxiaopei 链接: 如何使用# ## ... _ _VA_ARGS_ _ 1.#假如希望在字符串中包含宏参数,ANSI C允许这样作,在类函数宏的替换部分,#符号用作一个预处理运算符,它可以把语言符号转化程字符串.例如,如果x是一个宏参量,那么#x可以把参数名转化成相应的字符串.该过程称为字符串化(stringizing).#incldue <stdio.h>#define PSQR(x) printf("the square of" #x "is

60后退休收入将大降 怀揣210万如何让养老不差钱 理财产品 养老 退休_新浪财经_新浪网

文本刊实习生刘昕 私营企业养老金"不给力",退休生活得靠自己."60后"丁先生爱自驾旅行,想换SUV.怀揣210万元存款,退休后如何保持原来的生活水平?掂量着自己的钱袋,丁先生是否该换车呢? 国内延迟退休方案悬而未决,但作为"60后"的丁先生,恐怕无论如何也会摊上"被延迟"这档事儿.以丁先生的实际情况,他退休后的收入会明显缩水,如此算来延迟退休好像也是不错的选择.然而,既然怀着一颗想远行的心,工作似乎就成了羁绊.丁先生希望退休

80后女孩买房三步走 短期增值是首步 资金 增值 理财_新浪财经_新浪网

三湘华声全媒体记者 梁兴 通讯员 王茜 [个案资料] 尹婵,今年28岁,是长沙一名普通的公司职员.步入社会5年以来,月收入一直在4500元左右,但因勤俭节约,月结余能达到3000元,年终奖5000元.目前有存款18万元,有"五险一金",无任何商业保险. 尹婵是土生土长的长沙姑娘,父母工资收入稳定.由于工作后仍和父母一起居住,不需要承担房租或房贷.虽然父母乐意提供食宿,但是尹婵不想做"啃老族",每月给父母800元"搭伙费". [财务诊断] 尹婵工作

专家来教你 稳健理财产品如何选 理财产品 资金 收益_新浪财经_新浪网

□广发银行 钟永斌 随着市场流动性紧张得到缓解,2014年以来银行理财产品预期收益率回落.在这种情况下,稳健型投资者该如何挑选理财产品呢? 个人投资者应该通过理财产品的合理组合,在控制整体投资风险的前提下,最大限度地提升整体收益率.理财产品实际收益水平如何要具体考察该产品的投资标的.投资策略.产品结构等因素,同时更需研判与市场动态变化情况. 目前,银行理财产品主要包括保本型理财产品以及非保本型理财产品,从发行规模看非保本型理财产品目前仍是主流.这类产品的预期收益往往直接受到市场流动性因素影响.因

个体户理财有讲究:保险投资养老三者要兼顾 理财 个体户 养老_新浪财经_新浪网

黄先生今年37岁,妻子刘女士35岁,夫妻二人共同经营了一家综合性批发部.女儿10岁,读四年级,儿子5岁,上幼儿园.家庭年收入35万元,家庭每月支出8500元,其中消费在衣食方面3000元,孩子每月学费2000元.有一辆家庭用车和一辆货物运输车共值20万元,房产一套,市值80万元,银行一年期定期存款100万元,平常流动资金30万元. 理财目标 随着两个孩子渐渐长大,支出会逐渐增加,夫妻二人想让孩子接受最好的教育,必要时可以出国留学.而面临同行业竞争日益激烈,经商收益不稳定,因此,黄先生很为今后孩子

中国家庭理财六大特征 家庭理财 特征_新浪财经_新浪网

爱储蓄轻投资 中国人爱储蓄轻投资由来已久,古代中国人赚钱之后,往往都是买钱置地,而不是扩大经营规模.在今天,很多人仍是如此,从新闻报道中的温州炒房团,煤老板 买白菜一样买房的故事中便可见一斑.这是农耕民族的特点.现代中国人的储蓄率全球居首位,也常常被认为是消费不振的原因之一.不过,目前高企的通胀率,已 经让许多家庭感受到危机,纷纷拿起了投资理财的利器,爱储蓄轻投资的现状有所缓解. 迷恋固定资产 据嘉丰瑞德理财师了解,国人选择理财产品,最中意的是房产和等固定资产,投资者似乎特别青睐这种看得见的投资