Страница 1 из 1
Алгоритм "вываливания"
Добавлено:
27.12.2007 (Чт) 11:09
BION
Всем здрасть.
В общем хочу реализовать эффект замедления и... как бы это лучше сказать - затухающего колебания графического элемента или контрола.
Вот есть ссылка
http://www.virgin.com/home.aspx. Там на хомпаге большая флэша, на ней много линков, и вот при наведении мыши они так вот както выдвигаются, калеблются. Короче говоря посмотрите сами. Вообще сайт классно сделан.
В этой связи вопрос, с какого бока вообще подступить к этому, какой алгоритм?
Спасибо.
Добавлено:
27.12.2007 (Чт) 11:15
Денис
BION
начни с формулы затухающих колебаний
x = A * cos (wt+ф)
где ф - это греч. фи, начальная фаза колебаний.
формула гармонических колебаний. если уменьшать значение А (амплитуду) колебания будут затухать
з.ы. фишка в том, что формула применяется почти ко всем циклическим процессам. если например с ее помощью расчитывать координату Х, а заменив синус на косинус, координату Y, то получим циклическое движение по кругу с указанием конкретной угловой координаты (градуса, если проще). я таким образом стрелки часов делаю (ну величина А само собой, в случае со стрелками - постоянна)
Добавлено:
27.12.2007 (Чт) 12:46
Хакер
Только, Денис, то, что на сайте - не гармонические колебания.
И фишка это не формулы гармонических колебаний, а фишка, вытекающая из определения синуса и косинуса на единичной окружности.
Добавлено:
27.12.2007 (Чт) 13:31
BION
Хакер писал(а):Только, Денис, то, что на сайте - не гармонические колебания.
И фишка это не формулы гармонических колебаний, а фишка, вытекающая из определения синуса и косинуса на единичной окружности.
Пожалст по подробнее...
Можт примерчики какиньть есть?
Добавлено:
27.12.2007 (Чт) 13:33
Денис
Хакер
гармонические, если A=const, если А - переменная, то колебания негармонические. Если А уменьшается - затухающие, если А увеличивается - "нарастающие".
на сайте - затухающие
Вроде с первого раза ясно выразился:
формула гармонических колебаний. если уменьшать значение А (амплитуду) колебания будут затухать
BION
Нужен пример?
вот мой пост в топике про симпатичные часики в "Наших проектах"
Добавлено:
27.12.2007 (Чт) 13:48
BION
Денис
Да, прикольно спасибо, буду смотреть. Вот ток чет не врублюсь в циферблат, это што у моряков такие часы или у кого?
Добавлено:
27.12.2007 (Чт) 13:55
Денис
я хз... в википедии (английской) написано, что они вообще с древнеебипетских времен существуют.
тут главное не часы, а принцип позиционирования стрелки на окружности - замени одну из координат на for - next и получишь синусоиду, умножь вторую координату на произвольную амплитуду (затухающую в том же for - next'e) и получишь свои затухающие колебания. тока рассчитывать таким образом надо не точку на графике, а масштаб твоего контрола
Добавлено:
27.12.2007 (Чт) 16:00
Хакер
Чёрт возьми,
Денис, там колебания НЕ СИНУСОИДАЛЬНЫЕ. Какого чёрта ты рассказываешь мне, что такое гармонические (хотя я и без тебя знаю, но это даже ладно), не поинтересовавшись, что я вообще имею ввиду, а?
Надписи на сайте ведут себя так, как ведут себя падающие в высоты на некоторую упругую поверхность тела с учётом действия сопротивления воздуха. Можешь посмотреть
вот здеськак это выглядит.
Добавлено:
27.12.2007 (Чт) 20:18
GAGArin
Хакер
С учетом не абсолютно упругого удара. Сопротивление воздуха там увидеть нереально ИМХО. Больно уж простенький пример.
Добавлено:
27.12.2007 (Чт) 20:20
Хакер
Да, ты больше прав. Главное, что потеря энергии.
Добавлено:
27.12.2007 (Чт) 21:38
Денис
Хакер писал(а):Чёрт возьми,
Денис, там колебания НЕ СИНУСОИДАЛЬНЫЕ. Какого чёрта ты рассказываешь мне, что такое гармонические (хотя я и без тебя знаю, но это даже ладно), не поинтересовавшись, что я вообще имею ввиду, а?
Надписи на сайте ведут себя так, как ведут себя падающие в высоты на некоторую упругую поверхность тела с учётом действия сопротивления воздуха. Можешь посмотреть
вот здеськак это выглядит.
Вот как это выглядит:
StimorolD3DX писал(а):- Код: Выделить всё
Function GotoW(pos As D3DVECTOR, Angle As Single, Speed As Single) As D3DVECTOR
GotoW.z = pos.z + Cos(Angle) * Speed
GotoW.x = pos.x + Sin(Angle) * Speed
GotoW.y = pos.y
End Function
Function GotoS(pos As D3DVECTOR, Angle As Single, Speed As Single) As D3DVECTOR
GotoS.z = pos.z - Cos(Angle) * Speed
GotoS.x = pos.x - Sin(Angle) * Speed
GotoS.y = pos.y
End Function
Function GotoA(pos As D3DVECTOR, Angle As Single, Speed As Single) As D3DVECTOR
GotoA.z = pos.z + Sin(Angle) * Speed
GotoA.x = pos.x - Cos(Angle) * Speed
GotoA.y = pos.y
End Function
Function GotoD(pos As D3DVECTOR, Angle As Single, Speed As Single) As D3DVECTOR
GotoD.z = pos.z - Sin(Angle) * Speed
GotoD.x = pos.x + Cos(Angle) * Speed
GotoD.y = pos.y
End Function
здесь переменная Speed как я понимаю и есть наша амплитуда.
Я еще раз повторяю, любой циклический процесс описывается тригонометрически. В том числе гармонические колебания, к которым ты так неравнодушен, хотя я автору этого топика объяснял, как сделать затухающие.
Добавлено:
27.12.2007 (Чт) 21:56
GAGArin
Денис
Извини - это бред. Колебания тут негармонические и тригонометрией ты их опишешь только разложив в ряд Фурье. Вопрос только зачем? Зачем страдать то фигней. Когда вываливающаяся кнопка достигает края она сразу меняет знак на противоположный, а не затухает и снова разгоняется как это было бы с синусом.
Она просто движется с ускорением до правого края. Потом теряет сколько-то скорости. Если скорость выше пороговой, то меняет знак скорости на противоположный и с замедлением переходящим в обртное ускорение движется обратно. Вопрос только в том сколько скорости ей терять при ударе. ИМХО для подобных целей проще взять сначала половину (или другой процент), потом посмотреть и только если будет выглядеть некрасиво думать о нелинейных функциях.
Добавлено:
27.12.2007 (Чт) 22:08
Денис
Чтобы не продолжать бесполезный спор, давайте вытянем исходник флэшки, которая рисует кнопки и их поведение на сайте
http://www.virgin.com а то наш спор будет долгим и беспредметным.
Кста, фрагмент из кода стиморола походу отвечает за вращение вокруг сцены, тут я наверное дал маху...
Добавлено:
27.12.2007 (Чт) 22:26
Хакер
В лучшем случае, ты там увидешь свой любимый синус, стоящий внутри модуля.
Добавлено:
28.12.2007 (Пт) 0:44
BION
Денис писал(а):Чтобы не продолжать бесполезный спор, давайте вытянем исходник флэшки, которая рисует кнопки и их поведение на сайте
http://www.virgin.com а то наш спор будет долгим и беспредметным.
Как?
Добавлено:
28.12.2007 (Пт) 8:43
alibek
Денис, уравнение должно базироваться не на тригонометрических функциях, а на параболе. Уравнение точки, движущейся с ускорением, помнишь? GAGArin все правильно написал.
Добавлено:
28.12.2007 (Пт) 8:47
Lumen
BION
Можно например воспользоваться программой Sothink SWF Decompiler
Добавлено:
28.12.2007 (Пт) 10:28
Денис
alibek писал(а):уравнение должно базироваться не на тригонометрических функциях, а на параболе
Вот это аргумент, убедил. А что если мне примерчик написать?
секундочку...
Добавлено:
28.12.2007 (Пт) 10:38
Хакер
Фу.
Добавлено:
28.12.2007 (Пт) 10:53
Денис
Хакер
Ха ха!!! Никак хакер посты накручиваешь???
все
прикладываю мой пример. может я что не так сделал... но ... я прав!
Добавлено:
28.12.2007 (Пт) 10:53
Хакер
Именно.