2012-12-07 24 views
7

Tôi đang vật lộn với việc tính toán hình chữ nhật kèm theo nhỏ nhất (tùy ý căn chỉnh) của một tập các điểm.Ai đó có thể giải thích các calipers quay cho tôi không?

Tôi đã có thể tính toán vỏ lồi bằng thuật toán graham.

Nơi tôi bị kẹt là bước tiếp theo. Tôi nghĩ về việc sử dụng phương pháp calipers quay, nhưng tôi dường như không thể tìm thấy một lời giải thích đầy đủ về thuật toán.

+0

Khám phá [giải thích này] (http://cgm.cs.mcgill.ca/~orm/maer.html). – mbeckish

+1

Bạn đã xem [giấy gốc của Toussaint] (http://cgm.cs.mcgill.ca/~godfried/publications/calipers.pdf) chưa? Trang 1 và 2 giải thích thuật toán khá rõ ràng (IMO). Lưu ý rằng việc đánh số trang được đảo ngược ... –

Trả lời

8

Nếu bạn có vỏ lồi, thì thuật toán cơ bản dễ dàng. Bạn chỉ cần đi qua mỗi cạnh của thân lồi và xoay các điểm của bạn để cạnh đó dọc theo trục chính, giả sử trục X. Sau đó, bạn tìm thấy một hộp giới hạn trục liên kết của những điểm đó. Chọn bất kỳ hộp giới hạn nào là nhỏ nhất.

Có thể tìm thấy một hộp giới hạn theo trục bằng cách lấy tối thiểu và tối đa trong mỗi thứ nguyên.

Nếu bạn xoay hộp giới hạn của mình theo số tiền ngược lại, giờ đây nó sẽ bao gồm các điểm ban đầu của bạn.

Để làm điều này hiệu quả hơn, hãy lưu ý rằng các điểm duy nhất có thể ảnh hưởng đến hộp giới hạn nằm trên thân lồi.

Để làm cho nó thực sự hiệu quả, lưu ý rằng chỉ có bốn điểm xung quanh vỏ lồi đang chạm vào hộp giới hạn tại một thời điểm (điều này không đúng, nhưng bỏ qua điều đó bây giờ). Nếu bạn xoay các điểm vừa đủ để cạnh tiếp theo được căn chỉnh với hộp giới hạn, thì ba trong số các điểm đó giống nhau và một trong các điểm được thay thế bằng điểm tiếp theo xung quanh thân lồi. Điều này cho phép bạn tạo một thuật toán là tuyến tính trong số điểm trên thân lồi.

Bây giờ có những trường hợp đặc biệt khi hai cạnh song song hoặc vuông góc. Điều này sẽ gây ra hơn bốn điểm để chạm vào hộp giới hạn tại một thời điểm, nhưng nó thực sự không quan trọng. Nếu bạn có một sự lựa chọn giữa hai cạnh song song để sử dụng tiếp theo, bạn chỉ có thể chọn một tùy ý.

+0

Vấn đề duy nhất với phương pháp này là nó là O (n^2), có thể không phù hợp khi có nhiều đỉnh trong thân lồi. – mbeckish

+0

@mbeckish: true - Tôi đã mở rộng câu trả lời của mình bằng một vài tối ưu hóa. Có thể nghĩ về nó như là một thuật toán đơn giản với tối ưu hóa sẽ làm cho nó dễ hiểu hơn. –

+0

Không đúng là chỉ có bốn điểm xung quanh vỏ lồi đang chạm vào hộp giới hạn tại một thời điểm. Giả sử các điểm collinear không xảy ra trong vỏ lồi, hộp giới hạn có thể chạm tới 8 điểm. Xem xét vỏ lồi '(2,0), (3,0), (4,1), (4,2), (3,3), (2,3), (1,2), (1, 1) 'với một hộp giới hạn liên kết trục (hoặc một góc nghiêng 45 độ) chạm vào tất cả các điểm. –