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
4318
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
4318
frankenstein в сообщении #1165016 писал(а):
У меня он не в космосе, он летает близко к земле, прямо над поверхностью.

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

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

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

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

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

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


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

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

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


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

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

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



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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