Страница 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 а то наш спор будет долгим и беспредметным.

Кста, фрагмент из кода стиморола походу отвечает за вращение вокруг сцены, тут я наверное дал маху... :roll:

СообщениеДобавлено: 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
Денис
Хакер
Ха ха!!! Никак хакер посты накручиваешь??? :lol:

все
прикладываю мой пример. может я что не так сделал... но ... я прав!

СообщениеДобавлено: 28.12.2007 (Пт) 10:53
Хакер
Именно.