Math 将sin计算转换为使用每帧增量

Math 将sin计算转换为使用每帧增量,math,timestamp,trigonometry,timedelta,Math,Timestamp,Trigonometry,Timedelta,我目前有一个使用sin函数更新值的函数,还有一个timeFactor double,用于跟踪程序启动后经过的时间: double timeFactor; double delta; while(running) { delta = currentTime - lastTime; timeFactor += delta; var objectX = sin(timeFactor); } 但是,我需要将此代码转换为使用增量而不是时间因子。 也就是说,为了更新到sin(时间+增量),我只

我目前有一个使用sin函数更新值的函数,还有一个timeFactor double,用于跟踪程序启动后经过的时间:

double timeFactor;
double delta;
while(running) {
  delta = currentTime - lastTime;
  timeFactor += delta;
  var objectX = sin(timeFactor);
}
但是,我需要将此代码转换为使用增量而不是时间因子。
也就是说,为了更新到sin(时间+增量),我只想使用sin(时间)的当前值和根据增量值计算的任何值。
即计算sin(时间+增量)=f(sin(时间),增量)

我该怎么做?

来自数学:
sin(A+B)=sin(A)*cos(B)+cos(A)*sin(B)
cos(A+B)=cos(A)*cos(B)-sin(A)*sin(B)

将sin(A)和cos(A)存储在两个变量中。 然后要更新它们,请使用其中一个的临时副本,否则将使用第一个的新值而不是旧值更新第二个

假设:

  • 持久化objectX存储当前对象,并使用初始sin(timeFactor)进行初始化
  • persistent objectXc存储当前对象,并使用初始cos(TimeFinder)进行初始化
  • 临时objectXt存储objectX的副本
(“persistent”如“在执行更新代码时保持值”, 与“仅在更新代码期间保留值”中的“临时”相反; 这是为了避免使用“全局”属性,这意味着数据设计不佳)

更新代码:

objectXt = objectX;
objectX  = objectX * cos(delta) + objectXc * sin(delta);
objectXc = objectXc* cos(delta) - objectXt * sin(delta);
感谢John Coleman在最初使用的想法中发现了问题
1==sin(A)*sin(A)+cos(A)*cos(A)
那实际上是
sin(时间+增量)=f(sin(时间),增量)
但它在整个周期的50%内失败。
所以我希望这
sin(时间+增量)=f(sin(时间),cos(时间),增量)

也有帮助。

不清楚您想做什么。“将代码转换为使用delta而不是timeFactor”是什么意思?如果您想要
sin(delta)
而不是
sin(timeFactor)
——什么在阻止您?这是否意味着要将sin(timeFactor)与sin(delta)交换?您的意思是要使用其以前的值和
delta
更新
objectX
,而不是使用
timeFactor
?是,我想使用objectX以前的值和delta.sin(A+B)=sina cos B+cos A sin B更新objectX