gpt4 book ai didi

相对于旋转的矢量运动

转载 作者:行者123 更新时间:2023-12-01 01:20:15 25 4
gpt4 key购买 nike

假设我有一个向量 (x,y),它通过旋转与原点对齐(例如,向上指向 30 度)。

如果我想将该向量相对于方向移动一个单位(因此,一个单位向前向上 30 度),我该怎么做?

我正在努力将一个简单的第三人称游戏放在一起,我希望能够旋转角色并将其向前移动,而不管旋转如何,我对如何做到这一点有点迷茫。

编辑:

回答完这个问题后,我继续研究如何获得向后、向左和向右移动,所以我想如果有人需要帮助,我会把它贴在这里以供引用。

鉴于 Gunther2 的代码,
要获得向后运动,只需从当前位置减去位移:

position -= displacement;

要获得左运动,请将位移变量更改为
displacement.x = (float)Math.Sin(angle + PI/2); 
displacement.y = (float)Math.Cos(angle + PI/2);

如果 Sin/Cos 接受度数而不是弧度,则将 PI/2 替换为 90。

然后减去位移:
position -= displacement;

要获得正确的运动,只需执行相同的步骤,但添加新位移:
position += displacement;

最佳答案

首先,您需要一个表示角度的向量:

Vector2 displacement;
displacement.x = (float)Math.Sin(angle);
displacement.y = (float)Math.Cos(angle);

然后,由于此向量 (x,y) 的长度始终为 1,因此您将其乘以旅行的距离。如果你想移动 1 的距离,那么 X 和 Y 已经是它们需要的大小。
displacement *= speed;  // Assuming your Vector2 *= operator supports a scalar

将位移添加到当前位置:
position += displacement;

关于相对于旋转的矢量运动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9807939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com