Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Canvas & Механика. Построение анимации. 
:(
    Опции темы
L0GA4
Дата 15.12.2009, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 22.6.2005

Репутация: нет
Всего: нет



 Здравствуйте. Возникла проблема построения анимации. В аттаче рисунок того что надо сделать.

Задача: нужно сделать анимацию.  Балка OA1 растягивается, все остальные балки(A1A2, A2B ) жесткие.
Нужно сделать так, чтобы при перемещении ползунка A1 , перемещался и ползунок А2. Так, чтобы длина A1A2 не изменялась. При этом при перемещении ползунка A2  катилась окружность B.  (черная точка на окружности показывает что катится)

Вот что получилось, но изменяется длина...пните кто-нить, а то мозг не работает...

как рисовать окружность понятно - координата по х будет изменяться на длину дуги.
хелп!
Код

procedure TForm1.Timer1Timer(Sender: TObject);
var c,cy,i,yn,xn,q1,q2,
    xb2,yb2,xbs,ybs:integer; OB,AD,alfa,angl,k:real;

begin

  {стирание}

  PaintBox1.Canvas.Pen.Color:=ClWhite;
  PaintBox1.Canvas.Rectangle(1,1,L,H);


  x1:=trunc(65+AO);
  x2:=trunc(65+2*AO);
  xc1:=trunc(65+AO*3/2);
  yc1:=trunc(H-100);

  xc2:=xc1+trunc(AO*cos(-omega*t));
  yc2:=yc1+trunc(AO*sin(-omega*t));

  xb:=trunc(xc2+sqrt(sqr(AB)-sqr(yc2-H/2)))-240;
  yb:=yc1-50;

  PaintBox1.Canvas.Pen.Color:=ClBlack;

  PaintBox1.Canvas.Ellipse(xc1-5,yc1-5,xc1+5,yc1+5);



  PaintBox1.Canvas.Rectangle(xb-15,yb-5,xb+15,yb+5);
  PaintBox1.Canvas.MoveTo(xc1,yc1);
  PaintBox1.Canvas.LineTo(xb,yb);

  xb2:=trunc(xc2+sqrt(sqr(AB)-sqr(yc2-H/2)))-240;     // Y
  yb2:=xc1;
  PaintBox1.Canvas.Rectangle(yb2-5,xb2-15,yb2+5,xb2+15);
  xbs:=xb; ybs:=yb;




  // линия от шатуна к шатуну
  PaintBox1.Canvas.MoveTo(xb,yb);
  PaintBox1.Canvas.LineTo(yb2,xb2);


  t:=t+0.01;
end;


Присоединённый файл ( Кол-во скачиваний: 26 )
Присоединённый файл  1.jpg 48,38 Kb
PM MAIL   Вверх
RockClimber
Дата 15.12.2009, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: нет
Всего: 15



Вставил твой код на форму. Компилятор выдал сообщение, что не знает, что за переменные: L, H, x1, x2, xc1, xc2, yc1, yc2 - это только то, что я запомнил... Выкладывай весь проект, что ли...


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
L0GA4
Дата 15.12.2009, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 22.6.2005

Репутация: нет
Всего: нет



 Это проект который я переделываю. Для моей задачи

Присоединённый файл ( Кол-во скачиваний: 20 )
Присоединённый файл  2.zip 482,10 Kb
PM MAIL   Вверх
L0GA4
Дата 15.12.2009, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 22.6.2005

Репутация: нет
Всего: нет



 А это самая начальная НЕ моя программа

Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  1.zip 304,82 Kb
PM MAIL   Вверх
L0GA4
Дата 15.12.2009, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 22.6.2005

Репутация: нет
Всего: нет



 Если с первой идеи не появятся, есть 2я которую можно вместо 1й сделать

 Впринцепи она похожа на задачу 1.zip которую я выложил выше, только  здесь надо чтобы шатун двигался не вдоль оси Ох , а под углом. ( в общем все на рисунке

Присоединённый файл ( Кол-во скачиваний: 18 )
Присоединённый файл  2.jpg 69,56 Kb
PM MAIL   Вверх
Демо
Дата 15.12.2009, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: нет
Всего: 50



L0GA4

ничего не понятно с твоим кодом - к какой задаче он относится.
Приложи описание задачи, код, описание проблем.

Добавлено через 14 секунд
PS. А всё лишнее тут нафиг не нужно.


--------------------
    
PM MAIL ICQ Skype   Вверх
RockClimber
Дата 15.12.2009, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: нет
Всего: 15



Цитата(L0GA4 @  15.12.2009,  17:24 Найти цитируемый пост)
а то мозг не работает...

Это ключевая фраза, она многое объясняет.
Потому что перед нами типичная программа моделирования, которая решается с конца. Это, я так понимаю, исходные данные:

Цитата(L0GA4 @  15.12.2009,  17:24 Найти цитируемый пост)
Балка OA1 растягивается, все остальные балки(A1A2, A2B ) жесткие. Нужно сделать так, чтобы при перемещении ползунка A1 , перемещался и ползунок А2. Так, чтобы длина A1A2 не изменялась. При этом при перемещении ползунка A2  катилась окружность B.  (черная точка на окружности показывает что катится)

Я бы сделал так. Сначала выписать уравнения, задающие движение. Точка О закреплена - хорошо, ее координаты известны. Точка А1 двигается - записываем функцию координаты от времени. Теперь ее координаты можно считать известными. Если ее координаты известны и известна длина отрезка А1А2, а также ограничения на движение точки А2 (как я понял, они есть) - то ее координаты легко рассчитываются по найденным ранее значениям. Ну и так далее. Когда все формулы будут записаны (хотя бы на бумажке), задача сама решится. А без них код ковырять можно до второго пришествия.


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
L0GA4
Дата 15.12.2009, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 22.6.2005

Репутация: нет
Всего: нет



 мозг не работает т.к. уже 3е сутки этим занимаюсь.
 естественно на бумаге все решается сначала.

1)есть пара моментов. Да. на рисунке я обозначил что я знаю : координаты точки О ( откуда и строится всё остальное ) жестко прописаны, у точки А1 изменяется только X след. образом:

Код

xc2:=xc1+trunc(AO*cos(-omega*t));


где xc1 - начальная точка
AO - радиус 
-omega задает направление и скорость
t - просто увеличивается на 0.01 - ну чтобы изменять сам угол.

в общем обыкновенная параметризация функции окружности.

зачем так - чтобы ползунок двигался вперед и назад. (расстояния на которое он может передвигаться определяется радиусом)

2)Ограничения нет. у точки А2 я знаю только У(для простоты положим её равной yc1, т.е равной У начальной точки). Мне нужно узнать координаты ИКСА. Длину допустим я знаю, но как через длину узнать координаты?. В делфи ведь линии можно только по координатам строить...

