当前位置: 首页 > news >正文

Unity中向量的点乘、叉乘区别和作用以及经典案例

文章目录

      • 点乘(Dot Product)
      • 叉乘(Cross Product)
      • 向量归一化(Normalize)
      • 其他作用

unity开发中我们要计算角度,判断位置,常用点乘、叉乘、归一化等等,我们看看他们的使用案例

点乘(Dot Product)

在Unity中的Vector3类提供了Dot()方法来计算两个向量的点乘。点乘的结果是一个标量值,可以用于判断两个向量的方向关系或者计算投影长度等。

Vector3 vectorA = new Vector3(1, 2, 3);
Vector3 vectorB = new Vector3(4, 5, 6);float dotProduct = Vector3.Dot(vectorA, vectorB);// 如果dotProduct > 0,表示vectorA和vectorB大致指向同一方向;
// 如果dotProduct < 0,表示vectorA和vectorB大致指向相反方向;
// 如果dotProduct = 0,表示vectorA和vectorB互相垂直。

叉乘(Cross Product)

Unity中的Vector3类也提供了Cross()方法来计算两个三维向量的叉乘。叉乘结果是一个新的向量,其方向垂直于原两个向量所在的平面,并遵循右手定则。

Vector3 vectorA = new Vector3(1, 0, 0); // 假设是X轴正方向
Vector3 vectorB = new Vector3(0, 1, 0); // 假设是Y轴正方向Vector3 crossProduct = Vector3.Cross(vectorA, vectorB); // 结果应该是Z轴正方向的单位向量// 在Unity中,常利用叉乘来计算面法线、旋转轴等信息。

向量归一化(Normalize)

Normalize()方法用于将一个非零向量转换为单位向量,即模长为1但方向保持不变的向量。这对于描述方向而不关心大小的场合非常有用,如光源、观察方向、表面法线等。

Vector3 nonNormalizedVector = new Vector3(3, 4, 5); // 长度不为1的向量Vector3 normalizedVector = Vector3.Normalize(nonNormalizedVector); // 此时normalizedVector的长度为1// 在Unity中,例如我们想要获取某个物体朝向的方向,而不关心其速度或力的大小时,就会使用归一化向量。

其他作用

当然,向量的点乘、叉乘以及归一化在Unity和其他游戏引擎或计算机图形学领域中还有更多的应用:

点乘(Dot Product):

  1. 计算角度:通过点乘可以求出两个单位向量之间的夹角余弦值,进而得到角度。例如,在计算物体与光源的照射角度时会用到。
float angleInRadians = Mathf.Acos(Vector3.Dot(normalizedVectorA, normalizedVectorB));
  1. 投影长度:如果需要计算一个向量在另一个向量方向上的投影长度,也可以使用点乘。

  2. 光照模型:在Phong光照模型中,点乘用于计算表面法线与光线方向的夹角影响漫反射光强。

叉乘(Cross Product):

  1. 平面法线:在三维空间中,可以通过两个不共线的向量进行叉乘来获取所在平面的法线向量。

  2. 旋转轴:在旋转操作中,确定一个旋转轴通常需要通过两个非平行的方向向量叉乘得到。

  3. 力矩计算:在物理学模拟中,计算力对物体产生的力矩需要用到叉乘,即力矢量和力臂(从转动轴到力的作用点)的叉乘。

向量归一化(Normalize):

  1. 方向处理:在许多情况下,我们只关心物体的朝向而不关心其速度或大小,这时将速度或加速度向量归一化,就可以得到方向信息。

  2. 纹理坐标生成:在某些高级渲染技术如环境映射中,通过归一化的视线方向向量来查询立方体贴图等。

  3. 单位向量阵列构建:在构建球形或圆柱形的法线贴图时,需要创建一系列均匀分布的单位向量,这就要用到归一化操作。

总结来说,在Unity开发过程中,点乘、叉乘和归一化是非常基本且实用的操作,广泛应用于碰撞检测、物理模拟、光照计算、相机控制等多个领域。

python推荐学习汇总连接:
50个开发必备的Python经典脚本(1-10)

50个开发必备的Python经典脚本(11-20)

