【问题标题】:How to test if a vector3 is inside a cube that is rotated around a specific point如何测试vector3是否在围绕特定点旋转的立方体内
【发布时间】:2019-06-18 20:42:06
【问题描述】:

我正在开发一款游戏并拥有以下信息

玩家位置 - Vector3
玩家轮换 - 浮动(辐射)
敌人位置 - Vector3
玩家攻击框——长宽高

我需要做的是测试敌人位置是否在玩家攻击框内。我知道我要么必须围绕玩家旋转攻击箱,要么围绕玩家旋转敌人位置然后测试它。旋转只有从左到右,没有上下。这就是为什么它是一个单一的 Radiant 值。

我尝试编写玩家攻击框和敌人的旋转,但我觉得我没有足够的矢量数学知识来正确地提出解决方案。

【问题讨论】:

标签: c# math vector


【解决方案1】:

据我了解,确定敌人是否在以玩家为中心的旋转(围绕 z 轴)平行六面体内部就足够了

我们可以将敌人坐标转换为玩家坐标系。要执行此任务,我们应该进行平移(以提供玩家在原点的位置),然后通过反向角度进行旋转

newEnemyX = (enemy.x - player.x) * Cos(P_Rotation) + (enemy.y - player.y) * Sin(P_Rotation)
newEnemyY = -(enemy.x - player.x) * Sin(P_Rotation) + (enemy.y - player.y) * Cos(P_Rotation)
newEnemyZ = enemy.z - player.z

现在比较(我假设长-宽-高对应x,y,z)

 -length/2 <= newEnemyX <= length/2
 -width/2 <= newEnemyY <= width/2
 -height/2 <= newEnemyZ <= height/2

【讨论】:

    猜你喜欢
    • 2012-05-31
    • 2017-02-21
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    相关资源
    最近更新 更多