I have a circle being drawn at a certain position. I can move it just fine with speed set to 10f but when it starts to circle it becomes extremely fast. Its obviously not moving at (units/second) I’m not sure whats going on. I thought that the archSpeed needed to be in radians or something, that slowed it down – still not right though.
Here’s the Circle Arc Equation I’m basing off of:
s = r * theta
Here are the functions I’m using:
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);
}
Your
angleSpeedformula looks wrong.I’d work it out first by saying What is the distance I travel in that time. The answer as you already know is
speed*deltaTime. Now you have a distance you can work out the angle by using the arc forumla that saysarclength = radius*angle. Soangle = arclength/radius.Put these two together to get
This will be in radians of course.
Essentially this boils down to the fact you were multiplying by radius instead of dividing by it (looking at it in terms of units would have helped spot this but that is outside the scope of a programming forum).