50个开发必备的Python经典脚本(21-30)

50个开发必备的Python经典脚本(31-40)

50个开发必备的Python经典脚本(41-50)
————————————————

​最后我们放松一下眼睛
在这里插入图片描述

相关文章:

Unity中向量的点乘、叉乘区别和作用以及经典案例

文章目录 点乘&#xff08;Dot Product&#xff09;叉乘&#xff08;Cross Product&#xff09;向量归一化&#xff08;Normalize&#xff09;其他作用 unity开发中我们要计算角度&#xff0c;判断位置&#xff0c;常用点乘、叉乘、归一化等等&#xff0c;我们看看他们的使用案…...

(26)Linux 进程通信之共享内存(共享储存空间)

共享内存是System V版本的最后一个进程间通信方式。共享内存&#xff0c;顾名思义就是允许两个不相关的进程访问同一个逻辑内存&#xff0c;共享内存是两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。进程可以将同一…...

体感游戏开发体感互动游戏

体感健身游戏是一种利用特定技术来跟踪和响应玩家身体动作的互动式电子游戏。这种游戏类型的目的是通过有趣、动态的方式鼓励用户进行身体活动和健康锻炼。下面是有关体感健身游戏的一些重要信息&#xff1a; 体感游戏技术背景 体感技术&#xff1a;这些游戏通常使用运动传感…...

vulnhub靶场之DC-5

一.环境搭建 1.靶场描述 DC-5 is another purposely built vulnerable lab with the intent of gaining experience in the world of penetration testing. The plan was for DC-5 to kick it up a notch, so this might not be great for beginners, but should be ok for p…...

为什么选择CRM系统时,在线演示很重要?

想要知道一款CRM管理系统是否满足企业的需求&#xff0c;操作是否简单&#xff0c;运行是否流畅&#xff0c;最直观的方式就是远程演示。否则&#xff0c;光凭厂商的销售人员介绍一下产品&#xff0c;企业就盲目下单&#xff0c;最后发现功能不匹配&#xff0c;还要赔钱赔时间重…...

专业实习day3、4(路由器做内网访问公网)

专业实习 代码 display ip interface brief 显示当前设备下所有接口IP undo IP地址支持覆盖&#xff0c;但是正常的命令不能覆盖必须undo&#xff08;删除&#xff09;掉 un in en 在做配置的过程中&#xff0c;设备系统一般都会出现一些提示或者告警之类的东西&#xff0c;从…...

H264码流进行RTP包封装

一.H264基本概念 H.264从框架结构上分为视频编码层&#xff08;VCL&#xff09;和网络抽象层&#xff08;NAL&#xff09;&#xff0c;VCL功能是进行视频编解码&#xff0c;包括运动补偿预测&#xff0c;变换编码和熵编码等功能&#xff1b;NAL用于采用适当的格式对VCL视频数据…...

基于多智能体点对点转换的分布式模型预测控制

matlab2020正常运行 基于多智能体点对点转换的分布式模型预测控制资源-CSDN文库...

性能分析与调优: Linux 实现 缺页剖析与火焰图

目录 一、实验 1.环境 2.缺页(RSS增长)剖析与火焰图 一、实验 1.环境 &#xff08;1&#xff09;主机 表1-1 主机 主机架构组件IP备注prometheus 监测 系统 prometheus、node_exporter 192.168.204.18grafana监测GUIgrafana192.168.204.19agent 监测 主机 node_exporter…...

代码随想录算法训练营第17天 | 110.平衡二叉树 + 257. 二叉树的所有路径 + 404.左叶子之和

今日内容 110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和 110.平衡二叉树 - Easy 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1…...

ubuntu20.04网络问题以及解决方案

1.网络图标消失&#xff0c;wired消失&#xff0c;ens33消失 参考&#xff1a;https://blog.51cto.com/u_204222/2465609 https://blog.csdn.net/qq_42265170/article/details/123640669 原始是在虚拟机中切换网络连接方式&#xff08;桥接和NAT&#xff09;&#xff0c; 解决…...

Java面试题(java高级面试题)

