PDA

Просмотр полной версии : Physical engine


Страницы : 1 [2]

TERRORist
19.08.2005, 22:37
кто бы что не говорил, там вычисляется равнодействующая 2-х сил и непофикли каким способом?
Какая равнодействующая??????? НЕ СМЕШИ МЕНЯ!!!
Я тебе с закрытыми глазами напишу код который там используется, безо всяких декомпилеров!!!!!!!!

код шарика:

onClipEvent(load){
x=10
y=-50}
onClipEvent(enterFrame){
_x+=(_root.g._x+x-_x)/5
_y+=(_root.g._y+y-_y)/5
}

MC g - это та бандура, которая висит на шариках.

kost@
19.08.2005, 23:10
кто бы что не говорил, там вычисляется равнодействующая 2-х сил и непофикли каким способом?
Я выкладывал исходники, где ты мог сам задавать описание сил в любом направлении (а не только вверх-вниз), тем самым вычисляя равнодействующую N-сил (правда там был косяк в векторном сложении... виноват, исправил 80))
Так я не кричал же "must see!" (интересно, как назвать то, чем я сча занимаюсь). Да, дизайн этот покрутее будет, но мы же не заморачиваемся, пока бабла не сунут в карман 80)

K.A.T.A.F.A.L.K.E.R
20.08.2005, 00:17
какие силы!!! не смешите меня! :d законы сохранения рулят!!! энергия ведь есть - это и альтернативный источник законов взамодействия, и "нафиг вектора" (ну, кроме импульса...) и вся механика (лагранж, гамильтон) только на этом и построена :)) так что, плиз, не тупите :)

kost@
20.08.2005, 01:35
...и "нафиг вектора"...так что, плиз, не тупите :)карашо, как ты предлагаешь закон сохранения энергии реализовать?
ты там говорил, что-то дельно сделал с кривыми, заливкой и прочими замутками... покажи че получилось?
---
тут пару вопросов есть для знающих людей:
1) как расчитать вектор нормали к поверхности любой формы?
2) как закодить закон сохранения импульса при столкновении 2-х тел зная:
вектора ускорений
скорость
массу

Takato
20.08.2005, 01:41
2) как закодить закон сохранения импульса при столкновении 2-х тел зная:
вектора ускорений
скорость
массу

так тут еще большая роль в самом столкновении, форме объектов, точки их соприкосновения, упрогости, деформации и т д... или тебе типа столкновение точек просто надо?

kost@
20.08.2005, 02:10
или тебе типа столкновение точек просто надо?Для начала - ДА...

Takato
20.08.2005, 02:26
в случае упругого "идеального" столкновения шары просто обмениваются векторами... то есть, если 1-ый летит с вектором 3, 0 (на восток) а 2-ой с вектором -4, -4 (на северозапад), то после столкновения первый шар полетит на северозапад, а второй на восток. ес-но, это при одинаковых массах. если же первый шар в 2 раза тяжелее, то 2-ой полетит со скоростью 6,0 (на восток, на в 2 раза быстрее чем 1-ый до столкновения), а первый на северозапад, но в два раза медленнее - -2,-2

kost@
20.08.2005, 02:32
просто обмениваются векторами... Давай конкретнее. центральный неупругий удар. знаем:
m1,m2,{l1,d1},{l2,d2}...
где {} вектора ускорения :
li - значение ускорения
di - направление ускорения в градусах
---
то есть ты считаешь, что если один шар догоняет другой и они стукаются, то они "просто обмениваются веторами"?

Takato
20.08.2005, 03:56
то есть ты считаешь, что если один шар догоняет другой и они стукаются, то они "просто обмениваются веторами"?

Да, так и происходит (в случае идеального удара) - вспомни, как летают в реале бильярдные шары. Если шар стукается в другой (неподвижный) - центр в центр, ес-но, а не чиркаются боками - то первый шар остается на месте - а второй начинает движение в том же направлении с той же скоростью (обменялись векторами). Это если массы равны. При разных массах - пропорцианальные вычисления. Да вобще - просто умножается масса на скорость - вычисляем импульс, потом делим на массу второго шара, вычисляем новый импульс и т д. Про вектора я уже сказал

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

