博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转:点积&叉积
阅读量:6961 次
发布时间:2019-06-27

本文共 1996 字,大约阅读时间需要 6 分钟。

一、点积(又称“数量积”、“内积”)

 1、理论知识

在数学中,点积的定义为a·b=|a|·|b|cos<a,b> 【注:粗体小写字母表示向量,<a,b>表示向量a,b的夹角,取值范围为[0,π]】。从定义上,我们知道向量的点积得到的是一个数值。而不是向量(这点大家要注意了!要与叉积进行区别)。另外点积中的夹角<a,b>没有顺序可言,即<a,b>=<b,a>(或a·b=b·a所以我们可以通过点积得到两个向量之间的夹角。<a,b>= arccos(a·b / (|a|·|b|))。并且通过点积的正负值,我们可以判断两个向量的方向关系。如果为正,即>0,他们夹角为(0,π/2)。如果为负,夹角为(π/2,π)。

2、Unity3D中应用

在Unity中,点积表示为Vector3.Dot(Vector3,Vector3):float——参数为2个向量,返回值为浮点型。

[csharp]   
 
  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class Vector3_Dot : MonoBehaviour {  
  5.       
  6.     //向量a  
  7.     Vector3 a;  
  8.     //向量b  
  9.     Vector3 b;  
  10.       
  11.     void Start()  
  12.     {  
  13.         //向量的初始化  
  14.         a = new Vector3(3, 0, 0);//x轴方向,长度为3  
  15.         b = new Vector3(Mathf.Sqrt(2), Mathf.Sqrt(2), 0);//(根号2,根号2,0)  
  16.     }  
  17.   
  18.     void OnGUI()  
  19.     {  
  20.         //点积的返回值  
  21.         float c=Vector3.Dot(a,b);  
  22.         //向量a,b的夹角,得到的值为弧度,我们将其转换为角度,便于查看!  
  23.         float angle=Mathf.Acos( Vector3.Dot(a.normalized,b.normalized))*Mathf.Rad2Deg;  
  24.         GUILayout.Label("向量a,b的点积为:" + c);  
  25.         GUILayout.Label("向量a,b的夹角为:" + angle);  
  26.     }  
  27.       
  28. }  

a.normalized表示该方向的单位向量,即方向与向量a相同,长度为1的向量。Mathf.Acos()即数学中的arccos()函数。Mathf.Rad2Deg表示将弧度转化为角度。

结果如下图:

二、叉积(又称“向量积”、“外积”)

1、理论知识

数学上的定义:c=axb【注:粗体小写字母表示向量】其中a,b,c均为向量。即两个向量的叉积得到的还是向量!

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

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

性质3:满足右手法则。从这点我们有axb ≠ bxa,而axb = - bxa。所以我们可以使用叉积的正负值来判断向量a,b的相对位置,即向量b是处于向量a的顺时针方向还是逆时针方向。

2、Unity中应用

在Unity中,叉积表示为Vector3.Cross(Vector3,Vector3):Vector3——参数为2个向量,返回值也为向量。

[csharp]   
 
  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class Vector3_Cross : MonoBehaviour {  
  5.   
  6.     //向量a  
  7.     Vector3 a;  
  8.     //向量b  
  9.     Vector3 b;  
  10.   
  11.     void Start()  
  12.     {  
  13.         //向量的初始化  
  14.         a = new Vector3(3, 0, 0);//x轴方向,长度为3  
  15.         b = new Vector3(0, 4, 0);//y轴方向,长度为4  
  16.     }  
  17.   
  18.     void OnGUI()  
  19.     {  
  20.         //叉积的返回值  
  21.         Vector3 c = Vector3.Cross(a, b);  
  22.         Vector3 d = Vector3.Cross(b, a);  
  23.         //向量a,b的夹角,得到的值为弧度,我们将其转换为角度,便于查看!  
  24.         float angle = Mathf.Asin(Vector3.Distance(Vector3.zero, Vector3.Cross(a.normalized, b.normalized))) * Mathf.Rad2Deg;  
  25.         GUILayout.Label("向量axb为:" + c);  
  26.         GUILayout.Label("向量bxa为:" + d);  
  27.         GUILayout.Label("向量a,b的夹角为:" + angle);  
  28.     }  
  29. }  

Vector3.Distance()用于计算2个Vector3的距离,在这里我们可以得到叉积向量的模长。

 

结果如下图:

转载于:https://www.cnblogs.com/caicaicaicai/p/6517869.html

你可能感兴趣的文章
MVC Cookie的使用
查看>>
mysql主从配置
查看>>
Linux 消耗CPU和内存的代码段----测试用的
查看>>
VMware与Hyper-V不兼容
查看>>
OSX加载驱动提示invalid signature
查看>>
第0篇.C++开发环境介绍
查看>>
Ubuntu 源代码阅读和函数、变量的定位--之一
查看>>
Java - Keywords 基本数据类型 Identifier
查看>>
我的友情链接
查看>>
Core Linux 操作文档(一)
查看>>
hadoop安装过程中ubuntu系统ssh免密码登陆设置 
查看>>
input按钮的background-image属性兼容性问题
查看>>
java.lang.*不用我们导入,编译器会自动给我们导入的,,,这个包是默认导入的。...
查看>>
shell 小脚本
查看>>
IE8、IE9下访问博客报不安全『博客帮助』文档
查看>>
HDU 5162
查看>>
Python 获取本机ip地址
查看>>
NO.1 关于禅道
查看>>
win-codeblocks-16.01
查看>>
资本主义系统的基本结构
查看>>