统一';Java中的s-Mathf.PingPong

统一';Java中的s-Mathf.PingPong,java,unity3d,Java,Unity3d,我试图在java中创建Unity的Mathf.PingPong的实现。(Mathf.PingPong参考:docs.unity3d.com/ScriptReference/Mathf.PingPong.html)。到目前为止,我已经创建了一个简单的版本,但是它使用了sin()函数,因此速度慢且流畅 到目前为止,我所拥有的: public float pingpong(float max, float dist) { return lerp(0, max, sin(radians((max/d

我试图在java中创建Unity的Mathf.PingPong的实现。(Mathf.PingPong参考:docs.unity3d.com/ScriptReference/Mathf.PingPong.html)。到目前为止,我已经创建了一个简单的版本,但是它使用了
sin()
函数,因此速度慢且流畅

到目前为止,我所拥有的:

public float pingpong(float max, float dist) {
  return lerp(0, max, sin(radians((max/dist)*360.0))/2.0+0.5);
}
这a)不起作用,它无法对值进行乒乓,b)使用
sin()返回值

注:
我使用的库添加了简化的函数,比如sin()和radians()

好的,我自己找到了,据我所知,它工作得非常完美。这是:

public float pingpong(float start, float stop, float dist) {
  float d = stop-start;
  if ((int)(Math.abs(dist)/d) % 2 == 0) {
    return start + Math.abs(dist)%d;
  } else {
    return stop - Math.abs(dist)%d;
  }
}

我从Unity的版本中稍微修改了它,所以它可以有一个起始值。需要注意的一点是
dist
是距离
起点的距离(即,如果起点为5,而你想打乒乓球的距离为8,则距离为3)。它也适用于负数和浮点数。

需要注意的一点是,如果
start
stop
是相同的,它将给出一个除以0的错误