Vector3 Dot Cross 常见用法

本贴最后更新于 2624 天前,其中的信息可能已经渤澥桑田

以下都是个人理解。
Dot 计算 2 个向量的点乘法,一般的几何意义是计算力在方向上做的攻,或者一个向量在另外一个向量上的投影,Dot(Va, Vb) = |Va| * |Vb| * cos 夹角 = Vax * Vbx + Vay * Vby + Vaz * Vbz

他的一般用法有以下几种
1:求夹角是钝角还是锐角
因为 Dot 的结果在 2 个向量均为单位向量时,其结果就为 cos 夹角,当锐角时,值大于 0,钝角时,值小与 0

再细分一点
2:求敌人是否可见
观察流星.net,在角色正面夹角 75 度以内且距离 140 码以内敌方,会成为自动目标,这里的夹角 75 度,就是用 Vector3.Dot 计算的
设主角的面向单位向量为 Vector3 forward
设主角的位置向量为 Vector3 playerPos;
设敌方的位置向量为 Vector3 enemyPos;
则有
float angler = Vector3.Dot(Vecotr3.Normalize(playerPos - enemy.Pos), forward)
float degree = Mathf.Acos(angler);
这个 degree 就是对应的弧度反 cos 得到的角度。由于 angler 的取值范围受到 cos 值域的影响(-1, 1),degree 的范围也会受到影响(0, 180)

3:求攻击者在我的何方
判断锐角钝角很简单,但是还有遇见其他情况的时候
受击动作,在 P0.pos 文件里,每个攻击定义都包含 4 个方向的受击动作,每个动作都不同,想象把整个空间划分为前方,左方,右方,后方,每个占 90 度那么
前方,(-45,45) 左方-135,-90,右方 45,135,后方 (135,180) (-180,-135)
这个是以受击者为主体,攻击者在受击者的某个方位来算的。
根据前面 2 计算的角度,只能得到一个 0-180 度以内的角, 这个夹角,是绕着 2 个向量形成的平面的法线作为轴旋转的夹角,这意味着,绕着这个轴顺逆旋转都可以达到一个角度,
那么一般只能判断夹角是否为钝角,那怎么判断攻击者在我的左方,或者右方,就需要叉乘
叉乘成为向量积,其几何意义是计算结果是一个向量,其结果的模长,为 2 个向量组成的平行四边形的面积
Vector3.Cross 计算 2 个向量形成的面法向量,其计算结果是一个向量,且不满足交换律 cross(a,b) != cross(b, a)这是因为这个法线有 2 个方向,ab 形成的平面把空间划分为 2 个部分
法线垂直 ab 形成的平面贯穿 2 个空间,法线是向量,具有方向,所以这时候 2 个方向都可以选,选定任意一个为法向量 n
绕法向量 n 顺时针旋转得到的角度为正方向,以 A 向量为起点,绕法向量 n 顺时针旋转到 B 向量,那么夹角从 0 开始增大,一直到 A 向量与 B 向量的夹角
绕法向量 n 逆时针旋转得到的角度为负方向,以 B 向量为起点,绕法向量 n 逆时针旋转到 A 向量,那么夹角从 0 开始减小,一直到 B 向量与 A 向量的夹角
Cross(Va, Vb) = new Vector3(VayVbz - Vaz Vby, Vaz * Vbx - Vax * Vbz, Vax * Vby - Vay * Vbx) = |Va| * |Vb| * sin(夹角)
Cross(Vb, Va) = |Va| x| Vb| x sin(-夹角)
这里,夹角在 0-180 间时,b 在 a 的右侧,叉乘结果为正数,sin 夹角 = x 分量 / r 半径 x 分量为正
夹角在-180,0 之间时,b 在 a 的左侧,叉乘结果为负数,sin 夹角 = x 分量 / r 半径 x 分量为负

在这个求方位的例子里,只要点乘夹角 <145 度,且 [叉乘 >0 则在右侧,叉乘 <0 则在左侧],就可以判断出全部方位
那么知道这些结论后,即可推出游戏中 2 个角色间的位置关系。

  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3455 回帖 • 166 关注
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 134 关注
  • 夹角
    1 引用

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖 • 3 关注
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 734 关注
  • RYMCU

    RYMCU 致力于打造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。

    4 引用 • 6 回帖 • 54 关注
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 382 关注
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 803 关注
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    93 引用 • 901 回帖 • 2 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 662 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 233 回帖 • 1 关注
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 93 关注
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖 • 1 关注
  • Hibernate

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    39 引用 • 103 回帖 • 719 关注
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    211 引用 • 358 回帖
  • Outlook
    1 引用 • 5 回帖 • 3 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    693 引用 • 537 回帖
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    12 引用 • 54 回帖 • 168 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    20 引用 • 37 回帖 • 570 关注
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 75 关注
  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 700 关注
  • AngularJS

    AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。

    12 引用 • 50 回帖 • 498 关注
  • 负能量

    上帝为你关上了一扇门,然后就去睡觉了....努力不一定能成功,但不努力一定很轻松 (° ー °〃)

    88 引用 • 1235 回帖 • 411 关注
  • 职场

    找到自己的位置,萌新烦恼少。

    127 引用 • 1708 回帖
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    20 引用 • 23 回帖 • 735 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖
  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖
  • OnlyOffice
    4 引用 • 23 关注
  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    6 引用 • 15 回帖 • 45 关注