Tôi đang viết một công cụ mô phỏng/vật lý kết hợp chuyến bay không gian 3D, lực hấp dẫn hành tinh/sao, lực đẩy tàu và các hiệu ứng tương đối. Cho đến nay, nó sẽ rất tốt, tuy nhiên, một điều mà tôi cần giúp đỡ là toán học của thuật toán phát hiện va chạm.Phát hiện va chạm giữa các quả cầu tăng tốc
Mô phỏng lặp đi lặp lại của phong trào mà tôi đang sử dụng về cơ bản là như sau:
(Lưu ý:. 3D Vectors là ALL CAPS)
For each obj
obj.ACC = Sum(all acceleration influences)
obj.POS = obj.POS + (obj.VEL * dT) + (obj.ACC * dT^2)/2 (*EQ.2*)
obj.VEL = obj.VEL + (obj.ACC * dT)
Next
đâu:
obj.ACC is the acceleration vector of the object
obj.POS is the position or location vector of the object
obj.VEL is the velocity vector of the object
obj.Radius is the radius (scalar) of the object
dT is the time delta or increment
Những gì tôi về cơ bản cần làm là tìm một số công thức hiệu quả có nguồn gốc từ (EQ.2) ở trên cho hai đối tượng (obj1, obj2) và cho biết liệu chúng có bao giờ va chạm, nếu có, vào thời điểm nào. Tôi cần thời gian chính xác để tôi có thể xác định xem nó có tăng thời gian cụ thể không (bởi vì accelleratons sẽ khác nhau ở các khoảng thời gian khác nhau) và để tôi có thể xác định vị trí chính xác (mà tôi biết cách làm, thời gian)
Đối với động cơ này, tôi đang mô hình hóa tất cả các đối tượng như hình cầu, tất cả điều này công thức/algortithim cần làm là phải tìm ra những gì chỉ:
(obj1.POS - obj2.POS).Distance = (obj1.Radius + obj2.Radius)
nơi .Distance là một giá trị vô hướng tích cực. (Bạn cũng có thể vuông cả hai mặt nếu điều này dễ dàng hơn, để tránh hàm căn bậc hai ẩn trong tính toán .Distance).
(vâng, tôi biết nhiều, nhiều câu hỏi phát hiện va chạm khác, tuy nhiên, giải pháp của chúng dường như rất cụ thể đối với động cơ và giả định của chúng, và dường như không phù hợp với điều kiện của tôi: 3D, hình cầu và gia tốc . trong gia số mô phỏng Hãy cho tôi biết nếu tôi sai)
Một số Làm rõ:.
1) Nó không phải là đủ cho tôi để kiểm tra * Intersection * của hai quả cầu trước và sau khi tăng thời gian. Trong nhiều trường hợp vận tốc và thay đổi vị trí của chúng sẽ vượt xa bán kính của chúng.
2) RE: hiệu quả, tôi không cần trợ giúp (vào thời điểm này) để xác định khả năng ứng cử viên cho các vụ va chạm, tôi nghĩ rằng tôi có bảo hiểm.
Một làm rõ, mà dường như được mọc lên rất nhiều:
3) Phương trình của tôi (EQ.2) của phong trào gia tăng là một phương trình bậc hai mà áp dụng cho cả Velocity và Acceleration:
obj.POS = obj.POS + (obj.VEL * dT) + (obj.ACC * dT^2)/2
các công cụ vật lý mà tôi đã nhìn thấy, (và chắc chắn mỗi công cụ trò chơi mà tôi từng nghe nói về) chỉ tuyến tính phương trình của phong trào gia tăng áp dụng chỉ Velocity:
obj.POS = obj.POS + (obj.VEL * dT)
Đây là lý do tại sao tôi không thể sử dụng các giải pháp thường được công bố để phát hiện va chạm phát hiện trên stack Tràn, trên Wikipedia và trên toàn bộ Web, chẳng hạn như tìm giao lộ/cách tiếp cận gần nhất của hai đoạn đường. Mô phỏng của tôi giao dịch với các gia tốc biến đổi là nền tảng cho kết quả, vì vậy cái tôi cần là giao lộ/phương pháp gần nhất của hai phân đoạn parabol.
cảm ơn tcovo, đây là một khởi đầu tốt về chính xác những gì tôi cần. Bất kỳ ý tưởng làm thế nào để mở rộng giải pháp phương trình khối tại Wikipedia để hệ số vector? – RBarryYoung
Phương trình khối tôi đã viết có hệ số vô hướng: sản phẩm chấm của hai vectơ là một vô hướng, và bình phương của cường độ cũng là một vô hướng. Tôi đã chỉnh sửa câu trả lời của tôi để xây dựng trên những câu trả lời đó. – tcovo
Ah, tuyệt vời! Cảm ơn ... – RBarryYoung