线程池的核心线程数设置为多大比较合理&#xff1f; Worker线程在执行的过程中&#xff0c;有一部计算时间需要占用CPU&#xff0c;另一部分等待时间不需要占用CPU&#xff0c;通过量化分析&#xff0c;例如打日志进行统计&#xff0c;可以统计出整个Worker线程执行过程中这两…...

【MIdjourney】关于图像中人物视角的关键词

本篇仅是我个人在使用过程中的一些经验之谈&#xff0c;不代表一定是对的&#xff0c;如有任何问题欢迎在评论区指正&#xff0c;如有补充也欢迎在评论区留言。 1.全景镜头(panorama) 全景镜头是一种广角镜头&#xff0c;可以捕捉到比普通镜头更广阔的视野范围。全景镜头&…...

433. 最小基因变化(Queue使用ArrayList和LinkedList进行声明)

这道题可以看成一个24叉树。 因为基因序列长度固定为8&#xff0c;且每个位置的字母固定是AGCT&#xff0c;可以选择改变的只有3个字母&#xff0c;所以一次最多24种情况。 然后检查变化后的结果是否存在bank中&#xff08;使用hashSet来存储&#xff09;&#xff0c;同时设置…...

MYSQL双主节点–更换ip

MYSQL双主节点–更换ip 一、更换双主节点ip 1.停止mysql服务 #安装了supervisor supervisorctl stop mysql #未安装 systemctl stop mysqld2.修改网卡配置信息 注&#xff1a;ens33是网卡名称&#xff0c;可能网卡不叫ens33 vi /etc/sysconfig/network-scripts/ifcfg-ens333…...

一文玩转Go语言中的面向对象编程~

温故而知新&#xff1a;什么是面向对象 面向对象&#xff08;Object-Oriented&#xff09;是一种计算机编程的方法和思想&#xff0c;它将程序中的数据&#xff08;对象&#xff09;和操作&#xff08;方法&#xff09;组织成一个个相互关联和交互的对象。对象是现实世界中的事…...

kylin集群反向代理(健康检查)

前面一篇文章提到了使用nginx来对kylin集群进行反向代理&#xff0c; kylin集群使用nginx反向代理-CSDN博客文章浏览阅读349次&#xff0c;点赞8次&#xff0c;收藏9次。由于是同一个集群的&#xff0c;元数据没有变化&#xff0c;所以&#xff0c;直接将原本的kylin使用scp的…...

【docker】centos7安装harbor

目录 零、前提一、下载离线包二、安装三、访问四、开机自启 零、前提 1.前提是已经安装了docker和docker-compose 一、下载离线包 1. csdn资源&#xff1a;harbor-offline-installer-v2.10.0.tgz 2. 百度云盘&#xff08;提取码&#xff1a;ap3t&#xff09;&#xff1a;harbo…...

2024 年 1 月安全更新修补了 58 个漏洞(Android )

谷歌发布了针对 Android 平台 58 个漏洞的补丁&#xff0c;并修复了 Pixel 设备中的 3 个安全漏洞&#xff0c;拉开了 2024 年的序幕。 Android 2024 年 1 月更新的第一部分以 2024 年 1 月 1 日安全补丁级别发布在设备上&#xff0c;解决了框架和系统组件中的 10 个安全漏洞&…...

数据库系统概念 第七版 中文答案 第3章 SQL介绍

3.1 将以下查询使用SQL语言编写&#xff0c;使用大学数据库模式。 &#xff08;我们建议您实际在数据库上运行这些查询&#xff0c;使用我们在书籍网站db-book.com上提供的示例数据。有关设置数据库和加载示例数据的说明&#xff0c;请参阅上述网站。&#xff09; a. 查找计算机…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 &#xff08;一&#xff09;引用计数法 &#xff08;二&#xff09;可达性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;标记清除 &#xff08;二&#xff09;标记整理 &#xff08;三&#xff09;复制 &#xff08;四&#xff…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...

上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式

简介 在我的 QT/C 开发工作中&#xff0c;合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式&#xff1a;工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

【Linux】Linux安装并配置RabbitMQ

目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的&#xff0c;需要先安…...