artcraft
20.08.2005, 04:10
ваша затея мне понравилась :~)

вот набросал задачу :
http://artcraft.chat.ru/tz.gif

;) решаем ...

Takato
20.08.2005, 04:12
;) решаем ...

Хитрый какой :)

kost@
20.08.2005, 04:23
Да вобще - просто умножается масса на скорость - вычисляем импульс, потом делим на массу второго шара, вычисляем новый импульс и т д. Про вектора я уже сказал Да, ты прафф... Я просто немного чисто с точки зрения практики не мог воткнуть, почему так происходит... Вот зубришь в школе всякие вещи, а как до практики доходит, все равно ничего не понимаешь... пока не нечнешь программировать. Лучший способ понять вещи - запрограммировать их!
А закон сохранения импульса я знаю: могу сдать тебе по нему экзамен 80) Так, сча буду пробовать!
Если есть желание - можешь положить на достаточно скользкую поверхность монетки и пощелкать их друг в друга Давай не будем "щелкать", а? 80) Как после этого на меня друзья будут смотреть, когда я вот так сяду за стол и буду монеты друг в друга швырять?!...

artcraft
20.08.2005, 04:33
Хитрый какой :)Ага, флудить проще, да? :~)

Takato
20.08.2005, 04:35
давай не будем "щелкать", а? 80) как после этого на меня друзья будут смотреть, когда я вот так сяду за стол и буду монеты друг в друга швырять?!...

а ты где щас? у мя ща 3 часа ночи, за стенкой спят соседи и мыши...

Ага, флудить проще, да? :~)

У нас тут научная конференция :)

kost@
20.08.2005, 04:54
а ты где щас? Отличный вопрос! Вот сча прямо на форуме будем обсуждать где я и что на мне надето 80)
Дома... вообще спать не охота. Сижу, кой-чего почитываю, кой-чего поделываю 80)

Takato
20.08.2005, 05:08
Отличный вопрос! Вот сча прямо на форуме будем обсуждать где я и что на мне надето 80)
Дома... вообще спать не охота. Сижу, кой-чего почитываю, кой-чего поделываю 80)

Ну вот... А в идеале ты должен быть где-нибудь в бильярдной, бормоча под нос всякие формулы и записывая что-то в блокнот... Или на складе - кидая с возвышения деревянные ящики :)

kost@
20.08.2005, 13:04
в идеале ты должен быть где-нибудь в бильярдной, бормоча под нос всякие формулы и записывая что-то в блокнот... Или на складе - кидая с возвышения деревянные ящики :)Люди, смотрите до чего флешер может довести. Еще вчера вы были каким-никаким web-мастером, а сегодня уже прожигаете жизнь над бильярдным столом, или работаете грузчиком! Жуть как мерзко от таких мыслей! ОК, хва флудить... давайте по делу: кто идет за пивом?!

TERRORist
20.08.2005, 13:18
Отличный вопрос! Вот сча прямо на форуме будем обсуждать где я и что на мне надето 80)
Дома... вообще спать не охота. Сижу, кой-чего почитываю, кой-чего поделываю 80)
Я надеюсь ты не Playboy читал??? ))))

kost@
20.08.2005, 13:27
Я надеюсь ты не Playboy читал??? ))))С флешем Playboy не нужен - ты и так всегда до такой степени задр?*№н, что на Playboy и времени-то не остается. Как в анекдоте про качков:
- тебя занятия спортом удовлетворяют?
- это как?
- ну когда ты из зала выходишь, тебе хочется с тетками зажигать?
- нет...
- значит, удовлетворяют!
// замените занятие спортом на FLASH, а качков на флешеров сами

TERRORist
20.08.2005, 14:14
вот продолжение физики точки.
та же флешка. но теперь есть угол падения(фиол) и отражения(синий). на движение точки они по-прежнему не имеют влияния.

kost@
20.08.2005, 16:10
есть угол падения(фиол) и отражения(синий)Высчитываешь вектор нормали при столкновении шарика и поверхности? Если да, то как?

F_Flash
20.08.2005, 16:48
Высчитываешь вектор нормали при столкновении шарика и поверхности? Если да, то как?

Отрезок.

c1 и c2 точки отрезок между которыми создает плоскоть.

