LINUX.ORG.RU

Понять какие объекты кого толкают?

 


0

1

Имеются 4 ящика, касающихся друг друга как показано на этой картинке.

http://savepic.ru/12517569.png

Ящики находятся в покое. Потом внезапно во всех ящиках возник импульс (в горизонтальном измерении), показанный числом внутри ящика. Да, важно: степень свободы только 1 — в горизонтальном направлении. Масса ящиков одинакова = 1, так что можно считать это число внезапно возникшей «моментальной» скоростью движения. Но с этой скоростью не каждый из них не поедет ввиду наличия контактов.

Задача - понять, что 1+2+4 образуют «отдельную систему» и блок 3 тоже «отдельную систему» в том смысле, что -200 будет давить на 0, который будет давить на +100 и в итоге вся эта система из 3 ящиков поедет влево со скоростью чуть меньше 100 (масса блока 2 сожрёт немного скорости)), при этом 3 никто воздействовать не будет и он поползёт со своим -1 медленно влево.

Если убрать блок 4, то тогда 1 бы давил сразу на 2 и 3 и потащил бы их вправо.

Ниже показан ещё один пример, который должен решаться алгоритмом. В нём -300 потащит всех влево. Если -300 убрать, то +20 потащит всех вправо.

Ищется наиболее дешёвый алгоритм, разбивающий группу касающихся объектов на отдельные «системы».



Последнее исправление: hlamotron (всего исправлений: 2)

при этом 3 никто воздействовать не будет и он поползёт со своим -1 медленно влево.

Первый блок начнёт вращение и третий пойдёт вправо. Либо ты криво нарисовал.

shrub ★★★★★
()
Ответ на: комментарий от hlamotron

Сорян. Дописал про степень свободы — она всего одна, в горизонтальном направлении.

Ящики обладают упругостью отличной от абсолютной? Они отталкиваются?

rezedent12 ☆☆☆
()
Ответ на: комментарий от rezedent12

Не отталкиваются и не прилипают. Упругость э-э-э... нулевая видимо. Абсолютно жёсткие столкновения.

hlamotron
() автор топика
Ответ на: комментарий от hlamotron

Не отталкиваются и не прилипают. Упругость э-э-э... нулевая видимо. Абсолютно жёсткие столкновения.

Ну в таком случае это абстракция не имеющая ничего общего с реальным миром, и поэтому она будет глючной.

Короче, что бы всё сделать идеально, тебе нужно для своей симуляции создать непротиворечивый закон импульса.

rezedent12 ☆☆☆
()

Идея.

Сначала вычисляются крайние ящики.

  • Сначала вычисляются крайние ящики. Это ящики которые одной из своих сторон вертикальных не касаются других.
  • Далее от каждого крайнего ящика, алгоритмом похожим на «заливку» распространяется толкание. Для каждого из крайних ящиков определяется список зависимых ящиков. Заливка распространяется по вектору и производит подсчёт импульса на каждом ящике, если на каком то ящике инвертируется первоначальный вектор, заливка ящика останавливается и идёт другими возможными маршрутами до их исчерпания.
  • Между списками происходит «конкурс». В борьбе за ящик побеждает список имеющий наибольший суммарный модуль импульса.
  • Когда «конкурс» окончен и в списках нет общих элементах, каждый список является искомой группой.

Не знаю во всех ли ситуациях мой алгоритм будет работать правильно, но я постарался сделать его изящным и как можно более математически простым. Да и уже 23 часа, спать охото.

rezedent12 ☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.