вроде бы и крутиться мысль что  дельтаХ первого ползунка равняеться дельтаУ второго ползунка...т.е. изменение координат будут зависеть от этих изменений(дельта ну или "|старая коордт-новая коордт|" ) но как это в делфи записать?



Демо,  извиняюсь, сейччас попробую подробнее описать эти 2 задачи.
PM MAIL   Вверх
RockClimber
Дата 15.12.2009, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: нет
Всего: 15



Теперь мой мозг отключается, потому что поздно и пора спать smile 

Я тут долго и много понаписал, а потом до меня дошло, и я все стер  smile 

Цитата(L0GA4 @  15.12.2009,  21:51 Найти цитируемый пост)
Мне нужно узнать координаты ИКСА. Длину допустим я знаю, но как через длину узнать координаты?. В делфи ведь линии можно только по координатам строить...

Ну как бы теорема Пифагора  smile 
длина - r, не что иное, как:
r^2=(x1-x2)^2+(y1-y2)^2
x1 и y1 - (координаты А1) известны (вычислены ранее), y2 - известно (координата А2), r - известно. Остается одна неизвестная - пишешь для нее формулу, а потом итог округляешь до целого и выводишь на экран.
Я же говорю, сначала выведи формулу, а потом делай вычисления. Delphi в этой задаче вообще непричем...


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
L0GA4
Дата 17.12.2009, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 22.6.2005

Репутация: нет
Всего: нет



 Сделал, спасибо! основная ошибка - система координат, на бумаге рисовал обычную. а на компе-то другая... )
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.1231 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.