Я пытаюсь добавить эффект затухания в мою форму, вручную изменяя непрозрачность формы, но у меня возникают некоторые проблемы с вычислением правильного значения для увеличения на значение непрозрачности формы.
Я знаю, что мог бы использовать API AnimateWindow, но он демонстрирует некоторое неожиданное поведение, и я бы предпочел сделать это вручную в любом случае, чтобы избежать любого вызова p /, чтобы позже я мог использовать его в Mono.
Мое приложение поддерживает скорости от 1 до 10. И я вручную рассчитал, что для скорости 1 (самая медленная) я должен увеличить непрозрачность на 0,005, а для скорости 10 (самая быстрая) я должен увеличить на 0,1. Что касается скоростей от 1 до 10, я использовал следующее выражение для вычисления правильного значения:
double opSpeed = (((0.1 - 0.005) * (10 - X)) / (1 - 10)) + 0.1; // X = [1, 10]
Я подумал, что это может дать мне линейное значение, и это будет нормально. Однако для X, равного 4 и выше, это уже слишком быстро. Больше, чем должно быть. Я имею в виду, скорости между 7 и 10, я едва вижу разницу, и скорость анимации с этими значениями должна быть немного больше разнесены
Обратите внимание, что я все еще хочу, чтобы самый быстрый прирост был 0,1, а самый медленный 0,005. Но мне нужно, чтобы все остальные были линейными между ними.
Что я делаю не так?
РЕДАКТИРОВАТЬ: На самом деле имеет смысл, почему это работает, например, для фиксированного интервала между приращениями, скажем, несколько миллисекунд, и с уравнением выше, если X = 10, то opSpeed = 0,1 и если X = 5, то opSpeed = 0,47. Если мы подумаем об этом, значение 0,1 будет повторяться 10 раз, а значение 0,47 - только двойным. Для такого небольшого интервала, составляющего всего несколько миллисекунд, разница между этими значениями не так велика, чтобы различать скорости от 5 до 10.