Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2015.03.15;
Скачать: CL | DM;

Вниз

Помогите с формулой   Найти похожие ветки 

 
Борщи   (2014-07-31 17:26) [0]

Всем здравия.

Делаю вот такую вещь.

Есть нарисованный прямоугольник.
Если мы навели на него курсор - он плавно окрашивается в цвет, где интенсивность цвета измеряется от 0.0 до 1.0.

Если отвели, то от также плавно "сбрасывает" цвет.

Переменная DurationEnter содержит длительность в миллисекундах до того, как произойдет окончательное окрашивание прямоугольника.

Допустим это 600 мс. (Константа DURATION_ENTER)

Т.е. наводим курсор, проходит 600 мс. и прямоугольник полностью окрасился.

Переменная DurationLeave содержит длительность в миллисекундах того, сколько будет длится "сбрасывание" цвета.

Т.е. наводим курсор, проходит не 600 мс. а скажем 200 мс, отводим курсор, то DurationLeave будет равно 200.

Есть функция GetColorIntensive(), которая возвращает число от 0.0 до 1.0.
Используется для установки интенсивности окрашивания прямоугольника.

GetColorIntensive() при окрашивании (Когда курсор навели) рассчитывается от значения DurationEnter.

Так:


function GetColorIntensive(): Single
begin
  Result:= (DurationEnter / DURATION_ENTER);
end;


Вопрос в том, что я не знаю как сделать GetColorIntensive() при сбрасывании цвета (Когда курсор отвели)

Т.е. GetColorIntensive() должно вернуть число от 0.0 до 1.0, что она вернет при значении DurationLeave = 200?
Если при DurationLeave = DURATION_ENTER вернет 1.0?

По какой формуле привести эту соразмерность, что-то туплю?


 
Борщи   (2014-07-31 17:29) [1]

Т.е. в промежуток 0..600 вернет соотношение 0.0..1.0.
Промежуток 0..200 также вернет соотношение 0.0..1.0, но это не то.


 
junglecat   (2014-07-31 17:38) [2]

не понятно, в чем проблема.
Если переменная enter увеличивается, а leave - уменьшается, то и так все будет нормально
DurationEnter = 0
...
DurationEnter = 200 увели курсор, интенсивность = 0.3
DurationLeave = 200
...
DurationLeave = 0 интенсивность 0


 
junglecat   (2014-07-31 17:45) [3]

кстати, а зачем вообще 2 переменные?


 
Борщи   (2014-07-31 18:14) [4]


> junglecat   (31.07.14 17:45) [3]
>
> кстати, а зачем вообще 2 переменные?


так удобней и наглядней


> junglecat   (31.07.14 17:38) [2]
> DurationEnter = 200 увели курсор, интенсивность = 0.3


Мне нужно, чтобы, когда 200 плавно уменьшается к 0, получить правильную интенсивность цвета от 0.0. до 1.0.

Что-то додуматься не могу.


 
junglecat   (2014-07-31 18:19) [5]

function GetColorIntensive(): Single
begin
 Result:= (DurationEnter / MaxDuration);
end;

enter()
begin
 MaxDuration := DURATION_ENTER;
 начинаем увеличивать DurationEnter;
end;

leave()
begin
 MaxDuration := DurationEnter;
 DurationEnter := 0;
 начинаем увеличивать DurationEnter;
end;


 
MBo ©   (2014-07-31 19:08) [6]

график цвет/время нарисуй, тогда вопрос может проясниться


 
Д   (2014-08-01 22:40) [7]

var
 FCurrentIntensive: Double = 0;

Timer.Interval := 50; // Частота анимации, 1000/50 = 20 перерисовок в секунду

Пока курсор над:
 if FCurrentIntensive < 1 then
 begin
    FCurrentIntensive := FCurrentIntensive + Timer.Interval / DurationEnter;
    if FCurrentIntensive > 1 then
      FCurrentIntensive := 1;
    Invalidate;
 end;

Когда курсор не над:
On MouseOver:
 if FCurrentIntensive > 0 then
 begin
    FCurrentIntensive := FCurrentIntensive - Timer.Interval / DurationLeave;
    if FCurrentIntensive < 0 then
      FCurrentIntensive := 0;
    Invalidate;
 end;

P.S. И да, надо следить за тем, чтобы DurationEnter и DurationLeave было > 0.



Страницы: 1 вся ветка

Текущий архив: 2015.03.15;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.006 c
15-1403094009
Delphi3
2014-06-18 16:20
2015.03.15
Возможен ли апгрейд Delphi 3 Client-server до Delphi 7 Prof ?


15-1406579402
Юрий
2014-07-29 00:30
2015.03.15
С днем рождения ! 29 июля 2014 вторник


15-1406364959
Дмитрий СС
2014-07-26 12:55
2015.03.15
От чего считается комиссия?


3-1303294060
dim01
2011-04-20 14:07
2015.03.15
Компоненты Interbase


15-1406803086
Ламот
2014-07-31 14:38
2015.03.15
Был нет бук, вин7 стартовая и желание поставить убунту...