Форум программистов, компьютерный форум, киберфорум
SFML
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
1 / 1 / 0
Регистрация: 06.05.2021
Сообщений: 228

Движение тела с учётом сопротивления воздуха

01.09.2023, 12:49. Показов 3344. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, вопрос скорее по математике и физике. Моя программа рисует траекторию движения снаряда с учётом сопротивления воздуха. Изначально задаётся скорость и угол, затем она через косинус и синус раскладывается на составляющие по оси Х и У. Затем для каждой оси каждый кадр считается скорость по формуле Vx = Vx - a. Где "a" ускорение создаваемое сопротивлением воздуха. Для оси У Vy = Vy - a - g, если тело перестаёт лететь вверх и начинает падать, то Vy = Vy + a - g, так как скорость меняет знак. В одном из тестов я отключил силу тяжести. По логике вещей, тела должны лететь по прямой, постепенно замедляясь, но вышло всё совсем не так.

Суть проблемы - сопротивление воздуха пропорционально квадрату скорости. Соответственно, если, например, по оси Х скорость больше, чем по оси У, то по оси Х сопротивление воздуха сильнее и скорость падает быстрее. В итоге, тело начинает скривлять траекторию в сторону оси Х. Если же вертикальная составляющая скорости больше, чем горизонтальная, то тело начинает скривлять траекторию в сторону оси У. Этот эффкет выражен тем больше, чем меньше отношение массы тела к его сопротивлению воздуха и чем больше одна из составляющих скорости. Под углом 45 градусов, соответственно, обе составляющих скорости равны и тело летит прямо.

Формулы вроде бы я написал правильно. Возникает вопрос - неужели такой эффект есть и в реальности? Мне почему-то кажется что нет и где то всё же кроется ошибка. Ведь сила сопротивления воздуха должна иметь вектор направленный ровно в противоположную сторону вектору скорости.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.09.2023, 12:49
Ответы с готовыми решениями:

Движение тела, брошенного под углом к горизонту, с учетом сопротивления воздуха
Пожалуйста, объясните как строить модель движения тела, брошенного под углом к горизонту, с учетом сопротивления воздуха. как находить Vx и...

Моделирование полета тела с учетом сопротивления воздуха
Ребятки, требуется помощь :help:, иначе всю мою группу отчислят :D Вообщем препод потребовал составить две задачи, все в Delphi: ...

Баллистическое движение с учетом сопротивления воздуха
доброго всем времени суток,очень нужна помощь. Для начала опишу условие- нам даны начальные координаты, скорость, угол ,и известно что...

31
 Аватар для zayats80888
6344 / 3515 / 1428
Регистрация: 07.02.2019
Сообщений: 8,981
03.09.2023, 15:15
Студворк — интернет-сервис помощи студентам
Ballantrae, например, вы сами пишете, что у вас там минимум две силы и они не всегда сонаправленны, поэтому менять направление вектора скорости удобнее через операции над векторами, а не через операции над углами.

Добавлено через 5 минут

Не по теме:

Цитата Сообщение от Igor3D Посмотреть сообщение
Совершенно верно, трение может затормозить движение полностью, но не направить его в обратную сторону
И как это связано с
Цитата Сообщение от zayats80888 Посмотреть сообщение
модуль силы не может превышать модуль скорости
?
Сила и скорость, величины разного порядка. Сила может превышать по модулю скорость, ваше "подсечь" делает вычисления не корректными и эту проблему не решает, т.к. проблема "развернуть тело" лежит в плоскости численного интегрирования.

0
03.09.2023, 17:29

Не по теме:

Цитата Сообщение от zayats80888 Посмотреть сообщение
Сила и скорость, величины разного порядка. Сила может превышать по модулю скорость, ваше "подсечь" делает вычисления не корректными и эту проблему не решает
Точнее "ускорение" (не сила), массу здесь полагаем = 1. Пусть len * air_k > 1 (разрешаем), тогда при dt = 1 новый вектор скорости окажется направлен "взад". Конечно этого не случится при разумных dt типа 0.01, но все же

Цитата Сообщение от zayats80888 Посмотреть сообщение
т.к. проблема "развернуть тело" лежит в плоскости численного интегрирования.
Какая-то туманная аргументация "кто где лежит" :)

Вообще здесь это ненужные тонкости, пусть товарищ вектора освоит

0
03.09.2023, 17:59

Не по теме:

