unity3d————叉乘的知识点

一、向量叉乘的知识点

  1. 定义与公式

    • 向量叉乘的定义为:对于两个三维向量a和b,它们的叉乘结果是一个向量c,记为c=a×b。
    • 叉乘的计算公式为:c=(y1z2-y2z1)i+(x2z1-x1z2)j+(x1y2-x2y1)k,其中a=(x1, y1, z1),b=(x2, y2, z2),i、j、k分别为x、y、z轴的单位向量。
  2. 几何意义

    • 叉乘得到的向量c与向量a和b都垂直,即c⊥a且c⊥b。
    • 叉乘结果向量c的方向遵循右手定则(在Unity中为左手定则):将右手四指从向量a转向向量b,拇指的指向即为向量c的方向。
    • 叉乘结果向量c的模长等于向量a和b的模长与它们之间夹角的正弦值的乘积,即|c|=|a|×|b|×sinθ。
  3. 性质

    • 叉乘不满足交换律,即a×b≠b×a,而是a×b=-(b×a)。
    • 叉乘满足加法的分配律,即a×(b+c)=a×b+a×c。
    • 叉乘结果是一个向量,而不是标量。

点乘(Dot Product)
点乘的顺序是可以互换的。即,对于任意两个向量AB,有A · B = B · A。点乘的结果是一个标量(scalar),表示两个向量之间的夹角余弦值乘以它们的模的乘积。由于余弦函数是对称的,所以点乘也是对称的。

叉乘(Cross Product)
叉乘的顺序则不能互换。对于向量ABA × BB × A的结果是不同的。实际上,A × BB × A是互为相反向量,即A × B = -(B × A)。叉乘的结果是一个向量(vector),这个向量垂直于原两个向量所构成的平面,并且其方向由右手定则决定。

因此,在使用叉乘时,必须注意向量的顺序,因为顺序的不同会导致结果向量的方向相反。而在使用点乘时,则不需要担心向量的顺序问题。

一、相关API

在Unity3D中,叉乘运算可以通过Vector3.Cross方法来实现。该方法的签名如下:

public static Vector3 Cross(Vector3 lhs, Vector3 rhs);

其中,lhsrhs是需要进行叉乘的两个向量,返回结果是它们的叉乘向量。

三、使用场景

  1. 计算法向量:在3D图形学中,叉乘常用于计算表面的法向量。例如,给定两个不共线的表面向量,可以通过叉乘得到它们的法向量,这在光照计算中非常重要。
  2. 确定旋转轴:在旋转操作中,叉乘可以用于确定旋转轴。例如,计算物体从当前方向向量旋转到目标方向向量所需的旋转轴。
  3. 碰撞检测:在碰撞检测中,叉乘可以用于计算碰撞法线和碰撞响应的方向。
  4. 判断左右方位:通过叉乘的结果,可以判断一个物体相对于另一个物体的左右方位。例如,在游戏中判断敌人位于玩家的左侧还是右侧。

四、注意事项

  1. 向量顺序:叉乘的结果依赖于向量的顺序。即A × BB × A的结果方向相反。因此,在使用叉乘时,必须注意向量的顺序。
  2. 零向量:任何向量与零向量进行叉乘的结果都是零向量。因此,在进行叉乘运算前,应确保参与运算的向量不是零向量。
  3. 共线向量:如果两个向量共线(即它们平行或反向平行),则它们的叉乘结果为零向量。这是因为共线向量无法构成一个具有面积的平行四边形。
  4. 左手坐标系:Unity3D使用的是左手坐标系,这与数学上常用的右手坐标系有所不同。因此,在使用叉乘确定方向时,需要注意坐标系的差异。在Unity中,应使用左手法则来判断叉乘结果的方向。

综上所述,叉乘在Unity3D中有着广泛的应用和独特的几何意义。通过合理利用叉乘运算和相关API,可以实现许多复杂的3D图形和物理效果。同时,在使用叉乘时也需要注意向量顺序、零向量、共线向量以及坐标系差异等问题。

 五、代码示例

