怎么获得一个当前向量朝向相反的向量值?

「已注销」 2015-12-19 11:11:40
比如当前对象朝向前方,我想获得这个向量相反朝向的一个向量,怎么获得?求高手帮助!
...全文
3190 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
俺的天下 2019-09-23
  • 打赏
  • 举报
回复 2
* -1 就可以了 有啥疑问吗?
为食猫 2019-08-26
  • 打赏
  • 举报
回复
3维世界计算向量基本都是计算两个点的方向和距离
所以你需获得三维世界里的两个位置数据,就可以开始计算
计算两个点的向量关系,是用减法
比如AB两个点
从A到B.则B-A
从B到A.则A-B
用汉语表达就是终点减去起点
他们是同一条直线,但不同方向,应该就是你所说的反向向量值关系
距离*向量=向量的前进距离,即偏移量

当前对象往前方看...
那么你就把你的position*2得到一个Vector3偏移量 B ,长度要多少你就乘多少
然后用终点减去起点 你的position-B,就可以得出一个B点往当前对象看的向量

如果你已经有两个点,那么就直接减吧.

顺便说说我的理解
三维坐标世界里每一个向量都要理解成一条线的终点.方向为从世界坐标0点到这个点.
其实它就是一个点,并且有一个方向.这就是我理解的向量.
那么很容易就得出
A+B的意思就是从B点出发以A的方向走,而B+A计算出来的也是相同的点,但是方向不一样.如果你不再去乘他,那么A+B B+A都是一样的
A-B的意思就是从B点走向A点,减法就更容易理解了,就是互相距离.方向不一样.只是减法的两种情况是方向相反.
品茶 2016-08-05
  • 打赏
  • 举报
回复
按照你7楼的方法 你确定得到不是原向量? 既然你说问题解决了 我只能认为你是为了处理类似于光照方向的零值消隐 只所以解决了是因为在你绕y轴旋转180°后 消隐方向并没有随着你之后的将xz坐标取反的操作而改变
品茶 2016-08-04
  • 打赏
  • 举报
回复
你将向量的起点终点坐标全部乘以-1 看朝向改了没 你拿零向量举例 我才当你的世界坐标系的原点在向量中心的 当只有一个值(x,y,z)表示向量的时候默认起点都是原点的 而用两个值(x1,y1,z1)和(x2,y2,z2)表示向量 这两个值既可以表示为世界坐标系下的两个向量 也可以表示为一个向量的起点和终点 当表示为起点和终点的时候 世界坐标系的原点在不在向量中心都无所谓 而零向量比较特殊 因为起点和终点重合 所以朝向有着无数种可能 所以虽然你说的“但是他的x轴是和前者正好相反的,相当于沿着y轴旋转了180度”这里明显错误 我还是按照我的理解给出了楼上没有的回答 一个向量(x,y,z)沿y轴旋转其结果应该是y不变x值和z值相反 而不是只有一个x值(不是x轴)相反 从你结贴给分的结果来看 你还是没有理解(x,y,z)什么时候表示向量 什么时候表示坐标 楼下zxx43嘲讽的明显不是我 但你这样给分 我就知道你自己不理解 还认为他嘲讽的是我了
zxx43 2016-01-04
  • 打赏
  • 举报
回复
码农不懂数学的典型例子
品茶 2016-01-03
  • 打赏
  • 举报
回复
xyz分别乘以-1 (1,1,1)朝向相反的向量就是(-1,-1,-1) 简单的说就是1楼说的那样 你的理解有误 (1,1,1)可以看作是坐标 也可以看作是向量 看作向量的时候指的是从原点(0,0,0)指向(1,1,1) 所以这个向量的长度有了:√3 方向也有了:和xyz正方向夹角全部都是arctg√2 而向量(-1,-1,-1)长度还是√3 方向则是和xyz负方向夹角全部都是arctg√2 很明显(1,1,1)和(-1,-1,-1)互为反向量 而且 你要知道 向量乘以矢量结果还是向量
Poopaye 2016-01-01
  • 打赏
  • 举报