Нормаль к этой плоскости будет такая.
v1x=c2._x-c1._x;
v1y=c2._y-c1._y;
vNormalx=v1y;
vNormaly=-v1x;


Окружность.


Нормаль будет

nx=px-circlex;
ny=py-circley;

где px,py точка соприкосноверия. circle x,circle y ендр окружности.

Кривая.

- Высчитывается касательная через приозводную . dx/dy
- Через нее вычисляешь перпендикуляр, пример примеден на отрезке.


Естесвенно векоры нормали желательно приводить к единичному виду.

Normalise()

Я это уже описывал раншье....

TERRORist
20.08.2005, 18:05
риспехт!

artcraft
20.08.2005, 18:59
повторяю свой вопрос:
http://artcraft.chat.ru/tz.gif

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

kost@
20.08.2005, 21:48
поправьте меня если я не правНе паникуй. тебя не игнорируют. такую задачу тут в топике уже решили (почти). найди - ТЕРРОРист выкладывал пример работы со связкой точек. как выяснилось, нужно сначала поупражняться на точке, а потом переходить на связку точек (как в твоем примере). сразу будет запутанно и непонятно...
сча пробую сделать нормальный движок для точки. не знаю, че хорошего из этого полуЦа.
у кого че вообще получается? есть новые затеи?

artcraft
20.08.2005, 22:07
вы думаете, если посчитать вектора для вершин и сложить их, то будет вектор объекта?
мне кажется это неверный подход...
надо мыслить целым объектом, а про вершины вспоминать только для определения столкновений

Takato
20.08.2005, 22:12
кто-то уже выкладывал и здесь, и в "не сайтах" пример с падающим ящиком (сори, не помню, кто :( ). там уже какая-то часть этой задачи реализована. я потом тоже делал что-то типа этого - но без хит-теста и с учетом того, что форма может быть не только квадрат, но и прямоугольник, трапеция - вобщем, любой четырехугольник. получилось неплохо - но с одним минусом - когда объект уже валяется на земле, он продолжает чуть-чуть подпрыгивать ((

Ion
20.08.2005, 22:28
вы думаете, если посчитать вектора для вершин и сложить их, то будет вектор объекта?
мне кажется это неверный подход...
надо мыслить целым объектом, а про вершины вспоминать только для определения столкновенийпочему? Просчитываешь равнодействующую сил, действующих на каждую точку, а затем - равнодействующую равнодействующих, действующих на точки, получаешь силу, Действующую на объект

E-mail
20.08.2005, 22:34
про ящик это кажися я...
у меня там тоже можно изменить форму четырёхугольника,пробовал даже добавлять ему углов-вроде как прыгает,тока не очень...
все мои действия по добавлению реализма упирались в не решённую до сих пор задачку по физике(карандаш на столе падает без проскальзывания),но ничё,ща симестр начнётся и что нибудь да будет:)

artcraft
20.08.2005, 22:45
почему? Просчитываешь равнодействующую сил, действующих на каждую точку, а затем - равнодействующую равнодействующих, действующих на точки, получаешь силу, Действующую на объект
да потому что нужен просчёт каждой вершины, даже если тело просто "парит" без помех

Takato
20.08.2005, 22:58
про ящик это кажися я...
у меня там тоже можно изменить форму четырёхугольника,пробовал даже добавлять ему углов-вроде как прыгает,тока не очень...

У тебя там хиттест был? Работает ли он в условиях кривого или наклонного пола? :confused:


все мои действия по добавлению реализма упирались в не решённую до сих пор задачку по физике(карандаш на столе падает без проскальзывания),но ничё,ща симестр начнётся и что нибудь да будет:)


По-мойму это от трения зависит (пластмасовая ручка у мя немного проскальзывает) - хотя я тоже думал, как бы убрать это, когда работал над ящиком

artcraft
20.08.2005, 22:59
между делом, в атаче тест производительности hitTest-а
на моём ноутбуке выходит от 10 до 25 мс на 1000 hitTest-ов
1 один кадр при 20fps длится 50ms - значит можно жить

и ещё:
подвинуть мув. сделать hitTest, подвинуть мув. ещё раз и т.д.
и всё в одном кадре - не составляет никакой проблемы !!!

E-mail
20.08.2005, 23:01
Был hitTest,от наклонных отскакивает,тока не правильно,как от горизонтальной вроде бы...

kost@
21.08.2005, 14:46
1. в аттаче опять физика точки: прорисовываются вектора действующих сил и их суперпозиция. в архиве есть мануал, как добавлять добавлять свои силы и как регулировать параметры.
тестируем - ругаемся, говорим, что не правильно, презираем меня, называем плохими словами, шлепаем!... О-да, о-да 80)

