2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему
 
 Полет космического корабля
Сообщение24.10.2016, 19:09 


10/05/13
251
Добрый день!

Я программирую космический корабль. Ему можно задавать скорости по x, y, z. ( Его локальная система координат )
Т. е. он может летать налево-направо от себя, вперед-назад, вверх-вниз.

Когда его система координат совпадает с мировой - я просто задаю эти скорости и он двигается вверх вниз и т. д. все очень хорошо.

Но стоит мне его чуточку повернуть, по оси x, или y (повернуть его систему координат), то у него оси тоже смещаются и вот уже вместо того, чтобы лететь направо ( в мировых координатах ) он летит вниз и т. д.

Как я понял, можно решить задачу, научившись переводить вектора из одной системы координат в другую.
У корабля я могу получить матрицу переходов.
Вот это я нашел в википедии:
Цитата:
При умножении матрицы, обратной к матрице перехода, на столбец, составленный из коэффициентов разложения вектора по базису $a_{1},a_{2},\ldots ,a_{n}$, мы получаем тот же вектор, выраженный через базис $b_{1},b_{2},\ldots ,b_{n}$ .

Я не очень четко представляю как это делается.

 Профиль  
                  
 
 Re: Полет космического корабля
Сообщение24.10.2016, 19:31 
Заслуженный участник


27/04/09
28128
Складывается впечатление, что вам надо преобразовать компоненты вектора скорости из одного базиса в другой.

P. S. А, ну вот вы как раз это и дописали.

 Профиль  
                  
 
 Re: Полет космического корабля
Сообщение24.10.2016, 19:34 


10/05/13
251
arseniiv
Да! Точно!
У меня есть матрица переходов (преобразований, это ведь одно и то же?) корабля.
И есть вектора скоростей, которые заданы в мировых координатах. Мне надо теперь
эти вектора скоростей, преобразовать в вектора в системе координат корабля, но
вот как это сделать?

 Профиль  
                  
 
 Re: Полет космического корабля
Сообщение24.10.2016, 19:37 
Заслуженный участник


27/04/09
28128
Сначала вам надо разобраться, как векторы самих базисов выражаются друг через друга. Это зависит от того, как ваш корабль повёрнут и как вы задаёте его ориентацию вообще. Потом нужная формула с матрицей перехода получится автоматически.

 Профиль  
                  
 
 Re: Полет космического корабля
Сообщение24.10.2016, 19:40 


10/05/13
251
arseniiv
не очень понял :D

 Профиль  
                  
 
 Re: Полет космического корабля
Сообщение24.10.2016, 19:57 
Заслуженный участник


27/04/09
28128
Чтобы преобразовать компоненты скорости, надо знать, откуда куда. У вас, вроде бы, есть один базис, в котором компоненты скорости задаются для неповёрнутого корабля. Теперь сначала надо разобраться, как вы задаёте поворот корабля — иначе, разумеется, пересчитывать в «правильный» базис не из чего.

 Профиль  
                  
 
 Re: Полет космического корабля
Сообщение26.10.2016, 13:56 


10/05/13
251
arseniiv
через матрицу поворотов

 Профиль  
                  
 
 Re: Полет космического корабля
Сообщение26.10.2016, 21:59 
Заслуженный участник


27/04/09
28128
Ну так она и будет тогда матрицей перехода от базиса к базису.

 Профиль  
                  
 
 Re: Полет космического корабля
Сообщение31.10.2016, 12:44 


10/05/13
251
arseniiv
Спасибо большое! Разобрался!
Но тут возник еще один вопрос:
Вот стоит мой космический корабль. (По форме он похож на блин).
Я хочу сделать так, чтобы при торможении, он наклонялся вперед.
Как я понял, для этого надо знать, вектор скорости.
Как повернуть корабль по вектору скорости (на рис. зеленая стрелка), как бы наклонить его?
Изображение

 Профиль  
                  
 
 Re: Полет космического корабля
Сообщение31.10.2016, 13:55 
Заслуженный участник


27/04/09
28128
Для этого, на самом деле, нужно ещё знать и направление вверх (когда оно вообще определено — и действительно, если корабль залетел в глубокий космос, там ему наклоняться будет уже точно неестественно). После этого у нас есть плоскость, поворот в которой в базисе $(\mathbf u, \boldsymbol\tau)$, где $\boldsymbol\tau$ — единичный вектор, направленный по скорости, $\mathbf u$ — единичный вектор, направленный «почти вверх», но ортогональный $\boldsymbol\tau$ (можно взять вектор строго вверх и сделать ортогонализацию), задаётся обычной матрицей$$\begin{bmatrix} c & -s \\ s & c \end{bmatrix},\qquad c=\cos\alpha, s=\sin\alpha.$$Матрица поворота во всём пространстве получится блочная из этой и единичной $1\times1$, если дополнить этот базис плоскости поворота до базиса всего пространства каким-нибудь ортогональным $\mathbf u, \boldsymbol\tau$ единичным вектором — например, их векторным произведением.

А вообще это всё входит в стандартный курс линейной алгебры. :wink:

 Профиль  
                  
 
 Re: Полет космического корабля
Сообщение31.10.2016, 15:04 
Заслуженный участник
Аватара пользователя


01/09/13
4321
frankenstein в сообщении #1164675 писал(а):
Я хочу сделать так, чтобы при торможении, он наклонялся вперед.

Корабль в космосе не может наклоняться - он может иметь ненулевую скорость вращения. При работе двигателей (если они не отцентрированы) такое вращение легко приобрести. Труднее будет его остановить, не говоря уж о том, что бы скомпенсировать смещение "поперёк траектории".

 Профиль  
                  
 
 Re: Полет космического корабля
Сообщение01.11.2016, 13:54 


10/05/13
251
Geen
У меня он не в космосе, он летает близко к земле, прямо над поверхностью. На самом деле это квадрокоптер.

-- 01.11.2016, 15:56 --

arseniiv
Направление вверх, да, согласен.
Стандартный курс алгебры. Да, я очень жалею, что плохо ее знаю.
Очень хочу найти, что-то вроде курсов алгебры для разработчиков.
С программируемыми задачами, где можно было бы поэкспериментировать
с кватернионами, векторами, матрицами и т. д.

 Профиль  
                  
 
 Re: Полет космического корабля
Сообщение01.11.2016, 14:05 
Заслуженный участник
Аватара пользователя


01/09/13
4321
frankenstein в сообщении #1165016 писал(а):
У меня он не в космосе, он летает близко к земле, прямо над поверхностью.

frankenstein в сообщении #1162623 писал(а):
Я программирую космический корабль

:shock: своеобразно...
Но по сути, это ничего не меняет.

frankenstein в сообщении #1165016 писал(а):
На самом деле это квадрокоптер.

frankenstein в сообщении #1164675 писал(а):
Я хочу сделать так, чтобы при торможении, он наклонялся вперед.

:shock: ещё более своеобразно....

 Профиль  
                  
 
 Re: Полет космического корабля
Сообщение01.11.2016, 14:13 


05/09/16
11539
frankenstein в сообщении #1164675 писал(а):
Я хочу сделать так, чтобы при торможении, он наклонялся вперед.

а если он едет боком (вектор скорости корабля не параллелен направлению "вперед" самого корабля)?

 Профиль  
                  
 
 Re: Полет космического корабля
Сообщение24.12.2016, 21:54 


10/05/13
251
Спасибо всем за помощь, в итоге решил все эти наклоны при повороте или торможении сделать через анимацию.
Так намного проще

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: seraphimt


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group