diff --git a/docs/book/geometry.md b/docs/book/geometry.md index 0bf12a1..3cdc7cf 100644 --- a/docs/book/geometry.md +++ b/docs/book/geometry.md @@ -57,7 +57,7 @@ v.z = 15; В прошивке в виде векторов представлены, например: -* `acc` — истинное ускорение с акселерометра. +* `acc` собственное ускорение с акселерометра. * `gyro` — угловые скорости с гироскопа. * `rates` — рассчитанная угловая скорость дрона. * `accBias`, `accScale`, `gyroBias` — параметры калибровки IMU. @@ -124,7 +124,7 @@ float dotProduct = Vector::dot(a, b); // 32 #### Векторное произведение -Векторное произведение (*cross product*) позволяет найти вектор, перпендикулярный двум другим векторам. В математике оно обозначается знаком `×`, а в прошивке — статический метод `Vector::cross()`: +Векторное произведение (*cross product*) позволяет найти вектор, перпендикулярный двум другим векторам. В математике оно обозначается знаком `×`, а в прошивке используется статический метод `Vector::cross()`: ```cpp Vector a(1, 2, 3); @@ -136,7 +136,7 @@ Vector crossProduct = Vector::cross(a, b); // -3, 6, -3 ### Ориентация в трехмерном пространстве -В отличие от позиции и скорости, у ориентации в трехмерном пространстве нет универсального для всех случаев способа представления. В зависимости от задачи ориентация может быть представлена в виде углов Эйлера, матрицы поворота, вектора вращения или кватерниона. Рассмотрим используемые в полетной прошивке способы представления ориентации. +В отличие от позиции и скорости, у ориентации в трехмерном пространстве нет универсального для всех случаев способа представления. В зависимости от задачи ориентация может быть представлена в виде *углов Эйлера*, *матрицы поворота*, *вектора вращения* или *кватерниона*. Рассмотрим используемые в полетной прошивке способы представления ориентации. ### Углы Эйлера @@ -198,13 +198,13 @@ Vector rotation = radians(45) * Vector(1, 2, 3); quaternion.h.
-Вектор вращения удобен, но для математических расчетов еще удобнее использовать **кватернион**. В Flix кватернионы представляются объектами `Quaternion` из библиотеки `quaternion.h`. Кватернион состоит из четырех значений: *w*, *x*, *y*, *z* и рассчитывается из вектора оси вращения (*axis*) и угла поворота (*θ*) по следующей формуле: +Вектор вращения удобен, но еще удобнее использовать **кватернион**. В Flix кватернионы задаются объектами `Quaternion` из библиотеки `quaternion.h`. Кватернион состоит из четырех значений: *w*, *x*, *y*, *z* и рассчитывается из вектора оси вращения (*axis*) и угла поворота (*θ*) по формуле: \\[ q = \left( \begin{array}{c} w \\\\ x \\\\ y \\\\ z \end{array} \right) = \left( \begin{array}{c} \cos\left(\frac{\theta}{2}\right) \\\\ axis\_x \cdot \sin\left(\frac{\theta}{2}\right) \\\\ axis\_y \cdot \sin\left(\frac{\theta}{2}\right) \\\\ axis\_z \cdot \sin\left(\frac{\theta}{2}\right) \end{array} \right) \\] На практике оказывается, что **именно такое представление наиболее удобно для математических расчетов**. -Проиллюстрируем кватернион и остальные описанные выше способы представления ориентации с помощью интерактивной визуализации. Изменяйте угол поворота *θ* с помощью ползунка (ось вращения константна) и изучите, как меняется ориентация объекта, вектор вращения и кватернион: +Проиллюстрируем кватернион и описанные выше способы представления ориентации на интерактивной визуализации. Изменяйте угол поворота *θ* с помощью ползунка (ось вращения константна) и изучите, как меняется ориентация объекта, вектор вращения и кватернион:

@@ -269,7 +269,7 @@ Quaternion q = Quaternion::fromBetweenVectors(v1, v2); // в виде квате Vector rotation = Vector::rotationVectorBetween(v1, v2); // в виде вектора вращения ``` -Шорткаты для работы с вращением по рысканию (удобно для алгоритмов управления полетом): +Шорткаты для работы с углом Эйлера по рысканью (удобно для алгоритмов управления полетом): ```cpp float yaw = q.getYaw();