gpt4 book ai didi

c++ - 中间旋转

转载 作者:行者123 更新时间:2023-11-28 07:33:16 24 4
gpt4 key购买 nike

我有一个图像(假设它是一个简单的矩形)位于我的屏幕左侧,我可以上下移动它。向上移动时,我使用一些简单的三角函数来旋转它,使矩形“指向”屏幕的右上角。向下移动时指向屏幕左下角。

鉴于我的应用程序使用以下坐标系: Coordinate system

我使用下面的代码来实现旋转:

// moving upwards
rotation = -atan2(position.y , res.x - position.x));

// moving downwards
rotation = atan2(res.y - position.y , res.x - position.x));

其中 res 是引用点,position 是矩形图像的位置(左上角)。 (有关 atan2() 的信息:atan2() on cplusplus.com)。

这很好用:它在远离引用点 (res) 时旋转得更多。但是,假设图像一直位于屏幕底部。如果我们向上移动它,它会非常突然地旋转。 我想“介于”这个旋转之间,以便平滑。

突然旋转的意思是:假设矩形在第 n 帧中没有移动:因此它的旋转为 0 度。然后我按下向上箭头,它会计算角度。在帧 n+1 中,角度为 30 度(例如)。这当然不是很顺利。

我的问题清楚吗?我该怎么做?

最佳答案

您可以逐步更改每一帧的角度。要获得非常“平滑”的旋转效果,可以使用

target_angle = ... 
current_angle += (target_angle - current_angle) * smoothing_factor

其中 smoothing_factor 给出 current_angle 收敛到 target_angle 的速率。例如,值为 1 将是瞬时的,值为 0.1 可能会产生平滑效果。

通过这样做,您可能会遇到环绕问题,即从 10 度到 350 度之类的东西会走错路。在这种情况下,使用

target_angle = ... 
current_angle += diff(target_angle, current_angle) * smoothing_factor

在哪里

diff(a, b) {
return atan2(sin(a - b), cos(a - b))
}

这个漂亮的角度差公式取自another question .

关于c++ - 中间旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17239500/

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