2009-05-01 22 views

Trả lời

9

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.

+2

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

1

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.

1

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.

+0

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. –

+0

@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

1

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 đó.

1

Đ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.

Các vấn đề liên quan