Какая прелесть. Вот вам еще идейка. Я тут размышлял над тем, что мне категорически не нравится поведение всевозможных самолетков в играх. Ну, разве что в DCS все вроде хорошо, у крафтов с AFM. Так вот, я решил попытаться придумать реалистичную и легкую в плане ресурсов модель поведения объекта произвольной формы при полете в атмосфере. Может, это не новость, конечно... Короче идея токова: Во-первых, изначальный посыл такой - любое воздействие на любой объект можно разделить на две составляющих - сила, приложенная к центру масс объекта, и момент силы, приложенный туда же. Честно говоря, я не изучал детальней этот вопрос, может быть, это и неверный посыл, но на первый взгляд кажется, что так все в реале и может быть разложено. Во-вторых, у нашего мега-симулятора есть две составляющие - сама симуляторно-геймплейная часть и отдельная "экспериментальная" часть. Суть экспериментальной части в следующем: есть отдельная программа, условно назовем её "аэродинамическая труба", с очень реалистичной моделью аэродинамики. Так вот, модель из игры загружается в эту трубу, и там рассчитывается сила и момент, действующие на объект, повернутый некоторым образом к однородному потоку газа с некоторой скоростью. Эти расчеты повторяются много раз для разных ориентаций объекта и разных скоростей потока. На выходе мы получаем некоторую функцию от трех аргументов(трехмерный вектор задает ориентацию потока относительно объекта, длина этого вектора задает скорость потока), которая известна для некоторых значений своих аргументов. Значения можно организовать в виде трехмерного массива. Не имеет значения, как долго выполняются эти вычисления, т.к. для каждой модели они делаются только один раз. В симуляторной части для объекта загружается эта рассчитанная матрица, и вычисляется сила и момент. Это должно происходить достаточно быстро, т.к. вектор скорости объекта относительно атмосферы известен, и вся сложность будет выбрать ближайшие к нему несколько векторов из матрицы, интерполировать их, и вуаля, - получим готовую силу и момент силы. Точность симуляции можно сделать почти любой(зависит от количества элементов трехмерной матрицы, и их "плотности"), лишь бы была хороша точность модели аэродинамической трубы. Можно даже не использовать программу-трубу, если откуда-либо известны значения сил и моментов для данного объекта.
Правда, в таком подходе, кроме того, что надо найти хорошую модель поведения объекта в потоке газа, есть еще один изъян. В реале объект движется не в однородном потоке. В принципе, если объект летит по прямой, можно считать поток однородным, но если объект сам вращается, или летит по изогнутой линии, то поток однородным считать нельзя. Если использовать такой подход, то вращение объекта вокруг оси потока никогда не остановится, или например, для самолета, летящего с полностью выкрученным в какую-то сторону рулем направления не будет учитываться разная скорость потока для правого и левого крыла, тогда как в реале, насколько мне известно, это приводит к очень заметным эффектам, таким, например, как достаточно быстрый крен. Выход из сложившейся ситуации мне видится в том, чтобы разбивать модель на несколько частей, и составлять матрицу для каждой части отдельно, и рассчитывать силы и моменты так же отдельно. При этом не обязательно в "трубе продувать" кусок модели(иначе мы потерям эффект аэродинамической тени, например), а можно по-прежнему, продувать всю модель, но считать силы для каждого из кусков в отдельности.
Ах, да, вот еще что. Матрица может преобразовываться в зависимости от параметров газа, таких, как плотности и температуры. Я думаю, для учета таких изменений не нужно будет строить отдельную матрицу для каждого значения этих параметров, достаточно будет преобразовывать некой функцией существующую для фиксированных параметров.
|