查看: 1191|回复: 2
打印 上一主题 下一主题

[其他] 从一个对象到另一个对象的方向和距离

[复制链接]

2722

主题

42

听众

3万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
38268
精华
111

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2015-1-31 18:30:01 |只看该作者 |倒序浏览
从一个对象到另一个对象的方向和距离

将空间的一个点与另一个点相减,所得结果为从一个对象“指向”另一个对象的向量。

// Gets a vector that points from the player's position to the target's.var heading = target.position - player.position;

此向量指向目标对象方向,其量值等于两点之间的距离。这通常需要使用单位向量来指示其与目标的方向和距离(如抛射子弹)。

对象之间的距离等于指向向量的量值,将该向量除以自身量值即为单位向量:

var distance = heading.magnitude;var direction = heading / distance;  // This is now the normalized direction.

最好不要将此方法同时用于量值和单位化属性,因为这两者都会占用很大的 CPU(两者都需要计算平方根)。
如果只需比较距离(如执行大致检查),则完全无需计算量值。sqrMagnitude 属性将计算量值的平方值,计算方法与量值相似,但无需消耗时间计算平方根。这样,就可以比较量值的平方值与距离的平方值,而非量值和已知的距离:

if (heading.sqrMagnitude < maxRange * maxRange) {        // Target is within range.}
相对于比较真实的量值,此方法效率更高。

有时候,我们需要计算地上的点与目标之间的距离。例如,想象一名站在地上的玩家需要碰到悬浮在空中的目标。如果将目标位置与玩家位置的坐标值相减,则结果向量将向上指向目标。此变换不适合为此玩家定向,因为他也将指向上方;真正需要的是一个从玩家位置指向目标正下方的地面位置的向量。只需将 Y 轴坐标设为 0,再将两个向量相减即可计算出两者的距离:-

var heading = target.position - player.position;heading.y = 0;        // This is the overground heading.
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

3

主题

1

听众

6189

积分

高级设计师

Rank: 6Rank: 6

纳金币
370
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2015-1-31 18:49:28 |只看该作者
Thanks for sharing!
回复

使用道具 举报

100

主题

3

听众

7683

积分

高级设计师

Rank: 6Rank: 6

纳金币
2378
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

板凳
发表于 2015-1-31 20:52:44 |只看该作者
感谢分享。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2025-7-30 01:18 , Processed in 0.074341 second(s), 28 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部