Цитата Сообщение от Igor3D Посмотреть сообщение
но все же
Но все же, это не верно.
Решение этой проблемы зависит от потребности задачи.
Если это не вычисления реального времени для какой-то физической симуляции, то можно выбрать подходящий метод интегрирования (Рунге-Кутта, например).
Если нужно вычислять в реальном времени, то силу сопротивления среды следует выделить отдельно, и интегрировать не классическое уравнение движения Ньютона, а решить дифур и интегрировать V(t) = K*tanh((F*t)/(m*K)+tanh-1(V0/K)), где K=sqrt((2*F)/(p*C*S)), а F - все остальные силы, не зависящие от скорости.
В игровых физ. движках упрощают еще больше, просто применяя дэмпинг скорости после интегрирования других сил(что вообще говоря не корректно): V=V0/(1 + K*V0*t), где K=(p*C*S)/(2*m). Часто отбрасывают V0 в знаменателе, делая дэмпинг константным (в реальности сила вязкого трения не способна остановить тело, на бесконечно большом интервале времени скорость будет стремиться к нулю, но тело пройдет бесконечно большое расстояние).

0
03.09.2023, 19:16

Не по теме:

Цитата Сообщение от zayats80888 Посмотреть сообщение
Решение этой проблемы зависит от потребности задачи.
Спасибо, интересно. Хотя, правду сказать, слова "дифур, Рунге, Кутт и.т.п." вызывают негативные ассоциации. Когда-то пытались привлекать физиков с академическим образованием, но дело неизменно упиралось в "дифуры" и ничем хорошим не кончалось :(

Ну и вряд ли решение дифура сведется к "сопротивление пропорционально квадрату скорости", это наверняка упрощение. И что, при скорости напр 100 объект тормозится с ускорением -200? НЕ ВЕРЮ :) (хотя конечно доказать не могу). Кстати кто такие p, C, S ? (последнее наверно лобовая площадь?). Спасибо

0
03.09.2023, 19:26

Не по теме:

Цитата Сообщение от Igor3D Посмотреть сообщение
Ну и вряд ли решение дифура сведется к "сопротивление пропорционально квадрату скорости", это наверняка упрощение.
Решение дифура я вам показал - это первая формула V(t). Все сводится к гиперболическому тангенсу (к экспонентам).
Решение дифура без учета остальных сил(естественное торможение) - вторая формула.
Цитата Сообщение от Igor3D Посмотреть сообщение
И что, при скорости напр 100 объект тормозится с ускорением -200? НЕ ВЕРЮ :)
Очень легкое тело с высоким коэффициентом лобового сопротивления в очень вязкой среде - запросто (пластина из оргстекла метр на метр в тормозной жидкости, например).
Цитата Сообщение от Igor3D Посмотреть сообщение
Кстати кто такие p, C, S ?
Плотност среды, коэффициент сопротивления и характерная площадь.

0
03.09.2023, 20:19

Не по теме:

Цитата Сообщение от zayats80888 Посмотреть сообщение
Очень легкое тело с высоким коэффициентом лобового сопротивления в очень вязкой среде - запросто (пластина из оргстекла метр на метр в тормозной жидкости, например).
Согласен. И такая ситуация возможна и для воздуха если учесть массу, тогда ускорение на нее надо делить. И при малой массе (пушинка) ускорение тормоза может быть намного больше текущей скорости. Да, пушинка может потерять всю свою скорость (напр 100) менее чем за секунду, почему нет? Правда в расчётах все равно это надо пресекать, возможно уменьшать шаг dt адаптивно

zayats80888, возможно эта тема ускользнула от Вашего внимания, там Ваши познания в физике были бы очень кстати. Спасибо

0
1 / 1 / 0
Регистрация: 06.05.2021
Сообщений: 228
07.04.2024, 19:19  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
В векторной форме формула для лобового сопротивления будет выглядеть так:
Хм, а из этой формулы не выходит так, что даже если вектор скорости тела направлен строго вдоль оси X, то величина этого вектора, тем не менее, будет влиять на составляющую Y вектора силы сопротивления? Т.е. получается, что скорость увеличивается по горизонтали, а сила сопротивления почему-то увеличивается и по горизонтали и по вертикали.

По крайней мере, у меня получается ситуация, при которой время полёта тела, почему то увеличивается от величины скорости. Особенно хорошо это заметно, если одному телу задать начальную скорость 0, а второму большое значение по направлению вдоль оси X. По идее, два тела должны упасть одновременно. Просто одно из них ещё улетит в сторону. Тем не менее, тело, которое летит вдоль оси X падает на 3 секунды позже. А этого явно быть не должно.
0
 Аватар для zayats80888
