Câu hỏi của bạn khá rộng và do đó giải thích của tôi trở nên dài dòng. Tôi sẽ đề xuất hai biến thể của một thuật toán nổ cho cả hai trục và điều trị xuyên tâm.
Để minh họa chúng với một ví dụ tôi sẽ sử dụng những con số sau đây (bounding hộp dọc theo trục duy nhất, chỉ có năm phần):
P1: [ 0,10] (battery)
P2: [10,14] (motor)
P3: [14,16] (cog)
P4: [16,24] (bit holder)
P5: [18,26] (gear casing)
Trong khi phần P1
-P4
chính xác chạm vào nhau, P4
và P5
thực sự chồng lên nhau.
Thứ nhất là thuật toán cơ bản chia tỷ lệ khoảng cách theo một yếu tố, chẳng hạn như bạn đã đề xuất. Nó sẽ bị ảnh hưởng nếu kích thước của các mảnh có nhiều khác biệt trong một hội đồng nhưng cũng cho các phần chồng chéo (ví dụ trong ví dụ của bạn dọc theo trục phần mở rộng của vòng tròn cog nhỏ hơn nhiều so với bit).
Hãy để hệ số chia tỷ lệ là f
, sau đó trung tâm của mỗi hộp giới hạn được chia tỷ lệ theo số f
, nhưng phần mở rộng thì không. Phần sau đó sẽ là
P1: 5 + [-5,5] => P1': 5*f + [-5,5]
P2: 12 + [-2,2] => P2': 12*f + [-2,2]
P3: 15 + [-1,1] => P3': 15*f + [-1,1]
P4: 20 + [-4,4] => P4': 20*f + [-4,4]
P5: 22 + [-4,4] => P5': 22*f + [-4,4]
Khoảng cách giữa các bộ phận P1'
-P4
sau đó được đưa ra bởi
P2' - P1' : (12*f-2) - (5*f+5) = 7*(f-1)
P3' - P2' : (15*f-1) - (12*f+2) = 3*(f-1)
P4' - P3' : (20*f-4) - (15*f+1) = 5*(f-5)
Đúng như dự đoán sự khác biệt là không cho f=0
nhưng đối với bất kỳ bùng nổ xem khoảng cách mạnh phụ thuộc vào kích thước của các bộ phận riêng biệt. Tôi không nghĩ rằng điều này sẽ trông quá tốt nếu biến thể của kích thước lớn hơn.
Ngoài ra cho các bộ phận chồng chéo
P5' - P4' : (22*f-4) - (20*f+4) = 2*f-8
họ vẫn chồng chéo cho f hợp lý.
Một khả năng khác là xác định không phải là hệ số chia tỷ lệ cho trục nhưng không đổi một phần khoảng cách d
.Sau đó hộp bounding sẽ được sắp xếp như sau:
P1': [ 0,10]
P2': [10,14]+d
P3': [14,16]+2*d
P4': [16,24]+3*d
P5': [18,26]+4*d+6
Lưu ý rằng trong dòng cuối cùng chúng tôi đã thêm 24-8=6
, ví dụ: sự chồng chéo để phân biệt hai phần.
Trong khi thuật toán này xử lý các trường hợp được đề cập ở trên theo cách tốt hơn, chúng tôi phải thêm sự chăm sóc đặc biệt vào các bộ phận bao gồm nhiều phần khác và không được đưa vào nhóm (ví dụ: xử lý hàng đầu trong trường hợp của bạn) .
Một khả năng là nhóm các phần thành các nhóm trong bước đầu tiên và sau đó áp dụng thuật toán vào hộp giới hạn của các nhóm này. Sau đó nó có thể được áp dụng cho các bộ phận trong mỗi nhóm một lần nữa, bỏ qua các phần bao gồm nhiều hơn một nhóm con. Trong trường hợp của bạn nó sẽ là (lưu ý nhóm lồng nhau được càng tốt):
[
([battery,(switch,circuit switch),motor],handle top),
motor cog,
tri-cog,
red-cog,
circle-cog,
bit-holder,
(gear casing,spring,lock knob)
]
Bạn có thể thấy rằng tôi đã giới thiệu hai loại khác nhau của các nhóm: các bộ phận/nhóm trong dấu ngoặc vuông được xử lý bởi các thuật toán, tức là một khoảng cách là được thêm vào giữa mỗi phần/nhóm con bên trong một nhóm như vậy, trong khi các nhóm bên trong các dấu ngoặc tròn không bị phát nổ.
Đến nay, chúng tôi đã không xử lý vụ nổ xuyên tâm vì nó độc đáo tách rời khỏi việc xử lý trục. Nhưng một lần nữa cả hai phương pháp này cũng có thể được sử dụng cho vụ nổ xuyên tâm. Nhưng một lần nữa theo ý kiến của tôi thuật toán thứ hai mang lại kết quả dễ chịu hơn. Ví dụ. các nhóm có thể được thực hiện như sau để điều trị xuyên tâm:
[
(battery,switch,<many parts>,gear casing),
(switch,spring),
(handle top, lock knob)
]
Trong trường hợp này, chúng ta sẽ thêm một thành phần bổ sung r
cho tất cả các trung tâm bố trí hình tròn trong nhóm thứ hai và 2*r
cho tất cả trong nhóm thứ ba.
Lưu ý rằng thuật toán chia tỷ lệ đơn giản sẽ chạy mà không có hướng dẫn người dùng đặc biệt (khi nhân tố chia tỷ lệ được cung cấp) trong khi phần thứ hai sử dụng thông tin bổ sung (nhóm).
Tôi hy vọng giải thích khá dài này sẽ cung cấp cho bạn một số ý tưởng về cách tiến hành thêm. Nếu giải thích của tôi không rõ ràng tại một số điểm hoặc nếu bạn có thêm câu hỏi, xin vui lòng bình luận.
Wow. 1 cho sự thông suốt. Ước gì tôi có thể cho nhiều hơn. –