由于某些奇怪的原因,下面的代码不会产生预期的效果。正弦波很好而且功能齐全,下面的代码片段完美无缺,除了向前移动,这是很多的。
我正在使用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;
}
答案 0 :(得分:0)
单点解决方案:)只需:
float forwardOffsetNow = forwardOffset * (millis() / 1000.);//mind the dot after 1000
还有:
float newPosition = halfway - (amplitude * sin(omega * millis() / 1000.) / 2);
这称为整数除法,在Processing的wiki疑难解答中有详细记录,here。
可以通过在数字后使用点或f来避免,例如:
millis()/1000.;
或
millis()/1000.0;
或
millis()/1000f;
一切都会奏效。