dimka76 59 3 декабря, 2021 Опубликовано 3 декабря, 2021 · Жалоба Spoiler 16 minutes ago, adnega said: 15 minutes ago, adnega said: void __fastcall TForm1::Button1Click(TObject *Sender) { double t = 0.0; double a = 0.0; double percent = 0.75; double n = 0.0005; Image1->Canvas->FillRect(Image1->ClientRect); while (t < 750.0) { a += percent; if (t > 200.0) { if (percent > 0.3) { percent -= n; n += 0.00001; } } //txPixel(20.0 + t, 480.0 - a, 255, 0, 0); Image1->Canvas->Pixels[0.0 + t][480.0 - a] = clRed; //txPixel(20.0 + t, 480.0 - t, 0, 0, 255); Image1->Canvas->Pixels[0.0 + t][480.0 - t] = clNavy; ++t; } } Круто !!! Спасибо !!! Выходит, что моя задумка изначально была правильная, только с недочетами. А коэффициенты 0.00001 0.0005 вы получается из моего первого сообщения взяли ? Осталось теперь понять как их находить, чтобы время и величина перехода соответствовала заданным требованиям. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 3 декабря, 2021 Опубликовано 3 декабря, 2021 · Жалоба 8 минут назад, dimka76 сказал: Показать содержимое А коэффициенты 0.00001 0.0005 вы получается из моего первого сообщения взяли ? Ваши. Исходник привел ранее. 8 минут назад, dimka76 сказал: Осталось теперь понять как их находить, чтобы время и величина перехода соответствовала заданным требованиям. Самый простой вариант - линейное изменение. Т.е. percent сначала равен 0.75 и сохраняет свое значение до t=200. Затем percent изменяется на dp пока не станет 0.3 Если на это нужно затратить ровно T времени, то dp = (0.3 - 0.75) / T Например, при T=100, dp=-0.0045 На графике обозначены моменты: t=200 когда percent начал изменятся линейно от 0.75 до t=300 когда percent достигнет 0.3 while (t < 750.0) { a += percent; if (t > 200.0) { if (percent > 0.3) { percent -= 0.0045; } } //txPixel(20.0 + t, 480.0 - a, 255, 0, 0); Image1->Canvas->Pixels[0.0 + t][480.0 - a] = clRed; //txPixel(20.0 + t, 480.0 - t, 0, 0, 255); Image1->Canvas->Pixels[0.0 + t][480.0 - t] = clNavy; ++t; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 59 3 декабря, 2021 Опубликовано 3 декабря, 2021 · Жалоба 9 minutes ago, adnega said: Самый простой вариант - линейное изменение. Спасибо. С таким вариантом все понятно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 234 3 декабря, 2021 Опубликовано 3 декабря, 2021 · Жалоба 1 час назад, dimka76 сказал: Не работает Что-то не так делаете. Не может такого графика быть. Если посмотреть на формулу, то можно увидеть, что (1 - (t - tBase) / tMax) на интервале переходного периода будет принимать значения от 1 до 0, а значит (percent + (percentOld - percent) * (1 - (t - tBase) / tMax)) на этом же интервале будет принимать значения от percentOld до percent. Т.е. - наклон любой касательной проведённой к любой точке на этом интервале, должен быть в диапазоне от наклона percentOld до наклона percent. У Вас же почему-то на переходном интервале наклон касательных выходит далеко за этот диапазон. График должен быть таким же, как привёл adnega. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 59 3 декабря, 2021 Опубликовано 3 декабря, 2021 · Жалоба 3 minutes ago, jcxz said: Что-то не так делаете. Не может такого графика быть. Я же график вместе с кодом предоставил. Любой желающий может попробовать ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 234 3 декабря, 2021 Опубликовано 3 декабря, 2021 · Жалоба Да, надо ещё один компонент прибавить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться