我在某个位置画了一个圆圈。我可以在速度设置为10f的情况下将其移动得很好但是当它开始循环时它变得非常快。它显然没有移动(单位/秒)我不知道最近发生了什么。我认为archSpeed
需要以弧度或其他东西为单位,这会减慢速度 - 但仍然不正确。
这是我基于的圆弧方程:
s = r * theta
以下是我正在使用的功能:
private void moveOut(double deltaTime)
{
SetPosition(x += direction * speed * deltaTime, y, 0);
if (x - (direction * GetWidth() / 2f) >= centerX + radius + GetWidth() / 2f)
{
//onOutside = true;
}
Log.d(TAG, "moving out");
}
private void circleCenter(double deltaTime)
{
float angleSpeed = (float) (radius * (speed * Math.PI / 180) * deltaTime);
currentAngle += angleSpeed;
if (currentAngle >= 2 * Math.PI)
{
currentAngle = (float) (2 * Math.PI - currentAngle);
}
SetPosition(centerX + radius * FloatMath.cos(currentAngle), centerY + radius * FloatMath.sin(currentAngle), 0);
}
答案 0 :(得分:1)
您的angleSpeed
公式看起来不对。
我首先说出我在那段时间旅行的距离是多少。您已经知道的答案是speed*deltaTime
。现在你有一个距离你可以通过使用arclength = radius*angle
的arc论坛来计算出角度。所以angle = arclength/radius
。
将这两者放在一起
angle = speed*deltaTime/radius
当然,这将是弧度。
基本上,这归结为你乘以半径而不是除以它的事实(以单位来看它会帮助发现这一点,但这超出了编程论坛的范围)。