Я разрабатываю игру на основе физики с космическими кораблями.
Космический корабль построен из кругов, соединенных стыками. К некоторым кругам прикреплены двигатели.
Двигатели могут вращаться вокруг центра круга и создавать тягу. Я хочу иметь возможность перемещать корабль в направлении или вращаться вокруг точки, устанавливая вращение и тягу для каждого из двигателей корабля.
Как я могу найти вращение и тягу, необходимые для каждого двигателя, чтобы достичь этого?
Ответы:
Давайте представим простую ситуацию корабля с одним двигателем. Для того, чтобы переместить корабль, мы просто указываем подруливающее устройство от направления, в котором мы хотим идти, и выталкиваем. Это подталкивает нас в том направлении, в котором мы хотим идти. Невозможно вращать корабль, состоящий только из одного двигателя.
Давайте увеличим наш корабль до трех двигателей, чтобы сделать его более интересным:
Если бы мы хотели переместить этот корабль куда-нибудь вверх и влево, мы бы просто направили все наши двигатели в противоположном направлении и открыли огонь:
То же решение, что и у одного двигателя, который обеспечивает линейное движение.
Но что если мы пропустим движок? У нас неравная нагрузка?
Следование той же стратегии заставит корабль вращаться. Во многих ситуациях это будет в основном неизбежно, а в некоторых случаях предпочтительнее, поскольку оно будет ориентировать судно для лучшего использования имеющихся двигателей.
Одной из стратегий смягчения этой проблемы будет выравнивание. Разбейте корабль по оси желаемого движения:
Затем убедитесь, что правая сторона и левая сторона равны друг другу. Если они не масштабируют мощность двигателя, пока они этого не сделают. Это может легко привести к тому, что тяга не будет применена. Вам решать, хотите ли вы вместо этого вытолкнуть вызывающее вращение или заставить игрока изменить дизайн своего корабля, реорганизовав свои двигатели.
Как насчет вращения?
Этот вопрос очень хорошо описывает идею.
Вам нужно будет рассчитать центр масс . Затем рассчитайте крутящий момент, создаваемый каждым двигателем. К счастью для вас, ваши двигатели вращаются, поэтому вы можете вращать их, чтобы обеспечить максимальный крутящий момент. Максимальный крутящий момент придет под прямым углом к моменту руки. Применение суммы крутящих моментов будет вращать тело вокруг центра масс. Вы также можете выбрать другую произвольную точку вращения, например, мост корабля.
Если вы хотите убедиться, что вращаетесь на месте, вы можете уменьшить тягу двигателей, которая заставит ваш корабль двигаться линейно. Это можно сделать, сложив все двигатели с положительным крутящим моментом и все с отрицательным крутящим моментом, а затем сравните их абсолютные значения. Группа с большим абсолютным значением должна быть уменьшена до соответствия абсолютному значению другой группы.
Вы также можете найти очень полезный ресурс в Амит Патель .
Здесь он сделал серию из 4 частей о конфигурируемых космических кораблях: часть 1 , часть 2 , часть 3 , часть 4
источник
Я решил, что с локальным поиском. Это работает, но производительность почти плохая. Может быть, лучше использовать теоретическую механику, но я этого не знаю.
источник