回复
引用 5 楼 qq_33081055 的回复:
最后那句有意思吗?另外如果有p0q我还用来这问...向量加减法还是懂的,也许是我问题没表达清楚,我想问的是(在unity中向量的z轴是朝向)一个正常的向量假设是0,0,0,然后我想获得一个向量,也是0,0,0,但是他的x轴是和前者正好相反的,相当于沿着y轴旋转了180度,话说你最后那句说的令人很反感,论坛是交流的地方,用贬低别人的方式秀可能有的优越不妥吧
向量是Vector 从这楼的描述是要旋转一个Transform 是你自己概念不清
alienyu0352 2015-12-31
  • 打赏
  • 举报
回复
三维坐标系,绕着y旋转180,将x,z坐标取反
「已注销」 2015-12-29
  • 打赏
  • 举报
回复
上面打错字j z而不是x,问题前段时间就通过查api解决了
「已注销」 2015-12-29
  • 打赏
  • 举报
回复
引用 4 楼 Minikinfish 的回复:
你的向量有起点,终点,是吧, 起点 p0, 终点p1, 向量 p = p1-p0; 向量 p的反方向 vp = -p 向量 vp 的起点 vp0 = p0 向量 vp 的终点 vp1 = p0+vp = p0-p = p0-(p1-p0) = 2p0-p1; 感觉在教小学生呢。。。。。。
最后那句有意思吗?另外如果有p0q我还用来这问...向量加减法还是懂的,也许是我问题没表达清楚,我想问的是(在unity中向量的z轴是朝向)一个正常的向量假设是0,0,0,然后我想获得一个向量,也是0,0,0,但是他的x轴是和前者正好相反的,相当于沿着y轴旋转了180度,话说你最后那句说的令人很反感,论坛是交流的地方,用贬低别人的方式秀可能有的优越不妥吧
Minikinfish 2015-12-25
  • 打赏
  • 举报
回复
你的向量有起点,终点,是吧, 起点 p0, 终点p1, 向量 p = p1-p0; 向量 p的反方向 vp = -p 向量 vp 的起点 vp0 = p0 向量 vp 的终点 vp1 = p0+vp = p0-p = p0-(p1-p0) = 2p0-p1; 感觉在教小学生呢。。。。。。
Minikinfish 2015-12-25
  • 打赏
  • 举报
回复
引用 2 楼 qq_33081055 的回复:
引用 1 楼 wolf96 的回复:
那个向量的负值
负值是错误的,负值无法改变朝向...只会改变坐标
兄弟,坐标与朝向有区别吗?
「已注销」 2015-12-24
  • 打赏
  • 举报
回复
引用 1 楼 wolf96 的回复:
那个向量的负值
负值是错误的,负值无法改变朝向...只会改变坐标
wolf96 2015-12-21
  • 打赏
  • 举报
