Lesson 10 — Friction, Resting & Stacking

Ba phòng thí nghiệm tương tác cho phần khó nhất của physics engine: ma sát tiếp tuyến, tiếp xúc nghỉ, hiệu chỉnh vị trí, xếp chồng ổn định và sleeping. Mỗi sim chạy realtime — kéo slider để thấy hệ vỡ hoặc đứng yên.

1. Xếp chồng & số iteration giải/frame

Chồng nhiều hộp. Slider chọn số iteration giải tiếp xúc mỗi frame. Ít iteration → sai số dồn xuống đáy, tháp rung rồi sụp. Nhiều iteration → hội tụ, tháp đứng yên.

hộp đang ngủ (💤)

Thử Iterations = 1 với 6+ hộp → quan sát tháp lảo đảo. Tăng dần lên 8–10 → tháp đứng vững (Box2D mặc định 8). Đây là sequential impulse.

2. Ma sát trên dốc — định luật Coulomb

Một khối trên mặt nghiêng. Trọng lực có thành phần kéo trượt dọc dốc và thành phần ép xuống (pháp tuyến). Khối đứng yên chừng nào lực ma sát tĩnh tối đa μ·N còn ≥ lực kéo trượt.

Ranh giới trượt: khối đứng yên khi μ ≥ tan(θ). Vd θ=25° → tan≈0.466 → cần μ ≥ 0.47. Hạ μ dưới ngưỡng → khối bắt đầu trượt (động lực Coulomb hãm bớt nhưng không giữ nổi).

3. Positional correction & sleeping

Trọng lực mỗi frame đẩy hộp lún vào sàn. Tắt correction → hộp chìm xuyên sàn. Bật → correction (slop + percent) đẩy lên, hộp đứng đúng mặt sàn rồi ngủ. Đẩy percent lên 1.0 với slop 0 → jitter do over-correction.

hộp phần lún (penetration) đang ngủ (💤)

Thử: tắt correction → hộp tụt dần qua sàn (lún tăng mãi). Bật, percent=0.2 slop=0.01 → đứng yên rồi 💤. Đặt percent=1.0, slop=0 → hộp rung "nhảy disco" quanh sàn (over-correction).

4. Tham số tham khảo (kiểu Box2D)

Tham sốGiá trị điển hìnhVai trò
velocity iterations8số lượt giải vận tốc (impulse) / frame
position iterations3số lượt giải vị trí (correction) / frame
linear slop0.005 mcho phép lún nhỏ, chống jitter quanh 0
baumgarte (percent)0.2tỉ lệ sửa lún mỗi frame
μ (gỗ/bê tông)0.4 – 0.6hệ số ma sát Coulomb
sleep |v| threshold≈ 0.05 m/sdưới ngưỡng đủ lâu → ngủ
time to sleep0.5 sthời gian bất động trước khi ngủ