Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2013, 01:05   #11
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
alextrof94, если рассматривать верхний график, как график ускорения, то все работает по графику

UPD А может и нет...
Не должно тормозить в центре.
Скорость в центре должна быть максимальной.
У некоторых переменных заменил тип на double, для большей верности. Для большей точности, теперь храню изменяемое значение в переменной tanimation.value, а расчитываю valueperframe и к tanimation.value прибавляю, затем к свойству объекта применяю изменение, т.е. Х.Y:=tanimation.value;
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 14.04.2013, 01:18   #12
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Попробуйте:
Код:
value := (sin(2 * pi * iter / iterall - pi / 2) + 1) * (valuestop - valuestart) * pi / ((2 + pi) * iterall);
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 14.04.2013, 01:31   #13
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

BDA, Не работает. Движение происходит вообще не правильно:
Начинает ооочень медленно, сдвигается на пару пикселей, возвращается.
Значения всегда:
iterall=100
valuestart=0
valuestop=500
(интервал у таймера 50, а всего время выполнения 5 сек)
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 14.04.2013, 02:18   #14
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Так, вроде, более похоже:
Код:
value := round((sin(2 * pi * iter / iterall - pi / 2) + 1) * (vstop - vstart) / iterall);
UPD
Пожалуйста
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 14.04.2013 в 02:39.
BDA вне форума Ответить с цитированием
Старый 14.04.2013, 02:25   #15
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Так, вроде, более похоже:
Код:
value := round((sin(2 * pi * iter / iterall - pi / 2) + 1) * (vstop - vstart) / iterall);
Да, человек, спасибо огромное) "Она живая! Живая!"
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 14.04.2013, 02:26   #16
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Жаль плюсики ставить не могу, а так бы поставил на каждое сообщение)
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 14.04.2013, 02:50   #17
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
Сообщение

Сабж закрыт. Спасибо тем, кто помог)
Выкладываю исходники и, собственно, полученное приложение, может кому понадобится.
Тип анимации находится в отдельном модуле "animationtype".

Использование:
Код:
uses animationtype;
...
var a:tanimation;
...
begin
if a.create(panel1,'left',1000,0,100,0) then 
showmessage('выполнение')
else
showmessage('невозможно');
end;
Вложения
Тип файла: rar testanimation.rar (1.85 Мб, 9 просмотров)
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 14.04.2013, 10:47   #18
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Код:
type tanimation = record
//skip
obj: tobject;
...
if (obj is tpanel) then
begin
      if parametr='left' then
        (obj as tpanel).Left:=round(vstart);
      if parametr='top' then
        (obj as tpanel).top:=round(vstart);
      if parametr='width' then
        (obj as tpanel).width:=round(vstart);
      if parametr='height' then
        (obj as tpanel).height:=round(vstart);
    end;
Очень странный подход. Зачем какой-то тобжект , если используете свойства контрола, сразу и обозначьте его как TControl - и проблем не будет с расширяемостью, и приведение типов выкинуть за ненадобностью.
phomm вне форума Ответить с цитированием
Старый 14.04.2013, 20:45   #19
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
Код:
type tanimation = record
//skip
obj: tobject;
...
if (obj is tpanel) then
begin
      if parametr='left' then
        (obj as tpanel).Left:=round(vstart);
      if parametr='top' then
        (obj as tpanel).top:=round(vstart);
      if parametr='width' then
        (obj as tpanel).width:=round(vstart);
      if parametr='height' then
        (obj as tpanel).height:=round(vstart);
    end;
Очень странный подход. Зачем какой-то тобжект , если используете свойства контрола, сразу и обозначьте его как TControl - и проблем не будет с расширяемостью, и приведение типов выкинуть за ненадобностью.
И тебе спасибо) Я давно гуглил как это можно объединить, но вот про tcontrol не находил, так и юзал с ifами)
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Осторожно кидала. mr_kolobokov Свободное общение 8 30.03.2012 09:09
Проблема с математикой. EliteSly Помощь студентам 7 06.03.2012 23:16
Осторожно Webmoney.Вопрос знатокам! DeleteRz Софт 1 16.02.2010 18:13
Помогите с математикой Chals Помощь студентам 3 13.06.2007 16:07