Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
 Аватар для Jman
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860

Движение самолета вокруг земного шара

05.10.2018, 16:05. Показов 1838. Ответов 2

Студворк — интернет-сервис помощи студентам
Всем привет, столкнулся с неизвестной мне темой. Задача вроде плевая, но уже несколько дней не могу въехать в тему. Необходимо на 3D модел Земли гонять по кругу трехмерную модель самолета. Трек фейковый, не важно где, главное что бы по кругу. Примерно как на картине в пристежке. Почитал про физику, и про квантернионы (также про pitch, roll, yaw), пока не особо понял, вернее вообще не въехал. Есть у меня самолетик например из 3Dмакса, как его установить ровно на треке согласно координатам? И как его вращать. Как это все применить. И к сожалению примеров, куда подглядеть особо и не нашел. Буду благодарен лубой помощи, заранее спасибо!
Миниатюры
Движение самолета вокруг земного шара  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.10.2018, 16:05
Ответы с готовыми решениями:

Движение самолета
Подскажите пожалуйста, как сделать следующее задание: Движение самолета по круговой траектории по часовой стрелке. Сталкиваюсь с этим...

Движение шара: удаление от нас из центра экрана
Разработать программу C#. которая демонстрирует на экране движение шара: шар улетает от нас из центра экрана У меня есть программа с...

90% земного шара будет покрыто сотовыми сетями
В обозримом будущем пользоваться мобильной связью смогут практически все жители земного шара. С таким громким заявлением выступила...

2
 Аватар для Jman
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
05.10.2018, 16:37  [ТС]
Прошу прощения за ошибки и опечатки. Не могу найти, как подправить название темы и отредактировать само сообщение.
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
08.10.2018, 20:34
Лучший ответ Сообщение было отмечено Jman как решение

Решение

Цитата Сообщение от Jman Посмотреть сообщение
Движение самолета вокруг земного шара
1) Сначала определимся с системой координат. Поскольку используется HelixToolKit, то в нем используется нестандартная система координат:
Название: Скриншот 2018-10-08 19.38.42.png
Просмотров: 40

Размер: 7.4 Кб

Для того, что бы привести модель самолета к этой системе, открываем модель в любом 3d редакторе и переворачиваем так, что бы нос самолета смотрел по оси X, а верх самолета - по оси Z:


2) Далее. Найдем матрицу вращения самолета, если дан вектор forward (направление вперед) и вектор up (направление вверх) для самолета. Вспомним, что матрица перехода из одной системы координат в другую представляет собой базисные вектора, записанные в строках матрицы (или в столбцах, но у нас будет в строках).
Таким образом находим матрицу вращения (а также заносим в ту же матрицу масштабирование и сдвиг самолета):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
        Transform3D GetPlaneTransform(Vector3D forward, Vector3D up, Vector3D pos)
        {
            //look at
            var v1 = forward;
            var v3 = up;
            var v2 = Vector3D.CrossProduct(v1, v3);
 
            var m = new Matrix3D(
                v1.X, v1.Y, v1.Z, 0,
                v2.X, v2.Y, v2.Z, 0,
                v3.X, v3.Y, v3.Z, 0,
                0, 0, 0, 1);
 
            //scale
            m.Scale(new Vector3D(PlaneScale, PlaneScale, PlaneScale));
 
            //pos
            m.Translate(pos);
 
            //
            return new MatrixTransform3D(m);
        }
3) Далее, найдем путь самолета, его смещение по времени и вектора forward и up.
Пусть необходимо передвинуться из точки A в точку B:

Понятно, что самолет не передвигается мгновенно, поэтому за промежуток времени dt он бы оказался не в точке B, а в промежуточной точке P:
P = A + dt * (B - A) / |B - A|
Также понятно, что самолет не двигается по прямой, а должен огибать землю. Поэтому нужно найти проекцию точки P на поверхность земли. Для того, чтобы ее найти, нормируем вектор P и умножаем на радиус Земли:
P1 = R * P / |P|
Теперь находим вектор перемещения d:
d = P1 - A
Пронормировав этот вектор, получаем направление в котором летит самолет:
forward = d / |d|

Теперь найдем направление up, то есть направление куда смотрит крыша самолета. Понятно, что самолет всегда летит параллельно земле, поэтому вектор вверх всегда совпадает с вектором позиции самого самолета, то есть P1 (см рисунок выше).
Таким образом:
up = P1 / |P1|

Оформляя в виде кода получаем:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
            //calc orientation and new pos of plane
            var P = PlanePos + Normalized(B - PlanePos) * dt;
            var P1 = R * Normalized(P);
            var d = P1 - PlanePos;
 
            //plane forward and up direction
            var forward = Normalized(d);
            var up = Normalized(P);
 
            //apply transform
            plane.Transform = GetPlaneTransform(forward, up, P * (1 + HeightOverGround));
            view1.InvalidateVisual();//redraw
 
            //new Plane position
            PlanePos = P1;
4) Помещая код движения самолета в таймер получаем конечный результат:
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.10.2018, 20:34
Помогаю со студенческими работами здесь

Магниты - меняют свою полярность в разных частях земного шара - давайте проведём эксперимент!
Помогите с ответом на этот вопрос - если кто что заметил!

Найти момент инерции I и момент импульса земного шара относительно оси вращения
Найти момент инерции I и момент импульса земного шара относительно оси вращения.Масса Земли равна m=6*10^24 кг,радиус Земли считать равным...

Уравнение движение самолета
Друзья, как вычислить скорость самолета. Самолет летит над нами прямолинейно. Вы наблюдаем его всегда под углом. Расстоянию до...

Движение сверхзвукового самолета
Здравствуйте! Мне нужно смоделировать движение сверхзвукового самолета. Литература есть (Мак-Кракен Д., Дорн У. Численные методы и...

Смоделировать движение сверхзвукового самолета
дана блок-схема в фортране, необходимо смоделировать движение сверзвукового самолета в паскале, помогите пожалуйста, никак не могу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru