Animation 线性动画问题

Animation 线性动画问题,animation,processing,Animation,Processing,出于某种奇怪的原因,下面的代码没有产生预期的效果。正弦波很好,功能也很好,下面的代码片段工作得很好,除了向前的运动,这是令人兴奋的 我使用millis()和除以1000来转换为秒,但是效果仍然产生了我使用second()函数所期望的形式——每1秒向前移动的正弦波。我希望线条在水平方向平滑移动,就像正弦波线条在垂直方向移动一样。我做错了什么 int cyclesBeforeStopping = 4; int distanceBeforeStopping = 400; float frequen

出于某种奇怪的原因,下面的代码没有产生预期的效果。正弦波很好,功能也很好,下面的代码片段工作得很好,除了向前的运动,这是令人兴奋的

我使用millis()和除以1000来转换为秒,但是效果仍然产生了我使用second()函数所期望的形式——每1秒向前移动的正弦波。我希望线条在水平方向平滑移动,就像正弦波线条在垂直方向移动一样。我做错了什么

int cyclesBeforeStopping = 4;
int distanceBeforeStopping = 400; 

float frequency = 0.2; // in Hz
float peak = 25; // Highest point of wave
float trough = 275; // Lowest point of wave
float amplitudeOffset;
float forwardOffset;

float timeUntilStop = (1 / frequency) * cyclesBeforeStopping;

void setup(){    
  size(600,300);
  frameRate(50);

  forwardOffset = ForwardOffset();
}

void draw(){  
  background(255);

  float forwardOffsetNow = forwardOffset * (millis() / 1000);

  // Guidelines
  line(50 + forwardOffsetNow, peak, 100 + forwardOffsetNow, peak);
  line(50 + forwardOffsetNow, trough, 100 + forwardOffsetNow, trough);

  // Sine line
  float newPosition = NewPosition();
  line(50 + forwardOffsetNow, newPosition, 100 + forwardOffsetNow, newPosition);
}

float ForwardOffset() {
  float forwardOffsetVar = (distanceBeforeStopping) / timeUntilStop;
  return forwardOffsetVar;
}

float NewPosition() {
  float omega = TWO_PI * frequency;
  float amplitude = trough - peak;
  float halfway = peak + amplitude / 2;

  float newPosition = halfway - (amplitude * sin(omega * millis() / 1000) / 2);

  return newPosition;
}
一点解决方案:)只需执行以下操作:

而且:

float newPosition = halfway - (amplitude * sin(omega * millis() / 1000.) / 2);
这被称为整数除法,在Processing的wiki疑难解答中有很好的记录

可以通过在数字后使用点或f来避免,如:

millis()/1000.;


所有这些都会起作用。

结果是
millis()/1000!==毫秒()*0.001
。无论出于何种原因,除法似乎将一个四舍五入的数字输出为一个整数,而相乘则不会四舍五入。这确实回答了我的问题,但在我知道为什么计算会这样做之前,我不会将这个问题标记为已回答。如果有人知道为什么会发生这种情况,那么知道为什么会发生真的很有趣!冠军的回答!多谢各位
millis()/1000.;
millis()/1000.0;
millis()/1000f;