【问题标题】:How do I calculate the position on a circle based on a progress value?如何根据进度值计算圆上的位置?
【发布时间】:2020-01-14 18:26:10
【问题描述】:

目前我正在为游戏开发轨道系统。我已经知道了,所以一个对象将根据一个介于 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 的进度?

【问题讨论】:

  • 如果 xAxis != yAxis 你实际上有一个椭圆而不是一个圆。如果您希望您的轨道在物理上准确,您应该查看Kepler's Law

标签: algorithm math trigonometry


【解决方案1】:

第一步:找出给定位置与 y 轴的角度。

第二步:计算你的角度在整个圆(360 度)中所占的比例。

第一步涉及一些三角学,你必须确保根据你所在的象限获得正确的角度类型。那么第二步应该是微不足道的。

您可以查看许多编程语言中可用的 atan2 函数:https://en.wikipedia.org/wiki/Atan2

它给出了点 (x, y) 和正 x 轴之间的角度。因此,在您的情况下,根据您的圆圈开始的位置,您可以将其移动 90 度以获得与正 y 轴的角度。除此之外,它应该可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 2017-01-13
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多