عرض العرض التوضيحي · الإبلاغ عن خطأ · طلب ميزة

هذا برنامج بيثون لمحاكاة تفاعلات الكواكب
وهذا يعني أنه يمكنك إدخال كتل الكواكب والمواقف والسرعة الأولية وسيظهر لك برنامجنا كيف يمكن أن يتفاعلوا مع كل من كل منا في محاكاة لطيفة
سيظهر لك برنامجنا سيناريو متوقعًا ولكنه قد لا يكون دقيقًا بنسبة 100 ٪.
هناك العديد من العروض التجريبية الجاهزة قد تثير إعجابك!
بعض الأشياء التي يمكنك القيام بها مع تطبيقنا:
تأكد من تثبيت جميع المتطلبات الأساسية التالية على آلة التطوير الخاصة بك:
pip --version
أولاً ، افتح CMD في المكان الذي تريد تنزيله للمشروع ثم اكتب هذه الأوامر:
استنساخ المستودع إلى جهازك المحلي:
git clone https://github.com/suliman-99/Space-Simulation.git
انتقل إلى دليل المشروع:
cd Space-Simulation
ثم لتثبيت وحدة Pipenv بواسطة PIP ، فقط اكتب هذا الأمر على CMD الخاص بك
pip install pipenv
تثبيت التبعيات المطلوبة باستخدام pipenv:
pipenv install
تشغيل المشروع:
Windows:
python main.py
Linux أو Mac:
python3 main.py
تتمثل الخطوة الأولى في تشغيل البرنامج باتباع تثبيت القسم السابق.
سيتم فتح التطبيق باستخدام أزرار السحب: انقر فوق Create new Simulation لإنشاء نسخة جديدة أو اختيار Simulation From File لفتح عرض تجريبي جاهز أو لفتح العروض التوضيحية المحفوظة
ثم انقر فوق Run Simulation لبدء المحاكاة
سيتم فتح متصفحك الافتراضي مع صفحة المحاكاة
يمكنك حفظ الحالة الحالية من خلال النقر على زر Save State وسيتم حفظه في ملف demos/saved_state.txt ، ويمكنك استخدامه مرة أخرى من هناك
إذا كنت ترغب في تجربة عرض تجريبي جديد ، فأثق في القول إنك بحاجة إلى إغلاق البرنامج وفتحه مرة أخرى
قانون نيوتن للجاذبية الشاملة
F = (G * m1 * m2) / r^2
G : ثابت الجاذبية
m1 ، m2 : جماهير هذين الكائنين
r : المسافة بين مراكز الجماهير
F : قوة الجاذبية التي تتصرف بينهما
نستخدم هذه الصيغة لحساب قوة كل زوج من الكواكب
نقوم بتحديث إجمالي القوة لـ Planeets بهذه الطريقة:
def apply_gravity(planet1: Planet, planet2: Planet) -> None:
u = planet2.pos - planet1.pos
grav = g * planet1.mass * planet2.mass / (u.length() ** 2)
planet1.add_force(u.scale_to(grav))
planet2.add_force(u.scale_to(-grav))
القانون الثاني لنيوتن
F = m * a => a = F / m
m : كتلة الكائن
F : القوة الكلية المطبقة عليه
a : تسارعها
نستخدم هذه الفوم لحساب تسارع كل كوكب اعتمادًا على إجمالي القوة المطبقة عليه
بعد ذلك يمكننا حساب السرعة الجديدة (متجه السرعة) اعتمادًا على السرعة الحالية والتسارع
بعد ذلك يمكننا حساب الموضع الجديد (x ، y ، z) اعتمادًا على الموضع الحالي والسرعة
ثم يمكننا إعادة تقديم الكائن في المكان الجديد
يمكننا أن نفعل ذلك كثيرًا من الوقت في نفس الثانية (أكثر من 10 وقت) وسيكون لدينا تصور جيد
نقوم بتحديث بيانات palnet بهذه الطريقة:
def update(self, dt: float) -> None:
self.pos += (self.velocity * dt) + (self.acceleration * ((dt ** 2) / 2))
self.velocity += self.acceleration * dt
self.acceleration = self.force / self.mass
موضوع آخر تصادم
Project Name
│ main.py
└───core
│ │ camera.py
│ │ environment.py
│ │ file.py
│ │ physics.py
│ │ planet.py
│ │ vector.py
│
└───gui
│ screens
│ app.py
│ controls.py
assets هنا هي صورناdemos هنا هي العروض التوضيحية لدينا والدول المحفوظة كملفاتresources هنا بعض المتغيرات العالمية Subidtesting هذا هو مجلد الاختبار لدينا إذا كان لديك اقتراحات حول كيفية تحسين تحديث الفضاء ، أو ترغب في الإبلاغ عن خطأ ، افتح مشكلة! كنا نحب الجميع وأي مساهمات.
للمزيد ، تحقق من دليل المساهمة.
Suliman Awad - [email protected] - LinkedIn
رابط المشروع: https://github.com/suliman-99/space-simulation
رخصة معهد ماساتشوستس للتكنولوجيا
حقوق الطبع والنشر (C) 2023 Suliman Awad
لمزيد من المعلومات ، تحقق من ملف الترخيص.