如何根据进度值计算圆上的位置?
How do I calculate the position on a circle based on a progress value?
目前我正在为一款游戏开发轨道系统。我知道了,所以一个对象将根据介于 0.0 和 1.0 之间的进度值(0.5 是圆的一半)沿着一个圆移动。我是这样计算的:
float angle = Mathf.Deg2Rad * 360 * t;
float xPos = Mathf.Sin(angle) * xAxis;
float yPos = Mathf.Cos(angle) * yAxis;
return new Vector3(xPos, yPos, 0.0f);
t 只是 deltatime,xAxis/yAxis 变量是圆的半径。
不过,我目前有点困惑的是,我如何才能根据位置获得围绕圆圈的进展。因此,如果我有一个物体击中圆圈底部,我如何计算它是 0.5 的进度?
第一步:找出给定位置与 y 轴的角度。
第二步:计算你的角度占整圆(360 度)的分数。
第一步涉及一些三角学,你必须确保根据你所在的象限获得正确的角度类型。然后第二步应该是微不足道的。
您可以查看在许多编程语言中可用的 atan2
函数:https://en.wikipedia.org/wiki/Atan2
它给出了一个点(x, y)和正x轴之间的角度。那么在你的情况下,根据你的圆开始的位置,你将它移动 90 度以获得与正 y 轴的角度。除此之外,它应该可以正常工作。
目前我正在为一款游戏开发轨道系统。我知道了,所以一个对象将根据介于 0.0 和 1.0 之间的进度值(0.5 是圆的一半)沿着一个圆移动。我是这样计算的:
float angle = Mathf.Deg2Rad * 360 * t;
float xPos = Mathf.Sin(angle) * xAxis;
float yPos = Mathf.Cos(angle) * yAxis;
return new Vector3(xPos, yPos, 0.0f);
t 只是 deltatime,xAxis/yAxis 变量是圆的半径。 不过,我目前有点困惑的是,我如何才能根据位置获得围绕圆圈的进展。因此,如果我有一个物体击中圆圈底部,我如何计算它是 0.5 的进度?
第一步:找出给定位置与 y 轴的角度。
第二步:计算你的角度占整圆(360 度)的分数。
第一步涉及一些三角学,你必须确保根据你所在的象限获得正确的角度类型。然后第二步应该是微不足道的。
您可以查看在许多编程语言中可用的 atan2
函数:https://en.wikipedia.org/wiki/Atan2
它给出了一个点(x, y)和正x轴之间的角度。那么在你的情况下,根据你的圆开始的位置,你将它移动 90 度以获得与正 y 轴的角度。除此之外,它应该可以正常工作。