6344 / 3515 / 1428
Регистрация: 07.02.2019
Сообщений: 8,981
07.04.2024, 19:29
Цитата Сообщение от Ballantrae Посмотреть сообщение
Хм, а из этой формулы не выходит так, что если вектор скорости тела направлен строго вдоль оси X, то величина этого вектора, тем не менее, будет влиять на составляющую Y вектора силы сопротивления?
Каким образом? Если vy = 0, то Fy = 0, независимо от значения vx.

Добавлено через 2 минуты
Цитата Сообщение от Ballantrae Посмотреть сообщение
По крайней мере, у меня получается ситуация, при которой время полёта тела, при условии, что начальный вектор скорости направлен вдоль оси X, почему то увеличивается от величины скорости. А этого явно быть не должно.
Почему не должно и причем тут "составляющуя Y вектора силы сопротивления"?
0
1 / 1 / 0
Регистрация: 06.05.2021
Сообщений: 228
07.04.2024, 20:01  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
Каким образом? Если vy = 0, то Fy = 0, независимо от значения vx.
Ну вот пример:

Vx сопр = PCS * V *Vx \ 2.
Vy сопр = PCS * V *Vy \ 2.

Вот допустим, что у меня Vx = 1000 м/с, а Vy = 10м/с. V в этот момент времени равна sqrt(1000^2 + 10^2) = 1000.05 м/с. Получается

Vx сопр = PCS * 1000.05 * 1000 \ 2.
Vy сопр = PCS * 1000.05 * 10 \ 2.

Если увеличить значение скорости в 10 раз по оси X, то V = sqrt(10000^2 + 10^2) = 10000.05 м/с. И:
Vx сопр = PCS * 10000.05 * 1000 \ 2.
Vy сопр = PCS * 10000.05 * 10 \ 2.

Так вот и получается, что от горизонтальной составляющей зависит вертикальная составляющая силы сопротивления.

Добавлено через 6 минут
Цитата Сообщение от zayats80888 Посмотреть сообщение
Почему не должно и причем тут "составляющая Y вектора силы сопротивления"?
Я же правильно понимаю, что если на тело действует сила тяжести, то оно будет лететь ровно столько, сколько ему потребуется на то что бы достигнуть земли? А раз так, то не важно, какая у него горизонтальная составляющая скорости. Важна только вертикальная составляющая. По если взять два тела, расположить на одной и той же высоте, одно тело запустить строго горизонтально с какой-то скоростью, а другое просто отпустить, то они оба достигнут земли одновременно. В моей программе, тем не менее, тело, запущенное вбок, падает на 3 секунды дольше.
0
 Аватар для zayats80888
6344 / 3515 / 1428
Регистрация: 07.02.2019
Сообщений: 8,981
07.04.2024, 20:07
Цитата Сообщение от Ballantrae Посмотреть сообщение
У меня на тело действует сила тяжести, по этому вертикальная составляющая скорости появляется сразу. А как только она появляется на неё начинает влиять значение скорости.
Понял. Это нормально.
Если хотите расчитывать достовернее, то интегрируйте линейные дифуры, о чем я уже писал.
Если для вас это вызывает трудности, то смиритесь с тем, что есть.

Не по теме:

Кстати, спутник, сходя с орбиты, за счет трения об атмосферу приобретает энергию и может "отскакивать" назад. Так что не удивляйтесь.

1
1925 / 786 / 110
Регистрация: 01.10.2012
Сообщений: 4,451
Записей в блоге: 2
08.04.2024, 15:30
Цитата Сообщение от Ballantrae Посмотреть сообщение
Я же правильно понимаю, что если на тело действует сила тяжести, то оно будет лететь ровно столько, сколько ему потребуется на то что бы достигнуть земли? А раз так, то не важно, какая у него горизонтальная составляющая скорости. Важна только вертикальная составляющая. По если взять два тела, расположить на одной и той же высоте, одно тело запустить строго горизонтально с какой-то скоростью, а другое просто отпустить, то они оба достигнут земли одновременно.
Напрашивается пример: выстрел (с высоты человеческого роста). Время свободного падения - (малые) доли секунды, а пуля/снаряд летит и секунду и больше. Дело в сопротивлении воздуха
0
 Аватар для zayats80888
