Движение в пространстве. Подход С++

Цель этой статьи — продемонстрировать общие математические операции и соотношения для описания движения частиц в трехмерном пространстве.
Теоретическая основа, выраженная уравнениями, играет фундаментальную роль для определения траекторий и движений объектов, движущихся на плоскости или в пространстве. Я также укажу также скаляры, которые количественно определяют поворот и скручивание на пути частицы, движущейся в пространстве. Кроме того, мы рассмотрим, как вычислить длину дуги.

Уравнения и простые вычислительные операции я реализовал на C++. Исходные файлы (уравнения и 3D-кривые) вы найдете на моем GitHub.

Кривая в пространстве может быть представлена ​​в векторной форме следующим образом:

где f(t), g(t) и h(t) — составляющие функции.

Мы можем построить простые (я использовал эти кривые для запуска некоторых демонстраций) кривые некоторых выборочных векторов (см. мой GitHub).

Если мы получим вектор r(t), который определяет положение частицы, движущейся вдоль кривой в пространстве, и что f(t), g(t) и h(t) являются дифференцируемыми функциями от t, то мы сможем разработать определение вектора скорости (направления движения).

Когда ∆t приближается к 0, точка B приближается к точке на кривой C.
Наиболее важным здесь, особенно для применения робота, является обеспечение вектора скорости ≠ 0, поскольку условие гарантирует плавную кривую вдоль движения робота.

Для целей этой статьи (код C++) я вывожу вектор r(t) численным методом (см. мою статью).

Величина вектора скорости равна скорости. Скорость рассчитывается следующим образом:

Как и ожидалось, если мы получим вектор скорости, мы получим вектор вектора ускорения. Выводя вектор ускорения, получаем вектор рывка (все операции на C++)

Если движение частицы вдоль пространственной кривой задано в декартовой системе координат {i, j, и k} ​​системе координат — заранее заданными векторами, то лучший способ представить движение с «точки зрения» частицы — можно представить себе беспилотник (или пассажиры в самолете) должен представлять движение вперед (вектор T — тангенциальная составляющая вектора ускорения) и тенденция закручивания кривой (вектор N нормальная составляющая вектора ускорения сильный>). Мы можем ввести связь между этими двумя векторами (B — бинормальный вектор) следующим образом

При движении частицы по кривой в пространстве вектор поворачивается по мере изгиба кривой
(профиль кривой). Поскольку T — единичный вектор, его длина остается постоянной, а меняется только его направление по мере движения частицы по кривой. Мы можем измерить этот изгиб по коэффициенту кривизны кривой.

кручение измеряет изгиб (скручивание) кривой. Чтобы вычислить кручение, нам нужно получить биномиальный вектор B (вдоль пути, по которому движется частица)

Наиболее распространенная формула для вычисления кручения представлена ​​в форме определителя (см. реализацию на C++).

Длина дуги на конкретной кривой определяется следующим образом

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

В демонстрационных целях я использую вектор,

однако для длины дуги я использовал вектор,

вот результаты (motion_in_space.cpp):

Для построения графика требуется (трехмерные кривые) включение заголовочного файла, который должен находиться в той же папке, что и ваш cpp (файл, который вы можете клонировать из моего репозитория).
Ваша программа может быть скомпилирована следующим образом:

//compile
g++ my_prog.cpp -o my_prog -I/usr/include/python3.8 -lpython3.8//

 //run
./my_prog

//folder tree

├── my_prog
├── my_prog.cpp
├── matplotlibcpp.h

Спасибо за чтение.