public class chacheng : MonoBehaviour
{public Transform A;public Transform B;void Start(){print(Vector3.Cross(A.position, B.position));}void Update(){//假设向量 A和B 都在 XZ平面上//向量A 叉乘 向量 B//y大于0 证明 B在A右侧//y小于0 证明 B在A左侧Vector3 rev = Vector3.Cross(A.position, B.position);if(rev.y > 0){print("B在A右边");}else{print("B在A左边");}Vector3 rev1 = Vector3.Cross(B.position, A.position);if (rev1.y > 0){print("A在B右边");}else{print("A在B左边");}}
}

结果:

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/464549.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue2和vue3在html中引用组件component方式不一样

我的vue版本是&#xff1a;20.17.0 一、在HTML中&#xff0c;引用组件格式区别。 vue2引用组件可以是file.vue格式&#xff0c;需要导入&#xff1a;<script src"https://unpkg.com/http-vue-loader"></script>才可以识别vue格式。 vue3引用组件格式是…

密码学知识点整理一:密码学概论

密码学是什么&#xff1f; 密码学是一门研究编制密码和破译密码的技术科学。 密码学&#xff0c;作为信息安全的核心技术之一&#xff0c;其重要性在于能够为信息传输提供安全保障&#xff0c;确保数据在存储或传输过程中的机密性、完整性与真实性不被破坏。从古至今&#x…

我谈正态分布——正态偏态

目录 pdf和cdf参数 标准正态分布期望和方差分布形态 3 σ 3\sigma 3σ原则 正态和偏态正态偏态瑞利分布偏度 (Skewness)峰度 (Kurtosis) 比较 正态分布的英文是Normal Distribution&#xff0c;normal是“正常”或“标准”的意思&#xff0c;中文翻译是正态&#xff0c;多完美的…

杨传辉:云+AI 时代的一体化数据库|OceanBase发布会实录

在 2024 OceanBase 年度发布会 上&#xff0c; OceanBase CTO 杨传辉进行了主题为《云和 AI 时代的一体化数据库战略思考》的演讲&#xff0c;本文为演讲实录&#xff0c;欢迎阅读。 视频观看可点击&#xff1a;https://www.oceanbase.com/video/9001825 各位 OceanBase 的客…

华为OD机试 - 无重复字符的元素长度乘积的最大值(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

【格式化查看JSON文件】coco的json文件内容都在一行如何按照json格式查看

文章目录 1.使用 Python 中的 json 库2. 使用浏览器3. notepad4. VSCode 如果COCO的JSON文件内容在一行显示&#xff0c;这通常意味着文件被压缩或者是在传输过程中出现了问题。 1.使用 Python 中的 json 库 想更好地查看 COCO 格式的 JSON 标签&#xff0c;可以将其格式化为更…

2025生物发酵展(济南)为生物制造产业注入新活力共谱行业新篇章

2025第十四届国际生物发酵展将于3月3-5日济南盛大举办&#xff01;产业链逐步完整&#xff0c;展会面积再创历史新高&#xff0c;展览面积较上届增涨至60000平方米&#xff0c;专业观众40000&#xff0c;品牌展商800&#xff0c;同期活动会议增加至50场&#xff0c;展会同期将举…

kafka里的consumer 是推还是拉?

大家好&#xff0c;我是锋哥。今天分享关于【kafka里的consumer 是推还是拉&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; kafka里的consumer 是推还是拉&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在Kafka中&#xff0c;消费者&…

Visual Studio | 配置管理

文章目录 一、配置管理1、项目属性1.1、常规1.2、VC 目录1.3、C/C -> 常规1.4、C/C -> 预处理器1.5、C/C -> 预编译头1.6、连接器 -> 常规1.7、连接器 -> 输入 2、编辑2.1、显示空格或tab符 一、配置管理 1、项目属性 1.1、常规 字段功能目标平台版本用于生成…

Docker打包自己项目推到Docker hub仓库(windows10)

一、启用Hyper-V和容器特性 1.应用和功能 2.点击程序和功能 3.启用或关闭Windows功能 4.开启Hyper-V 和 容器特性 记得重启生效&#xff01;&#xff01;&#xff01; 二、安装WSL2&#xff1a;写文章-CSDN创作中心https://mp.csdn.net/mp_blog/creation/editor/143057041 三…

js.轮转数组和旋转链表

这是两个相似的题型&#xff0c;一个是数组&#xff0c;另一个是链表。 链接&#xff1a;189. 轮转数组 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1:…

mysql left join group_concat 主表丢失数据

问题出现的场景&#xff1a; 有一个主表 a&#xff0c;一个子表 b a表有两条数据&#xff0c;a表第一条数据在b表中有一条子数据&#xff0c;a表第二条数据在b表中有两条子数据。 现在想要查询出来a表的所有数据和a表的子表b的id&#xff0c;b的id 使用GROUP_CONCAT拼接 有…

Spring 中循环依赖 三级缓存

在Spring框架中&#xff0c;循环依赖是一个常见的问题&#xff0c;它指的是两个或多个Bean之间互相依赖&#xff0c;形成一个闭环&#xff0c;导致无法准确地完成对象的创建和初始化。为了解决这个问题&#xff0c;Spring引入了三级缓存机制。以下是对Spring中循环依赖和三级缓…

新能源汽车与公共充电桩布局

近年来,全球范围内对新能源汽车产业的推动力度不断增强,中国新能源汽车市场也呈现蓬勃发展的势头,在政策与市场的共同推动下,新能源汽车销量持续增长。然而,据中国充电联盟数据显示,充电基础设施建设滞后于新能源汽车数量增长的现状导致充电桩供需不平衡,公共充电桩服务空白区域…

【深度学习基础】常用图像卷积核类型

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;深度学习_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. 常…

一二三应用开发平台自定义查询设计与实现系列3——通用化重构

通用化重构 前面我们以一个实体为目标对象&#xff0c;完成了功能开发与调试。 在此基础上&#xff0c;我们对功能进行重构&#xff0c;使其成为平台的标准化、通用化的功能。 前端重构 首先&#xff0c;先把自定义组件挪到了平台公共组件目录下&#xff0c;如下&#xff1…

RabbitMQ交换机类型

RabbitMQ交换机类型 1、RabbitMQ工作模型2、RabbitMQ交换机类型2.1、Fanout Exchange&#xff08;扇形&#xff09;2.1.1、介绍2.1.2、示例2.1.2.1、生产者2.1.2.2、消费者2.1.2.3、测试 2.2、Direct Exchange&#xff08;直连&#xff09;2.2.1、介绍2.2.2、示例2.2.2.1、生产…

qt QMenuBar详解

1、概述 QMenuBar是Qt框架中用于创建菜单栏的类&#xff0c;它继承自QWidget。QMenuBar通常位于QMainWindow对象的标题栏下方&#xff0c;用于组织和管理多个QMenu&#xff08;菜单&#xff09;和QAction&#xff08;动作&#xff09;。菜单栏提供了一个水平排列的容器&#x…

数据转换 | Matlab基于SP符号递归图(Symbolic recurrence plots)一维数据转二维图像方法

目录 基本介绍程序设计参考资料获取方式 基本介绍 Matlab基于SP符号递归图&#xff08;Symbolic recurrence plots&#xff09;一维数据转二维图像方法 符号递归图(Symbolic recurrence plots)是一种一维时间序列转图像的技术&#xff0c;可用于平稳和非平稳数据集;对噪声具有…

特殊矩阵的压缩存储

一维数组的存储结构 ElemType arr[10]; 各数组元素大小相同&#xff0c;且物理上连续存放。 数组元素a[i]的存放地址 LOC i * sizeof(ElemType)。&#xff08;LOC为起始地址&#xff09; 二维数组的存储结构 ElemType b[2][4];二维数组也具有随机存取的特性&#xff08;需…