# 自主學習成果報告 ## 主題:物理運動模擬——以程式模擬拋體與萬有引力運動 ## 一、學習動機與目標 我對物理中的力學十分感興趣,尤其是透過數學公式模擬物體實際運動的過程。透過這次自主學習,我希望能夠將課堂上學到的運動定律,結合電腦程式實作,例如用 C++ 和 Raylib 套件模擬拋體運動、萬有引力下的行星運動等。 ### 學習目標: 1. 熟悉基本的物理運動模型(直線、自由落體、斜拋、圓周、重力軌道等)。 2. 利用程式語言將數學公式轉換為模擬程式。 3. 完成一個互動式模擬作品,並理解其背後的物理意義。 --- ## 二、學習計畫與方法 ### 學習計畫表: | 週次 | 內容 | 備註 | | --- | ---------------------------------- | ------------------------ | | 第1週 | 查閱相關模擬案例,決定模擬主題與開發工具(Raylib + C++) | 參考 YouTube 與 GitHub 上的專案 | | 第2週 | 溫習拋體運動與重力定律 | 整理出運動方程式 | | 第3週 | 開始撰寫基本模擬框架(初始化、顯示畫面、繪製物體) | 完成一個簡單小球動畫 | | 第4週 | 實作拋體運動模擬,加入使用者互動功能(設定初速度、角度) | 測試不同參數對軌跡的影響 | | 第5週 | 加入重力模擬,模擬行星繞太陽運動 | 完成成果報告 | ### 學習方法: * 利用AI查詢 Raylib 文件 * 與同學討論物理模型與模擬策略 * 撰寫學習筆記與數學推導過程 --- ## 三、學習內容與成果 ### 模擬項目 1:斜拋運動模擬 * 利用公式 $$ x = v_0 \cos(\theta)t,\quad y = v_0 \sin(\theta)t - \frac{1}{2}gt^2 $$ * 球體間彈性碰撞推導 設兩球為 A、B,質量分別為 $m_1, m_2$,速度分別為向量 $\vec{v}_1, \vec{v}_2$,位置為 $\vec{p}_1, \vec{p}_2$。 當兩球發生碰撞時,假設為**瞬間碰撞**,並假設球為圓形、剛體、無旋轉。 1. **找出碰撞方向的單位向量(法線方向):** $$ \hat{n} = \frac{\vec{p}_1 - \vec{p}_2}{\|\vec{p}_1 - \vec{p}_2\|} $$ 2. **計算相對速度在該方向的投影(撞擊量):** $$ v_{rel} = (\vec{v}_1 - \vec{v}_2) \cdot \hat{n} $$ 3. **若兩球正在靠近才處理碰撞:** 如果 $v_{rel} > 0$,表示兩球正在遠離,不處理碰撞。 4. **根據彈性碰撞公式,計算衝量 J:** $$ J = \frac{2 m_1 m_2}{m_1 + m_2} \cdot v_{rel} $$ 5. **更新速度:** $$ \vec{v}_1' = \vec{v}_1 - \frac{J}{m_1} \cdot \hat{n}, \quad \vec{v}_2' = \vec{v}_2 + \frac{J}{m_2} \cdot \hat{n} $$ --- ### 模擬項目 2:萬有引力模擬 * 利用萬有引力公式 $$ F = G\frac{m_1m_2}{r^2} $$ * 對物體施加重力加速度並更新位置 * 成果:模擬小球繞行固定「太陽」的軌道運動,可觀察速度改變下的軌跡變化(如圓形、橢圓、拋物線、雙曲線) ### 程式與成果展示: * 程式碼:[https://github.com/Benson0212/physics-simulator-raylib/blob/main/selfLearning/test.cpp](https://github.com/Benson0212/physics-simulator-raylib/blob/main/selfLearning/test.cpp) * 成果照   --- ## 四、反思與收穫 透過這次模擬專題,我深刻體會到物理運動不僅存在於紙上公式,更可以透過程式來「看見」它們。從一開始遇到碰撞偵測與數值誤差等問題,到後來慢慢修正公式與學會除錯,我也提升了寫程式的能力與邏輯思考能力。此外,透過與同學分享,我也學會如何表達抽象的物理概念。 --- ## 五、附件與參考資料 * 自主筆記連結:https://hackmd.io/KUdothWmRjaQkpHPys91rA?view * GitHub 專案連結:https://github.com/Benson0212/physics-simulator-raylib * Raylib 官方網站:[https://www.raylib.com](https://www.raylib.com)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up