Моделирую реальную траекторию движения тела на Python.

avatar Ritsuko

1273

11

Ritsuko

Пользователь

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

Ritsuko

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

Спустя дней 5 обучению pyqt5, matplotlib, SciPy + немного самому пришлось поразбираться в диффурах, ибо в 11 классе не проходят, все таки доделал прогу. Получилось достаточно вроде и даже красиво за счет QT с его HTML, CSS версткой, и реалистично.

 

Программа по заданным начальным условиям (угол броска тела, масса, начальная скорость, скорость ветра и коэффициенту сопротивления воздуха (для тел с разной плотностью он разный) решает систему дифф. уравнений, получает значения x и y на каждом очень маленьком промежутке времени и отображает их на Figure matplotlib (причем анимированно, думаю еще сделать так, чтобы время действии этой анимации совпадало с временем полета, но пока хз как реализовать), ну и выводит в текст эдит время полета.

https://github.com/7eventeen/Kinematic-model-with-air-resistance

Спойлер:

yjLjEAg.png

Спойлер:

rrSfWrl.png

 

Спойлер:

T003fRP.png

 

Офк все чисто по здравому смыслу, никаких школьных траекторий в параболах. Даже кидая под углом в 90, понятное дело, что ветер делает свое дело. (могу ещё легко добавить вывод максимальной достигнутой высоты и длины полета, но тут особо некуда и нужно переделывать интерфейс)

 

Бтв, какое же наслаждение, когда спустя тысячу лет и миллионы ошибок, все таки допрогал эту всю штуковину. Было сложно, ботал по 6+ часов в день, ибо я только начал изучать matplotlib. В целом, если вдруг стану пайтон девелопером, скорее всего, она мне понадобится (думаю в data science, а там это намба ван).

 

Оцените код и вообще саму прогу, бтв изи лутаю оценки с физики из-за этого всего pepecool.png

 

 

 

Удалено 795772

Пользователь

Регистрация: 10.02.2020

Сообщения: -7

Рейтинг: 2

Удалено 795772

Регистрация: 10.02.2020

Сообщения: -7

Рейтинг: 2

Многа букав, не читал особо уж прости. Но красавчик, далеко пойдешь. 

Unborn mind

Пользователь

Регистрация: 27.02.2020

Сообщения: 1756

Рейтинг: 369

Нарушения: 105

Unborn mind

Регистрация: 27.02.2020

Сообщения: 1756

Рейтинг: 369

Нарушения: 105

Zоский

MainFors

Пользователь

Регистрация: 17.05.2019

Сообщения: 600

Рейтинг: 266

MainFors

Регистрация: 17.05.2019

Сообщения: 600

Рейтинг: 266

Это ты где всему этому обучаешься?

Ritsuko

Пользователь

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

Ritsuko

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

MainFors сказал(а):

Это ты где всему этому обучаешься?

Нажмите, чтобы раскрыть...

чему именно? сам пайтон - сначала посмотрел этот курс по алгоритмам

потом курс по практике программирования, там уже разобрался с обжектив ориентированным и как вообще делать программы больше, чем на 30 строк кода   (и те и те лекции для 1 курса, поэтому не важно с чего начнешь, но все же полезно начать именно с алгоритмов)

 

Сейчас смотрю его же лекции по алгоритмам на C++, но основное время трачу на питончик, думаю с некст недели поботать кодинг на С++

 

А библиотеки (да и в целом более подробная инфа по языку, ибо офк в курсе ты сразу все не выучишь) - онли англоязычная документация, stackoverflow.

Unborn mind

Пользователь

Регистрация: 27.02.2020

Сообщения: 1756

Рейтинг: 369

Нарушения: 105

Unborn mind

Регистрация: 27.02.2020

Сообщения: 1756

Рейтинг: 369

Нарушения: 105

када на kaggle? собирем тиму д2ру и залетим в топы pepecool.png

Ritsuko

Пользователь

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

Ritsuko

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

Gay_Passive сказал(а):

када на kaggle? собирем тиму д2ру и залетим в топы pepecool.png

Нажмите, чтобы раскрыть...

бтв этот челик топчик, смотрю его под ночевку

Ritsuko

Пользователь

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

Ritsuko

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

Поднятие темы

saw_tooth

Пользователь

Регистрация: 20.08.2013

Сообщения: 5550

Рейтинг: 3286

saw_tooth

Регистрация: 20.08.2013

Сообщения: 5550

Рейтинг: 3286

https://github.com/7eventeen/Kinematic-model-with-air-resistance/blob/master/main.py#L129

Установи обработку ошибок только в том месте где происходит exception, не надо всю функцию в try/except  брать

https://github.com/7eventeen/Kinematic-model-with-air-resistance/blob/master/pythongui4.py#L52

читай как в qt делаются внешние ресурсы и qss файлы. Инлайн стили это мерзко

Код хороший, комментарии нужные, всю логически разбито на классы.

зы. не советую использовать мульти наследование, это так, на будущее. Тем более что ты не осведомлен о том что в классах-родителях.

Ritsuko

Пользователь

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

Ritsuko

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

saw_tooth сказал(а):

https://github.com/7eventeen/Kinematic-model-with-air-resistance/blob/master/main.py#L129

Установи обработку ошибок только в том месте где происходит exception, не надо всю функцию в try/except  брать

 

Нажмите, чтобы раскрыть...

 

ws = float(...)

..

...

try:

    m = float(...)

except DivisionByZeroError as e

else:

      return

 

так ?

saw_tooth сказал(а):

читай как в qt делаются внешние ресурсы и qss файлы. Инлайн стили это мерзко

Нажмите, чтобы раскрыть...

Делал в QT Designer'e, особо даже не заходил в файл гуи.

saw_tooth

Пользователь

Регистрация: 20.08.2013

Сообщения: 5550

Рейтинг: 3286

saw_tooth

Регистрация: 20.08.2013

Сообщения: 5550

Рейтинг: 3286

EnjoyThePain сказал(а):

Делал в QT Designer'e, особо даже не заходил в файл гуи.

Нажмите, чтобы раскрыть...

советую научиться юзать лейауты, что бы приложение выглядело нормально (нативные виджеты и контролы)

EnjoyThePain сказал(а):

так ?

Нажмите, чтобы раскрыть...

Там где деление выполняется там и ставь

Ritsuko

Пользователь

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

Ritsuko

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

saw_tooth сказал(а):

советую научиться юзать лейауты, что бы приложение выглядело нормально (нативные виджеты и контролы)

Нажмите, чтобы раскрыть...

вообще, подобную программу, не сильно сложно переписать на С++? Сколько примерно строк кода будет?

я конечно напишу другую какую-нить, но чисто интересно, ибо хочу научится плюсам, пробовал C#, но подумал, зачем шарп, если есть плюсы с QT 

saw_tooth

Пользователь

Регистрация: 20.08.2013

Сообщения: 5550

Рейтинг: 3286

saw_tooth

Регистрация: 20.08.2013

Сообщения: 5550

Рейтинг: 3286

EnjoyThePain сказал(а):

вообще, подобную программу, не сильно сложно переписать на С++? Сколько примерно строк кода будет?

Нажмите, чтобы раскрыть...

не сложно

кол. строк не показатель.

https://github.com/7eventeen/Kinematic-model-with-air-resistance/blob/96c217f1c6bf7e61059d4cfb86665b78f4f6d809/main.py#L88

У тебя конструктор зависит от массы, если она 0 то ты не получишь объект класса, учитывая это нужно не exeption ставить, а валидацию массы делать, что она не может равняться нулю.

Ознакамливайся https://doc.qt.io/archives/qt-4.8/qdoublevalidator.html

если придраться:

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

Делается это с помощью сигнал-слотов.

 - подписываемся на onEdit сигнал для каждого контрола ( в случае с валидаторами, там вроде validate сигнал есть, который говорит о том что поле имеет допустимый формат) одним слотом.

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

 - отрисовщик с логикой, по хорошему должен быть связан моделью данных (MVC  вдействии), и тогда он сможет автоматически следить за изменениями, и перерисовывать всё сам.

 

Я не имею ввиду что ты хреново написал, просто рассказываю тебе как в qt принято делать, при тому что event-base система у них одна из вобще самых мощных и удачных в совем роде.

 

@EnjoyThePain 

Вот тебе плюсовой qt со стилями и прочим (я не гуру c++/qt, к коду тоже могут быть вопросы)

Когда то делал для доты, и благополучно забросил, должно было получиться что то типа вот такого