2. И снова... Допустим я рисую поверхность с помощью curveto() и lineTo(). Как в любой точке по ОХ мне вычислить вектор нормали к поверхности?! (см. 2-ой аттач curves.rar)

Ion
21.08.2005, 17:04
не было б у тя кривых было б просто, а тут над знать формулу, по которой они строяца

kost@
21.08.2005, 17:57
не было б у тя кривых было б просто, а тут над знать формулу, по которой они строяца Про то и разговор... Я с Безье (кривые строяЦа по его алгоритму) не дружу! Вот и подумал, что может тут кто с ним за руку здоровается? 80)

Ion
21.08.2005, 18:10
ну так купи ящик пива и завались к нему! поискать в инете не судьба, если пива жалко?

E-mail
21.08.2005, 18:10
1. в аттаче опять физика точки: прорисовываются вектора действующих сил и их суперпозиция. в архиве есть мануал, как добавлять добавлять свои силы и как регулировать параметры.
тестируем - ругаемся, говорим, что не правильно, презираем меня, называем плохими словами, шлепаем!... О-да, о-да 80)
Физика точки-особо не запаривался-как в червяках(она не знает угла наклона под ним)
http://www.flasher.ru/forum/attachment.php?attachmentid=10850
но выглядит неплохо?

2. И снова... Допустим я рисую поверхность с помощью curveto() и lineTo(). Как в любой точке по ОХ мне вычислить вектор нормали к поверхности?! (см. 2-ой аттач curves.rar)
я придумал один способ,ща его делаю(глючный наверно...)
во время столкновения некие два пустых муви клипа от объекта(шарика,кубика) паралельно летят к этому препятствию на некотором расстоянии друг от друга(причём летят быстро с использованием циклов),сталкиваются с ним и останавливаются,образовавшаяся прямая при небольшом расстоянии между этими муви клипами-производная этой поверхности(угол короче можно получить)

TERRORist
22.08.2005, 17:13
Люди, чего молчим? Думаете?)

E=mail -Забей ты на два квадратика. Юзай один как точку.

K.A.T.A.F.A.L.K.E.R
22.08.2005, 18:28
ты там говорил, что-то дельно сделал с кривыми, заливкой и прочими замутками... покажи че получилось?
---
тут пару вопросов есть для знающих людей:
1) как расчитать вектор нормали к поверхности любой формы?
2) как закодить закон сохранения импульса при столкновении 2-х тел зная:
вектора ускорений
скорость
массу

Блин, да я бы показал, то толку мало... Как я говорил, то что я сделал - всего лишь определение факта столкновения произвольных объектов а также вычисление всяких их параметров - массы, момента инерции и прочего... Я хочу все же сделать физику! Но вот проблема: закона сохранения энергии, импульса и момента импульса для произвольного столкновения недостаточно... Выходит 6 неизвестных и 4 уравнения! Фигня получаецца!!! Где-то нужно пробить еще два уравнения - но где? Скорее всего, это должны быть уравнения связей, так бывает чаще всего... Вообщем, еще придется подолбаться...

По поводу векторов нормали - в том что я сделал они вычисляются без проблем :) Вообще, если ты не особо разогнался - то тебе нужен вектор нормали не к поверхности, а к кривой... Короче возьми две не очень далеко лежащие на этой кривой точки, узнай угол под которым "видна" одна точка из другой - вуаля, направляющая (касательная) уже есть... А нормаль - перпендикулярно...

Закон сохранения импульса - ускорение тебе вообще не нужно. Нужно знать скорости в момент столкновения. Пишешь проекции скоростей на оси х и у, сумма импульсов в этих направлениях должна сохраняться... Типа там, m1*v1X+m2*v2X = m1*u1X+m2*u2X, где v1X - х-вая проекция скорости первого тела до столкновения, u1X - после столкновения (то, что тебе нужно найти), с остальным по аналогии...

