Как бы я сменил уравнение для модуляции числа в строке на то, которое модулирует синусоиду?
Я пытаюсь модулировать альфа-значение в приложении Java, которое я строю на Android. Прямо сейчас это выглядит так:
if (goingUp) {
newAlpha = oldAlpha + rateOfChange;
if (newAlpha > maxAlpha) {
newAlpha = maxAlpha;
goingUp = false;
}
} else {
newAlpha = oldAlpha - rateOfChange;
if (newAlpha < minAlpha) {
newAlpha = minAlpha;
goingUp = true;
}
}
Где rateOfChange - произвольное значение типа int, которое не может быть больше maxAlpha. Уравнение оценивает каждый тик в потоке и не зависит от времени.
Есть ли способ, используя только переменные, указанные + Math.PI и другие элементы Math (я предполагаю, что там будет Math.Sine), чтобы newAlpha был числом на синусе?
Я думаю, что min и max будут усилителем волны, а rateOfChange будет продуктом функции синуса, я просто не могу понять, как все это сочетается.
3 ответа
Ваше уравнение будет выглядеть так:
y - вертикальное положение в момент времени t, A - амплитуда, f - частота, а t - время (или отметки часов Android).
Основываясь на общем уравнении Даффимо, я должен был вернуться к своим дням TI-83 (буквально, поставить приложение на моем телефоне). Но я смог собрать все кусочки вместе, чтобы получилось так:
newAlpha = (int)((alphaMax - alphaMin) * 0.5 * Math.sin(rateOfChange * ticks + randomPhaseOffset) + (alphaMin + (alphaMax - alphaMin) * 0.5))
Почему ты не считаешь это?
... в верхней части вашего определения класса, включите: -
import java.lang.*;
... и в вашей функции после назначения newAlpha,
newAlpha = Math.sin(newAlpha%(2*Math.PI));
если вы хотите, чтобы newAlpha находился в диапазоне [-1,1], так как функция sin()
ИЛИ ЖЕ
... в вашей функции, после назначения newAlpha,
newAlpha = Math.asin(newAlpha%3 - 1);
если вы хотите, чтобы newAlpha находился в диапазоне [-1,1], так как функция sin()
Я не уверен, какой тип данных у вашей newAlpha, но я собираюсь предположить, что это не повлияет на ответ для этого выражения - как newAlpha типа double.
Обычно это способ получить число в определенном диапазоне, в котором вы применяете модуль к любому выражению, которое у вас есть, т.е. expr%N приводит к числу в диапазоне [0,N-1].
Надеюсь это поможет.