Để sử dụng trong mô phỏng cơ thể cứng nhắc, tôi muốn tính toán khối lượng và quán tính quán tính (thời điểm quán tính), cho một lưới tam giác biểu diễn ranh giới của đối tượng (không nhất thiết lồi) và giả định mật độ không đổi trong nội thất.Làm thế nào tôi có thể tính khối lượng và thời điểm quán tính của một đa diện?
Trả lời
Giả sử trang điểm của bạn là đóng (dù lồi hay không) có một cách!
Như dmckee chỉ ra, cách tiếp cận chung là xây dựng tứ diện từ mỗi tam giác bề mặt, sau đó áp dụng toán học rõ ràng để tổng khối lượng và thời điểm đóng góp từ mỗi tet. Bí quyết xuất hiện khi bề mặt của cơ thể có những điểm lõm tạo nên túi bên trong khi được xem từ bất kỳ điểm tham chiếu nào của bạn.
Vì vậy, để bắt đầu, hãy chọn một số điểm tham chiếu (nguồn gốc trong tọa độ mô hình sẽ hoạt động tốt), thậm chí không cần phải ở bên trong cơ thể. Đối với mỗi tam giác, kết nối ba điểm của tam giác đó với điểm tham chiếu để tạo thành một tứ diện. Đây là mẹo: sử dụng bề mặt hình tam giác bình thường để tìm hiểu xem tam giác đang hướng về phía hay ra khỏi điểm tham chiếu (bạn có thể tìm bằng dấu hiệu của dấu chấm của bình thường và vectơ trỏ vào centroid của tam giác). Nếu tam giác hướng ra khỏi điểm chuẩn, xử lý khối lượng và thời điểm của nó bình thường, nhưng nếu nó hướng về phía điểm tham chiếu (gợi ý rằng có khoảng trống giữa điểm tham chiếu và thân rắn), phủ nhận kết quả của bạn cho tet đó .
Hiệu quả điều này làm là khối lượng quá số lượng và sau đó sửa khi các khu vực đó được hiển thị không phải là một phần của phần thân. Nếu một cơ thể có nhiều nếp gấp và nếp gấp kỳ cục (có hình ảnh đó?), Một khối lượng cụ thể có thể bị tính quá mức bởi một yếu tố khổng lồ, nhưng nó sẽ bị trừ đi đủ thời gian để hủy bỏ nếu lưới của bạn là đã đóng cửa. Làm việc theo cách này bạn thậm chí có thể xử lý các bong bóng bên trong của không gian trong các đối tượng của bạn (giả sử các chuẩn được đặt chính xác). Trên hết, mỗi tam giác có thể được xử lý độc lập để bạn có thể song song theo ý muốn. Thưởng thức!
Suy nghĩ: Bạn có thể tự hỏi điều gì sẽ xảy ra khi sản phẩm chấm đó cung cấp cho bạn một giá trị bằng hoặc gần bằng không. Điều này chỉ xảy ra khi mặt tam giác song song (bình thường của nó vuông góc) làm hướng tới điểm tham chiếu - điều này chỉ xảy ra cho các bệ thoái hóa với diện tích nhỏ hoặc bằng 0. Đó là để nói, quyết định để thêm hoặc trừ một đóng góp của tet chỉ là vấn đề khi tet sẽ không đóng góp bất cứ điều gì anyway.
Tôi sẽ xem xét vtkMassProperties. Đây là một thuật toán khá mạnh mẽ để tính toán điều này, với một bề mặt bao quanh một khối lượng.
Phân chia đối tượng của bạn thành bộ tetrahedrons xung quanh điểm bên trong đã chọn. (Đó là chất rắn sử dụng từng phần tử hình tam giác và trung tâm được chọn.)
Bạn sẽ có thể tra cứu thể tích của từng phần tử. moment of inertia cũng có sẵn.
Sẽ khó khăn hơn nếu bề mặt không lồi.
Tôi dường như đã nhớ đến danh pháp và nghiêng không phải là tính từ mà tôi muốn. Ý tôi là không thường xuyên.
Nếu đối tượng không lồi (và đôi khi ngay cả khi nó là), tesselation vào tets là phức tạp hơn nhiều so với chỉ tính toán khối lượng trực tiếp. –
@Reed Copsey: Tôi sẽ nhận lời của bạn vì điều đó. Các giải pháp tôi đã cung cấp chắc chắn là ngây thơ. – dmckee
Nếu polydedron của bạn phức tạp, hãy cân nhắc sử dụng tích hợp Monte Carlo, thường được sử dụng cho tích phân nhiều chiều.Bạn sẽ cần một hypercube kèm theo, và bạn sẽ cần để có thể kiểm tra xem một điểm nhất định là bên trong hoặc bên ngoài đa diện. Và bạn sẽ cần phải kiên nhẫn, vì tích hợp Monte Carlo chậm.
Bắt đầu như thường lệ tại Wikipedia, sau đó làm theo các trang liên kết bên ngoài để đọc thêm.
(Đối với những người không quen thuộc với tích hợp Monte Carlo, dưới đây là cách tính khối lượng. Chọn một điểm trong hypercube chứa. Thêm vào số point_total
. Có trong đa diện không? Nếu có, hãy thêm vào số point_internal
. rất nhiều này (xem sự hội tụ và lỗi ràng buộc ước tính). Sau đó
mass_polyhedron/mass_hypercube \approx points_internal/points_total
.
trong một khoảnh khắc của quán tính, bạn có trọng lượng mỗi số bằng bình phương của khoảng cách điểm với trục tham khảo.
Phần khó khăn là thử nghiệm xem một điểm là bên trong hoặc bên ngoài đa diện của bạn. Tôi chắc chắn rằng có những thuật toán hình học tính toán cho điều đó.
Điều này được đề cập trong cuốn sách "Vật lý trò chơi, Ấn bản thứ hai" của D. Eberly. Mã số chapter 2.5.5 và mẫu có sẵn trực tuyến. (Chỉ cần tìm thấy nó, chưa thử nó ra.)
Cũng lưu ý rằng đa diện không cần phải lồi để các công thức hoạt động, nó chỉ phải là simple.
- 1. Công thức chung để tính khối lượng đa diện
- 2. Làm thế nào tôi có thể tính toán khối lượng của một bề mặt phù hợp trong MATLAB?
- 3. Làm thế nào để kiểm soát chương trình khối lượng của máy tính của tôi?
- 4. tính toán hình học, tứ diện ký khối lượng
- 5. Điều gì có một quán tính quán tính bằng 0 trong Bullet?
- 6. Làm thế nào tôi có thể tìm thấy bao nhiêu năng lượng máy tính của tôi đang sử dụng?
- 7. Làm thế nào tôi có thể tính toán khoảng cách giữa hai điểm gps trong Java?
- 8. thêm quán tính vào một UIPanGestureRecognizer
- 9. Làm cách nào tôi có thể tính toán thời gian một hàm trong jQuery?
- 10. Làm thế nào tôi có thể chuyển thuộc tính của một lớp như một tham số của một phương thức?
- 11. Làm cách nào để tôi có thể thay đổi các giá trị trong một mảng có khối lượng có tính đến số nan?
- 12. Làm cách nào tôi có thể gán một thuộc tính cho một thuộc tính
- 13. Tính vị trí của một cơ thể tăng tốc sau một thời điểm nhất định
- 14. Cách sử dụng tính năng chèn khối lượng Redis?
- 15. Làm thế nào tôi có thể xoay một mảng 3D?
- 16. Cửa sổ tính toán id duy nhất theo khối lượng như thế nào?
- 17. Tôi có thể đặt thuộc tính `thuộc tính` của` UILabel`
- 18. Làm thế nào tôi có thể nhanh chóng ước tính khoảng cách giữa hai (vĩ độ, kinh độ) điểm?
- 19. Làm cách nào để đảm bảo tính nhất quán của tập hợp có tính khả dụng cao?
- 20. Làm thế nào tôi có thể tạo một vùng trăn số lượng lớn của datetime
- 21. Làm thế nào tôi có thể giải quyết một hiệp hội đa hình ba chiều?
- 22. Làm thế nào tôi có thể nhận được giá trị của một ước tính mật độ hạt nhân tại các điểm cụ thể?
- 23. Làm thế nào tôi có thể gán một thuộc tính cho một đối tượng jQuery?
- 24. Làm thế nào tôi có thể đặt phút/tối đa của trục x trong Rickshaw/D3?
- 25. Làm cách nào tôi có thể vẽ ước lượng khả năng tối đa bằng Python
- 26. Tìm Hàng Liên tiếp & Tính Thời lượng
- 27. Làm thế nào để cắt bớt các giá trị của một mảng có khối lượng 2D
- 28. Tính chính xác đa luồng: Sử dụng khối đồng bộ
- 29. Tính nhất quán của phông chữ trong suốt Dự án?
- 30. Làm cách nào để loại bỏ "jitter" khỏi tính toán "thời gian còn lại ước tính" (và ETA) của tôi?
Rất đẹp. Tôi nên đã thấy điều này. Đó là một phần mở rộng của phương pháp "đếm chéo" để học tập nếu một điểm là bên trong hoặc bên ngoài một hình dạng. – dmckee