افزونه فیزیک برای Manim (مکانیک، گرانش، اوپتیک، الکترومغناطیس، الکترواستاتیک)
Project description
🎬 manim-fa-physics
افزونه مانیم (مجموعهای از ماژولهای فیزیک) برای به تصویر کشیدن مفاهیم فیزیک از قبیل مکانیک، نور و الکترومغناطیس نوشته شده است.
این افزونه یا پلاگین به شما امکان میدهد تا با خلق صحنههای دینامیک در قالب انیمیشنهای ویدیویی مفاهیم فیزیک را به صورت بصری آموزش دهید.
🔧 نحوه نصب پلاگین
pip install manim-fa-physics
یا برای نصب محلی (در حالت توسعه):
pip install -e .
💡 مثالهای آموزشی
🔹 مثال ۱ — حرکت آونگ ساده
from manim import *
from manim_fa_physics import *
class PendulumDemo(SpaceScene):
def construct(self):
pend = Pendulum(length=3, initial_theta=0.4)
self.add(pend)
self.make_rigid_body(*pend.bobs)
pend.start_swinging()
self.add(TracedPath(pend.bobs[-1].get_center, stroke_color=BLUE))
self.wait(5)
🔹 مثال ۲ — انتشار نور در عدسیهای واگرا
from manim import *
from manim_fa_physics import *
from manim_fa import FaText
class ConcaveLensExampleDynamic(Scene):
def construct(self):
# ساخت عدسی واگرا
lens = Lens(-4, 1, fill_opacity=0.4, color=BLUE).shift(RIGHT)
self.play(FadeIn(lens))
# تعریف پرتوها
rays = [
Ray(LEFT * 4 + UP * i, RIGHT, 8, [lens], color=YELLOW)
for i in [0.6, 0.2, -0.2, -0.6]
]
# نمایش تدریجی پرتوها
for ray in rays:
self.play(Create(ray), run_time=1.2)
self.wait(0.2)
# نمایش متن فارسی با فونت IRLotus
text = FaText(
"عبور پرتوهای نور از عدسی واگرا",
font="IRLotus",
font_size=36
)
text.to_corner(UL) # گوشهی بالا چپ
text.shift(RIGHT * 2 + DOWN * 2)
# انیمیشن نوشتن متن
self.play(Write(text))
self.wait(2)
🔹 مثال ۳ — تغییرات میدان الکتریکی بارها
from manim import *
from manim_fa_physics import *
class DynamicElectricFieldSceneII(Scene):
def construct(self):
# تعریف دو بار ثابت منفی در دو طرف صحنه
neg_left = Charge(-1, LEFT * 3 + DOWN)
neg_right = Charge(-1, RIGHT * 3 + DOWN)
# تعریف یک بار مثبت متحرک
pos_charge = Charge(2, ORIGIN + UP * 0.5)
# ایجاد میدان الکتریکی اولیه بر اساس موقعیت فعلی بارها
field = ElectricField(neg_left, neg_right, pos_charge)
# افزودن اجزای صحنه
self.add(neg_left, neg_right, pos_charge, field)
# تابع بهروزرسانی میدان برای هر فریم
def update_field(field_obj):
field_obj.become(ElectricField(neg_left, neg_right, pos_charge))
field.add_updater(lambda f: update_field(f))
# پویانمایی حرکت بار مثبت
self.play(
pos_charge.animate.shift(RIGHT * 4),
run_time=5,
rate_func=there_and_back,
)
# توقف آپدیت میدان و پایان
field.remove_updater(lambda f: update_field(f))
self.wait(2)
🌀 فهرست کامل انیمیشنهای کاربردی
| نام انیمیشن / کلاس | ماژول | توضیح فارسی | کاربرد آموزشی |
|---|---|---|---|
MultiPendulum |
pendulum.py | یک سیستم چند نوسانی شامل چند وزنه متصل به هم | شبیهسازی نوسان پیچیده چند وزنهای |
Pendulum |
pendulum.py | یک پاندول ساده با طول و زاویه اولیه قابل تنظیم | نمایش حرکت نوسانی پاندول |
SpaceScene |
mechanics.py | صحنه پایه برای اعمال مکانیک سخت و گرانش | ایجاد اشیاء صلب و ثابت، و اعمال نیروهای گرانشی و برخورد |
make_rigid_body |
mechanics.py | تبدیل یک Mobject به جسم متحرک با گرانش و برخورد | نمایش حرکت واقعی اشیاء تحت گرانش |
make_static_body |
mechanics.py | تبدیل یک Mobject به جسم ثابت | ایجاد موانع و سطوح برخوردی |
Lens |
lenses.py | یک عدسی محدب یا مقعر با ضخامت و ضریب شکست مشخص | شبیهسازی شکست نور و رفتار عدسیها |
Ray |
rays.py | پرتو نور که میتواند از عدسیها عبور کند و شکست شود | نمایش عبور نور از عدسیها و قوانین شکست نور |
Charge |
electrostatics.py | بار الکتریکی مثبت یا منفی با اثر میدان الکتریکی | نمایش نقاط بار و تاثیر آنها بر میدان الکتریکی |
ElectricField |
electrostatics.py | میدان الکتریکی تولید شده توسط یک یا چند بار | نمایش خطوط میدان الکتریکی و جهت نیرو |
Wire |
magnetostatics.py | سیم حامل جریان الکتریکی | شبیهسازی منابع میدان مغناطیسی |
MagneticField |
magnetostatics.py | میدان مغناطیسی تولید شده توسط سیمها | نمایش خطوط میدان مغناطیسی و جهت نیرو |
TwoObjectsFalling |
examples / mechanics | سقوط دو جسم با برخورد و گرانش | نمایش حرکت آزاد و برخورد اشیاء تحت گرانش |
DynamicElectricFieldAdvanced |
examples / electrostatics | نمایش میدان الکتریکی بارهای مثبت و منفی با آرروهای پویا | مثال پیشرفته برای رفتار دینامیک میدانها |
DynamicEMFieldScene |
examples / advanced | ترکیب میدانهای الکتریکی و مغناطیسی با حرکت بارها و سیمها | شبیهسازی واقعگرایانه میدانهای الکترومغناطیس |
🧾 مجوز
این پروژه تحت مجوز MIT منتشر میشود.
ساختهشده توسط علی تابش برای جامعهی فارسیزبان Manim.
🤝 مشارکت
اگر پیشنهادی برای بهبود پلاگین، کلاسها، تابعها یا سازگاری با نسخههای جدید Manim دارید،
Pull Request بسازید یا در بخش Issues مطرح کنید.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file manim_fa_physics-0.1.0.tar.gz.
File metadata
- Download URL: manim_fa_physics-0.1.0.tar.gz
- Upload date:
- Size: 15.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
31ab2fcdc117434b9bc1783a7f853d49e15bc9dd5c3a890117c0ce89db126471
|
|
| MD5 |
4d68c7f6420ed4ae916eb9600794b097
|
|
| BLAKE2b-256 |
ea603cfcad63e05a7b8fb5a9f198a5d48ef0d082194fadfd923203d226aca0a0
|
File details
Details for the file manim_fa_physics-0.1.0-py3-none-any.whl.
File metadata
- Download URL: manim_fa_physics-0.1.0-py3-none-any.whl
- Upload date:
- Size: 16.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ae44ca2a3a059c28e565cd37deba2e3f1147686f4e894d8991bf9b37ee3935cd
|
|
| MD5 |
05940a7368d2a9547fb02fde1a197129
|
|
| BLAKE2b-256 |
f2f20b5c49597c57f30b702eab416cea718dc1c89398c9f88669ff9fa904d242
|