<bgdev />free

Вход Регистрация

Проста симулация на движението на автомобил
0

#58659 (ツ) code2
Създадено на 26.02.2022, видяно: 337 пъти.

Представям да го наречен един теоретичен проблем. Имаме в равнината четири продълговати правоъгълници, които са разположени успоредно (и еднакво ориентирано) един на друг, а центровете им са във върховете на един по-голям правоъгълни. Въпросните 4 правоъгълника символизират гумите на автомобил. Въпросът е как да се симулира движение, ако примерно точно като при автомобила две "предни" правоъгълничета могат да се въртят.

Сложността на задачата която виждам е в това, че примерно ако само едната гума дори е да е много леко завъртяна, то на теория движение не може да се осъществи. Това естествено не става на практиката, защото гумите така или иначе имат някаква гъвкавост и допускат подобни корекции. Разбира се трябва да се заложи на някакъв модел, който не е съвсем реалистичен (защото задачата трябва да се опише просто, а не с геометрията на цялата допирна повърхност на гумата и всички точки в нея), но и да не е толкова неправилно представена със споменатото блокиране.

#58661 (ツ) Delegate
Създадено на 26.02.2022, видяно: 334 пъти.

Изчисляваш резултиращия вектор между посоката на движение(геометричния център на автомобила и накъде се е запътил в точно този момент на симулацията) и примерно някакви странични сили в резулата на фрикции в предните гуми.

#58716 (ツ) Дон Реба
Последно редактирано на 27.02.2022 от Дон Реба, видяно: 311 пъти.
code2

Сложността на задачата която виждам е в това, че примерно ако само едната гума дори е да е много леко завъртяна, то на теория движение не може да се осъществи.

хехе да rofl "теоретичната" наука не може да се ползва пряко при решаване на практически задачи, мога да ти дам безброй примери. от там идва и широко популярния лаф "то на теория така, ама на практика не". всъщност няма такова нещо, физиката описва реалния свят съвсем точно, там е работата обаче че "науката" е просто инструмент, който в различни ръце дава различен резултат. длетото на микеланджело в чужди ръце няма да извае същите статуи, и с "науката" е така. за това много се кефя на "голямото научно осиране" през пандемията, защото ми е писнало да гледам ордите бездарници да си бетонират тъпотиите позовавайки се на "науката".

така, ето какво бих направил аз: всяка симулация се прави на стъпки, и всяка стъпка има две фази - преместване и "трансфер на импулса" където най-общо казано се преизчислява скоростта на обектите, до тук едва ли ти казвам нищо ново. наивните имплементации вкарват "ограниченията" в преместването, например ако нещо си навлиза в стена, трябва да спре. това обаче не е добър път, фундаментално погледнато трансфера на импулса всъщност е отговорен за всички закони за съхранение, вкл и механичните връзки. конкретно по твоя казус, с уговорката че не съм писал никога подобна симулация бих направил така

1: пресмятам преместването на цялата кола съобразно текущия и импулс (вкл и момента)

2. проектирам преместването на гумите върху позволената им ос на движение. новите им позиции са НЕВЪЗМОЖНИ без деформация на колата

3. итеративно форсирам "формата" като просто многократно издърпвам две по две гумите (8 двойки) в такива точки лежащи на оста която ги свързва, които лежат на правилната дистанция една от друга. тоя процес му викам "телепортация"

4. преизчислявам импулса и момента на колата на база реалното преместване и реалното завъртане, което съм получил след точка 3

това е. имай предвид че точка 3 не е толкова тривиална,защото е очевидно несиметрична - според това в какъв ред итерираш двойките, крайния резултат е различен, макар и близък. аз обикновено прилагам редуване на посоките, за да се неутрализира натрупването на систематична грешка. другото което помага е да не преместваш направо върху точните позиции, а примерно само на половината път до тях, това помага много, но забавя изчисленията.

Проста симулация на движението на автомобил
0

AsmBB v3.0 (check-in: a316dab8b98d07d9); SQLite v3.42.0 (check-in: 831d0fb2836b71c9);
©2016..2023 John Found; Licensed under EUPL. Powered by Assembly language Created with Fresh IDE