0

奇妙な理由により、以下のコードでは目的の効果が得られません。正弦波は問題なく機能しており、以下のコード スニペットは完全に機能しますが、前方への動きは軽快です。

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;
}
4

1 に答える 1