По какой-то нечетной причине приведенный ниже код не дает желаемого эффекта. Синусоида отлично и функциональна, а фрагмент кода ниже отлично работает, за исключением движения вперед, которое является толстым.Проблема с линейной анимацией
Я использую 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;
}
Оказывается, что 'millis()/1000! == millis() * 0.001'. По какой-то причине деление, кажется, выводит округленное число до целого числа, тогда как умножение не округляет. Это отвечает на мой вопрос, но я не стану отмечать этот вопрос как ответ, пока не узнаю, почему расчеты ведут себя таким образом. Если кто-нибудь знает, почему это происходит, было бы действительно интересно узнать, почему! –