将位置轴转换为时间的公式

时间:2017-05-19 10:12:48

标签: c# math unity3d

我有一个我正在以圆形移动的立方体(带水平键输入)低于建议的代码。

public class Oscillator : MonoBehaviour {
    float timeCounter = 0;

    float speed,width, height;

    public float yPosition = 30;
    // Use this for initialization
    void Start () {
        speed = 2; width = 10; height = 10;
    }

    // Update is called once per frame
    void Update () {

        timeCounter += Time.deltaTime * speed * Input.GetAxis("Horizontal");
        float x = Mathf.Sin (timeCounter)* height; 
        float y = yPosition;
        float z = Mathf.Cos (timeCounter) * width;
        transform.position = new Vector3 (x, y, z);

    }
}

现在我的物体正在以圆形移动,这很好。现在我想将我的物体运动转化为时间。 让我们假设

如果我的对象x位置是1那么它应该给我时间1.0

如果它是1.5那么它应该给我1.5

根据我对象的x位置(或可能是z)增加或减少。

我记录了我的对象的x位置,该位置从0到9.999开始然后变为减0,然后变为-1到-9然后变为减小0并且到达其初始位置。这个圆形运动x值对我来说很奇怪,我无法形成任何可以将我的x位置转换为时间的公式。 请问这个纯粹的数学和三维数学问题可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试以下方法:

获取圆的原点和圆的0之间的向量,如时钟上的12。这个是不变的。

然后你有圆的原点和当前点之间的向量。

尝试以下方法:

Vector3 from = new Vector3(0,0,1); / This is your 12 
Vector3 to = GetCurrentVector();
float angle = Quaternion.FromToRotation(Vector3.up, to - from).eulerAngles.z;
Debug.Log(angle / 360f);