6344 / 3515 / 1428
Регистрация: 07.02.2019
Сообщений: 8,981
08.04.2024, 15:49
Цитата Сообщение от Igor3D Посмотреть сообщение
Напрашивается пример: выстрел (с высоты человеческого роста). Время свободного падения - (малые) доли секунды, а пуля/снаряд летит и секунду и больше.
Есть еще более наглядный. Все бросали камни в воду, если бросать горизантально с "хорошей" скоростью, то он будет прыгать по воде, а если с "плохой" (или вообще нулевой) скоростью, то он сразу утонет.
Кликните здесь для просмотра всего текста
Там конечно механизм сложнее, но величина силы отталкивания так же пропорциональна квадрату скорости, поэтому такой эффект.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.04.2024, 15:49
Помогаю со студенческими работами здесь

Расчет траектории движении тела с учетом сопротивления воздуха
Подобная задача, без учета сопротивления среды была только, что мною решена. если поможет, могу выложить листинг со скрином. но тут...

Траектория движения тела, брошенного под углом к горизонту с учетом сопротивления воздуха
Здравствуйте, дорогие форумчане возник вопрос как рассчитать траекторию движения тела с учетом сопротивления воздуха. Наткнулся на эту...

Траектория тела, брошенного под углом к горизонту, с учетом силы сопротивления воздуха
Помогите,пожалуйста, в построении графика движения тела , брошенного под углом к горизонту, с учетом силы сопротивления воздуха(я взял из...

Движение тела брошенного под углом к горизонту с учетом сопротивления
Нужна программа в среде Delphi(желательно), моделирующая Движение тела брошенного под углом к горизонту с учетом сопротивления(!) Помогите...

Программа "падение тела с учетом сопротивления воздуха"
Заранее прошу прощения за все косяки и ошибки! итак Здравствуйте! я пытаюсь написать программу для моделирования падающего тела с...


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
dev-c++5.11 Продолжаю движение.
russiannick 08.06.2025
Казалось, день прошел впустую. Просмотрел кучу видео и только потом заметил заголовок - уроки си. Искусители сбивали новичка с пути с++. Так легко ошибиться когда вокруг столько яп содержащих в. . .
Квантовые алгоритмы и обработка строк в Q#
EggHead 07.06.2025
Квантовые вычисления перевернули наше представление о том, как работать с данными, а Q# стал одним из ключевых языков для разработки квантовых алгоритмов. В традиционых системах мы оперируем битами —. . .
NUnit и C#
UnmanagedCoder 07.06.2025
В . NET существует несколько фреймворков для тестирования: MSTest (встроенный в Visual Studio), xUnit. net (более новый фреймворк) и, собственно, NUnit. Каждый имеет свои преимущества, но NUnit. . .
с++ Что нового?
russiannick 06.06.2025
Продолжаю обзор dev-cpp5. 11. Посмотрев на проекты, предоставленные нам для обучения, становится видно, что они разные по содержащимся файлам где: . dev обязательно присутствует . cpp/ . c один из них. . .
WebAssembly в Kubernetes
Mr. Docker 06.06.2025
WebAssembly изначально разрабатывался как бинарный формат инструкций для виртуальной машины, обеспечивающий высокую производительность в браузерах. Но потенциал технологии оказался гораздо шире - она. . .
Как создать первый микросервис на C# с ASP.NET Core, step by step
stackOverflow 06.06.2025
Если говорить простыми словами, микросервисная архитектура — это подход к разработке, при котором приложение строится как набор небольших, слабо связанных сервисов, каждый из которых отвечает за. . .
Рисование коллайдеров Box2D v2 на Three.js с помощью порта @box2d/core
8Observer8 06.06.2025
Используется порт Box2D v2 под названием @box2d/ core - пакет NPM. Загрузил документацию Box2D v2 на Netlify: https:/ / box2d-v2-docs. netlify. app/ Документацию Box2D v2 можно скачать с официального. . .
Как создать стек в Python
AI_Generated 05.06.2025
Как архитектор с более чем десятилетним опытом работы с Python, я неоднократно убеждался, что знание низкоуровневых механизмов работы стеков дает конкурентное преимущество при решении сложных задач. . . .
Server-Sent Events (SSE) в Node.js
run.dev 05.06.2025
Потоковая передача данных с сервера прямо в браузер стала повседневной потребностью - от биржевых графиков и спортивных трансляций до чатов и умных дашбордов. Много лет разработчики полагались на. . .
Создаем RESTful API на Golang с Fiber
golander 04.06.2025
Я перепробовал десятки фреймворков для создания RESTful API за последние годы, и когда впервые столкнулся с Fiber, понял, что это совсем другой уровень. Нет, я не собираюсь рассказывать сказки о. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
OSZAR »