回复
那个向量的负值
Unity⼈⼯智能AI编程知识 群组⾏为: 群组⾏为: 模拟鸟群⾏⾛或⼈群⾏⾛过程的称之为群组⾏为 分散 、队列 、 聚集 分散:在群体内,个体必须与其他个体之间保持⼀定的距离,当⼩于那个距离时,就要分散开来。 实现原理:确定需要分散的范围separationDistance,获取在该范围内的个体,计算出当前个体与(当前个体的周围个体)的相反作⽤⼒的 合⼒,即 合⼒ += (当前个体位置-其他个体位置); 但是,由于我们是想要当前个体位置与其他个体位置的距离越⼩,产⽣的相反作⽤⼒越⼤,所以 相反作⽤⼒= (当前个体位置 -其他个体位 置).normalized / (当前个体位置-其他个体位置).magnitude ,这样就能够距离越⼩,产⽣的相反作⽤⼒越⼤,反之越⼩。(注意:个⼈ 之间的距离不能⼩于1,不然会发⽣异常,也就是除数会⽆穷⼩!导致分散⼒⽆穷⼤!) 相反作⽤⼒的总体意思就是 当前个体位置-其他个体位置,即得到⼀个 其他个体位置 指向 当前个体位置的 三维向量 这个相加之后的⼒就是分散合⼒,⾄于我上⾯说的当距离越⼩,作⽤⼒越⼤是根据实际需求来决定的。 这样,我们得到了⼀个分散合⼒ 队列:在群体内,个体的朝向必须保持与队列朝向⼀致 实现原理: 队列朝向的获取:队列指的是 当前个体的周围的个体的平均朝向,那么我们⼀样根据上⾯的相同的原理获取到周围个体,然后周围个体的 朝向就是transform.forward 将这些周围个体朝向 全部相加起来,再求平均,即得到了队列朝向。 ⽽我们想要的⽬的是 将当前朝向 逐渐 朝向 队列朝向。那么我们需要加⼀个⼒,这个⼒叫队列趋向⼒ 我们将队列朝向向量-当前个体朝向向量当前个体朝向向量是transform.forward,这样获取到⼀个队列趋向⼒,为什么会要这样算?因为 队列朝向向量-当前个体朝向向量是根据物理上的四边形原则,即合⼒、分⼒的⼀个原理来得出的。如果我们只是将队列朝向向量当做队列 趋向⼒的话,这样变化幅度很⼩,⽽我们直接计算出⼀个能够让当前个体受⼒变为队列朝向的分⼒,变化幅度就很⼤。若还是不理解的话, 可以看下物理的合⼒、分⼒的解释以及四边形原则,在这⾥ 队列朝向就是合⼒,当前个体原本的受⼒和队列趋向⼒都是分⼒,2个分⼒合起 来就是⼀个合⼒,即 当前个体原本的受⼒(当前朝向向量)+队列趋向⼒ = 队列朝向向量 ,这样我们也能推导出: 队列趋向⼒=队列朝向向 量-当前朝向向量。 这样,我们就得到了⼀个队列趋向⼒ 聚集:与分散相反原理。 我们在分散不发⽣的情况下才产⽣聚集,⼀样地获取周围个体,但是我们不是计算出聚集合⼒什么的,⽽是计算出周围个体的中⼼点,中⼼ 点计算⽅法:周围个体的位置之和/周围个体数量 然后,中⼼点-当前个体位置=当前个体位置 朝向 中⼼点 的向量,然后这个向量就是我们的聚集⼒ 如果对聚集⼒的⼤⼩有点不满意的话,推荐:将聚集⼒的⼤⼩设置为当前速度的⼤⼩ 经过以上说明,我们得到了三个⼒:分散合⼒、队列趋向⼒、聚集⼒,这三个⼒都可以分别设置⼀个权重,来调整它们的影响,加权重的意 思就是给⼒乘以⼀个 然后,我们将这三个⼒相加得到了⼀个 最终合⼒,我们是⽤这个最终合⼒来影响当前物体的 根据⽜顿第⼆定律:F=ma , 故 a= F/m (F是最终合⼒,a是加速度(m/s^2) m是质量(kg) ) 所以,在Update⾥⾯我们可以通过这个公式计算出 最终合⼒对物体产⽣的加速度a 当前速度+=a*Time.deltaTime 这样处理加速度对当前速度的影响,当前速度是⼀个三维向量 我们通过使⽤Quaternion.Slerp(transform.rotation,⽬标四元数, 变化系数)来逐渐旋转当前个体的朝向,⾯向当前速度的朝向,⽬标四元数 ⽤Quaternion.LookRotation(当前速度)来获取。 移动的话可以⽤Translate 直接朝向当前个体的前⽅forward来移动,速度⼤⼩为当前速度⼤⼩ (2019/05/06更新)在以上基础上,新增2个⼒:移动恒⼒(可选)、⽬标趋向⼒(可选)。 移动恒⼒ = 当前速度.normalized * 初始速度⼤⼩(⽤户⾃定义速度⼤⼩) ⽬标趋向⼒ = (⾃⾝指向⽬标向量.normalized - 当前朝向(transform.forward)) * ⽬标趋向速度(⽤户⾃定义速度⼤⼩) 注意:当前速度是⼀个三维向量Vector3,当前朝向是transform.forward,请勿以为当前速度就是当前朝向当前速度会影响当前朝向。 FSM有限状态机: 有限状态机: 个⼈理解:FSM就是⼀个控制状态切换的集中处理器,⽤⼀个FSMSystem管理着所有FSMState,每个FSMState(状态)都有它⾃⾝对应 的转换事件(

2,543

社区成员

发帖
与我相关
我的任务
社区描述
Unity3D相关内容讨论专区
游戏unity 技术论坛(原bbs)
社区管理员
  • Unity3D
  • 芝麻粒儿
  • 「已注销」
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

Unity3D社区公告:

  1. 社区致力于解决各种Unity3D相关的“疑难杂症”。
  2. 社区不允许发布与Unity3D或相关技术无关内容。
  3. 社区版主邀请各位一道为打造优秀社区不懈努力。

试试用AI创作助手写篇文章吧