E-mail
22.08.2005, 20:15
меня не поняли...ладно...
вот он мой детектор угла под предметом на карте произвольной формы и состава

Ion
22.08.2005, 22:22
сделай между этими тками ещё 1-у, чтобы отслеживать резкие выступы и впадины

E-mail
22.08.2005, 22:50
можно просто уменьшить расстояние между ними

Ion
23.08.2005, 14:39
неэффективно

artcraft
24.08.2005, 08:27
тут по шагам расписана вся физика точки и не только !!!
10 уроков с примерами и исходниками !!!
http://www.tonypa.pri.ee/vectors/start.html

kost@
24.08.2005, 17:44
детектор угла под предметом на карте произвольной формы и составаЗдорово! Молодец!

kost@
24.08.2005, 17:56
http://www.tonypa.pri.ee/vectors/start.htmlДа... тут уже все сделали! После всего такого руки опускаются что-то вообще придумывать! Пойду, застрелюсь, вывалившись с балкона 80)

artcraft
24.08.2005, 18:13
Да... тут уже все сделали! осталось применить всё готовое к кубикам... а потом и к произвольной форме...

Ion
24.08.2005, 18:19
2kost@

веревку к шее не забудь привязать :-D

K.A.T.A.F.A.L.K.E.R
25.08.2005, 16:00
тут по шагам расписана вся физика точки и не только !!!
10 уроков с примерами и исходниками !!!
http://www.tonypa.pri.ee/vectors/start.html
Какой ужас... Прямо соль на рану :( Ты тут сидишь с головной болью, пытаешься написать для тел произвольной формы - и тут на тебе: шарики сталкиваются :( Вы что - издеваетесь? Шарики - это примитив для начинающего флешера... Я и с закрытыми глазами напишу уравнения движения... А вот произвольная форма - это намного (на порядок!) сложнее... Уже второй месяц долбусь... :confused:

TERRORist
25.08.2005, 18:25
Какой ужас... Прямо соль на рану :( Ты тут сидишь с головной болью, пытаешься написать для тел произвольной формы - и тут на тебе: шарики сталкиваются :( Вы что - издеваетесь? Шарики - это примитив для начинающего флешера... Я и с закрытыми глазами напишу уравнения движения... А вот произвольная форма - это намного (на порядок!) сложнее... Уже второй месяц долбусь... :confused:
Ну ты неправ ИМХО. Заделай шарики 2px, связанные физикой. Произвольная поверхность там была - в виде четырехугольника произвольной формы, сделай n-угольник. Вот тебе и физика!

K.A.T.A.F.A.L.K.E.R
25.08.2005, 18:34
да не все так просто... дело ведь вот в чем: столкновение шаров можно, перейдя в систему отсчета, связанную с одним из шаров, рассматривать как центральный удар - это важно! т.е. сложно представить столкновение шаров так чтоб это не был центральный удар (читать: невозможно). дело тут в том, что центры масс и точка соприкосновения лежат для шара всегда на одной линии. для тела произвольной формы это не так, и это очень сильно усложняет задачу :( для иллюстрации: у тебя есть два шарика, соединенные невесомым прутиком и еще одна такая же пара. они сталкиваются (один шар из первой пары налетает на второй шар из второй пары). рассчитай скорости их центров масс и угловые скорости - зае*ешься! :(

TERRORist
25.08.2005, 22:25
а. да. борода.

Mr. V
26.08.2005, 04:25
кхм!
я создавал такую же тему еще в начале лета...у катафалкера рейтинг выше...
у меня вопрос: как обнаружить точку соприкосновения двух мувейклипов?можно такое сделать?я знаю лишь супергромоздкий способ.ща буду проверять его

TERRORist
26.08.2005, 12:11
может поведаешь?

K.A.T.A.F.A.L.K.E.R
26.08.2005, 16:18
кхм!
я создавал такую же тему еще в начале лета...у катафалкера рейтинг выше...
у меня вопрос: как обнаружить точку соприкосновения двух мувейклипов?можно такое сделать?я знаю лишь супергромоздкий способ.ща буду проверять его
Да я уже писал, что с этим разобрался - определение точек соприкосновения у меня работает просто зашибись :) В кратце - я создавал процедУрку addAnchors, которая раз и навсегда проходила мувик с шагом в несколько градусов (радиальная система координат) и через хиттест отлавливала все дырки и границы мувика и создавала массив ключевых точек, а потом и интерполировала (пока линейная интерполяция)...

Futs
26.08.2005, 18:09
2k.a.t.a.f.a.l.k.e.r
блин я с этим парюсь, очень плохо выходит

Mr. V
28.08.2005, 02:12
2k.a.t.a.f.a.l.k.e.r
это типа вот этого?
выложи свое.
Я так понимаю весь принцип этого физдвижка в том, что центр тяжести тела должен установится над точкой опоры да?
а еще проблема,как провернуть тело вокруг не-точки-регистрации,
ты этого случайно не сделал?

Mr. V
28.08.2005, 02:15
ой! вот

K.A.T.A.F.A.L.K.E.R
29.08.2005, 17:23
2k.a.t.a.f.a.l.k.e.r
это типа вот этого?
выложи свое.
Я так понимаю весь принцип этого физдвижка в том, что центр тяжести тела должен установится над точкой опоры да?
а еще проблема,как провернуть тело вокруг не-точки-регистрации,
ты этого случайно не сделал?
Хм, не просто типа - один в один :) Почти... Только, наверное, не совсем... Похоже на то что здесь реальный хиттест, а я хиттест как раз не использую (точнее, использую - но лишь раз, при инициализации объекта)... Вращение вокруг произвольной точки - ну, это в принципе не вопрос... Вкратце: пускай точка (x,y) - та, вокруг которой надо вращать... Тады, (сокращенно!) пишем че-то типа
r=Math.sqrt((x-_x)*(x-_x)+(y-_y)*(y-_y));
a++;
_x=x+r*Math.sin(a*0.17);
_y=y-r*Math.cos(a*0.17);
_rotation = a + dA;
где dA - че-то типа начального угла поворота... Не тестил, но должно сработать :)
хотя это все не надо - любое движение тела есть суперпозиция движения центра масс (по прямой) + вращение вокруг центра масс...

Mr. V
30.08.2005, 02:27
хм...работает...работает!
теперь надо взять тело за "точку столкновения" и вращать вокруг нее, потом учесть показатель скорости по иксу, и кинуть в нужную сторону!
это, по-моему, для игрушки будет в самый раз(имитация хавока), но до реальной физики конечно далековато.
вобщем свое я получил :D , пойду ковырять

artcraft
13.09.2005, 02:21
не было б у тя кривых было б просто, а тут над знать формулу, по которой они строяца
Про то и разговор... Я с Безье (кривые строяЦа по его алгоритму) не дружу! Вот и подумал, что может тут кто с ним за руку здоровается? 80)

вот он тут http://www.flasher.ru/forum/showthread.php?t=69066

artcraft
13.09.2005, 23:41
cильно не вникал, но кажется тут есть много всего полезного (intersect2D, curve,...)
http://members.shaw.ca/flashprogramming/wisASLibrary/wis/index.html

kost@
14.09.2005, 00:20
2artcraftДа, я уже заценил твои кривые... Такие кривые, кривыми руками не сделаешь :D

Kandilabr
20.09.2005, 20:54
Я только одно не пойму: то, что вы так долго и упорно обсуждаете, это кому-то нужно или просто тренеровка для мозгов?

Если нужно сделать анимацию 2D или 3D обьектов, да еще и с учетом физики, не проще ли взять 3DSMax? Кстати, начиная с 5 версии там имеется модуль Reaсtor, позволяющий очень точно рассчитывать физику движения и взаимодействия обьектов любой формы с использованием огромного количества физических параметров (твердые, мягкие, гибкие тела, жидкости, ткани, ветер, короче, все что угодно).

Вообще, мне кажется, что для такой задачи, как разработка физического движка, язык Flash слишком примитивен, больше подошел бы с++.

artcraft
21.09.2005, 02:32
Kandilabr, это всё надо не для анимации, а для flash-игрушек.
Reaсtor есть и для Director-а, но Director не настолько популярен как Flash