List

Рассмотрим простой пример построения в Математике анимации углового движения твердого тела, используя результаты расчётов, сохраненные в csv файле.

Файл data.csv содержит результаты интегрирования движения твёрдого тела в десяти столбцах: первый столбец – это столбец времени, остальные девять столбцов содержат элементы матрицы преобразования координат из базиса, связанного с телом, неподвижный базис (матрица сохранена построчно). Т.е. структура файла следующая:

(1)   \begin{align*} & t_0,a_{11},a_{12},a_{13},a_{21},a_{22},a_{23},a_{31},a_{32},a_{33} \\ & t_1, .... \end{align*}

Импортируем файл результатов:
data = Transpose[Import["result.csv"]];
Извлекаем столбцы, в которых содержатся элементы матрицы поворота, и при помощи функции Interpolation строим матрицу поворота, как функцию времени:
A[t_] = Partition[Interpolation[Transpose[{data[[1]], #}]][t] & /@ data[[2 ;;]], 3]
Определяем макимальное время для которого найдено решение
tk = Max[data[[1]]]
Рисуем тело (параллепипед) в его связанной системе координат:
body1 = {
   Directive[RGBColor[0.9, 0.9, 0.9], Opacity[0.95]], 
   EdgeForm[Directive[Thick, White]], 
   Cuboid[{-0.2, -0.4, -0.7}, {0.2, 0.4, 0.7}]
   };
Graphics3D[body1]
Функция построения одного кадра анимации для момента времени t
DrawFrame[tt_] := Module[{A01},
   A01 = A[tt];
   Show[
    Graphics3D[
     {
      (* Рисуем параллепипед в своих осях, 
      преобразуя его в неподвижную систему при помощи функции GeometricTransformation *)
      GeometricTransformation[body1, A01],
      (* Можно еще нарисовать оси системы координат, связанной с телом, не забывая преобразовать координаты векторов осей в неподвижный базис *)
      Directive[Opacity[1]], Thickness[0.002], 
      Arrowheads[0.02],
      Darker[Red], Arrow[{{0, 0, 0}, A01.{0.5, 0, 0}}],
      Darker[Green], Arrow[{{0, 0, 0}, A01.{0, 0.7, 0}}],
      Darker[Blue], Arrow[{{0, 0, 0}, A01.{0, 0, 1.0}}]
      },
     ViewVector -> {{6, 4, 7}, {0, 0, 0}}
     ],
    PlotRange -> {{-1.5, 1.5}, {-1.5, 1.5}, {-1.5, 1.5}}, 
    ImageSize -> {640, 480}, Boxed -> False, 
    ViewAngle -> 14 \[Degree]
    ]];
DrawFrame[0]
Формируем таблицу кадров:
frames = Table[DrawFrame[tt], {tt, 0, tk, 0.1}];
Экспортируем кадры в файл avi
Export["result.avi",frames];

Файл получается очень большим. После создания его необходимо обработать, например, при помощи Windows Movie Maker, выбрав для пересохранения более эффективный алгоритм сжатия. В linux проще воспользоваться ffmpeg. Альтернативный вариант: сохранить каждый кадр в отдельный файл (png, jpg), которые потом можно собрать при помощи того же Windows Movie Maker или ffmpeg.

Файл Математики, файл c результатами интегрирования.

  Posts

July 14th, 2017

7-я Европейская конференция по космическому мусору

Презентация о проблеме космического мусора с обзором некоторых работ 7-ой Европейской конференции по космическому мусору в Германии. Презентация была представлена […]

June 30th, 2016

XII Summer Space School

In June 30 I took part in XII Summer Space School as a lecturer. The event was held at the Samara University. […]

March 5th, 2016

2nd IAA Latin American CubeSat Workshop

January 31st, 2016

Схема йо-йо: уменьшение угловой скорости КА при помощи двух грузов на тросе

В основе этого способа закон сохранения кинетического момента системы, который складывается из кинетического момента КА (произведение момента инерции на угловую […]

September 22nd, 2015

CubeSat SamSat-218 is ready for launch

July 6th, 2015

Построение в системе Mathematica модели движения двух тел, связанных пружиной

Построим уравнения движения механической системы с двумя степенями свободы, состоящей из двух тел, соединенных пружиной, при этом одно из тел […]

July 6th, 2015

Анимация в Mathematica

Рассмотрим простой пример построения в Математике анимации углового движения твердого тела, используя результаты расчётов, сохраненные в csv файле. Файл data.csv […]

July 6th, 2015

Алгоритм метода отдельных тел в MATLAB

Вариант реализации алгоритма метода отдельных тел на языке матричной алгебры MATLAB на примере модели тройного физического маятника, изображенного на рисунке. […]

April 10th, 2015

Simulation of the latching mechanism of a solar panel

Using the Mathematica function HeavisideTheta to simulate the latching mechanism of a solar panel. Link to the Mathematica file: Latch.nb