Làm thế nào để tìm hình chữ nhật diện tích tối đa bên trong một đa giác lồi?


21

Trong bài đăng này, chúng tôi đang tìm kiếm các thuật toán / ý tưởng về cách tìm hình chữ nhật diện tích tối đa bên trong một đa giác lồi .

Trong hình dưới đây, các số là các khu vực của hình chữ nhật được trang bị. Như được hiển thị một hình chữ nhật mong muốn có thể khác nhau ở mỗi chiều và có thể ở bất kỳ góc độ nào.

Chỉnh sửa:

Chúng tôi không có ý tưởng rõ ràng nào về cách giải quyết vấn đề được đề cập như vậy nên chúng tôi đã hỏi ở đây. Tuy nhiên, chúng tôi đoán rằng hình chữ nhật diện tích tối đa có thể là một trong những hình có một cạnh được căn chỉnh trên (tất nhiên không nhất thiết là cùng một cạnh có chiều dài), một cạnh của đa giác.

nhập mô tả hình ảnh ở đây


1
Bạn có thể chỉ định phần mềm bạn đang sử dụng? Ngoài ra, hãy đăng công việc của bạn đến nay, hoặc cách tiếp cận chung mà bạn đã thực hiện để giải quyết vấn đề này. Có lẽ ai đó có thể cải thiện những gì bạn đã làm. Theo kinh nghiệm của tôi, điều đó sẽ dẫn đến những câu trả lời hữu ích hơn nhiều so với việc chỉ đăng một câu hỏi "lạc lõng".
Martin

1
Liên quan chặt chẽ: gis.stackexchange.com/questions/22895/ ,.
whuber

Phần mềm @Martin: Lập trình Pythonsau đó sẽ có Fortrannếu cần. Chúng tôi đoán rằng dựa trên bài viết trước của chúng tôi ở đây cũng được đề cập ở trên bởi whuberđó có thể là một hình chữ nhật có cạnh chung với đa giác sẽ là một câu trả lời.
Nhà phát triển

1
Vấn đề của bạn là một vấn đề thực sự thú vị và tôi nghĩ rằng tôi đã tìm được một thuật toán giải ở đâyđây .
biệt danh

1
@nickves Cảm ơn các liên kết. Bạn có thể vui lòng đặt những thông tin này làm câu trả lời với một chút giải thích về các thuật toán không? Nó sẽ có khả năng là một câu trả lời tốt để được chấp nhận.
Nhà phát triển

Câu trả lời:


4

Một số ghi chú quá lớn để đưa vào nhận xét (mặc dù điều này không đề xuất một thuật toán rõ ràng):

Đường đục lỗ (EDITED) : Ít nhất hai đỉnh của hình chữ nhật diện tích tối đa phải nằm trên đường biên của đa giác (tức là dọc theo một cạnh hoặc tại một đỉnh). Và nếu hình chữ nhật diện tích tối đa không phải là một hình vuông, thì ít nhất ba đỉnh phải nằm trên đường biên của đa giác.

Tôi đã chứng minh điều đó với chính mình trong bốn bước:

Lưu ý # 1 : Ít nhất một đỉnh của hình chữ nhật diện tích tối đa sẽ luôn nằm trên đường biên của đa giác. Điều này khá rõ ràng, nhưng một bằng chứng có thể diễn ra như thế này (do mâu thuẫn): Giả sử bạn có một hình chữ nhật "tối đa" không có đỉnh trên đường biên của đa giác. Điều đó có nghĩa là sẽ có ít nhất một căn phòng nhỏ xung quanh mỗi đỉnh của nó. Vì vậy, bạn có thể mở rộng hình chữ nhật của mình một chút, mâu thuẫn với tính tối đa của nó.

Lưu ý # 2 : Ít nhất hai đỉnh của hình chữ nhật diện tích tối đa sẽ luôn nằm trên đường biên của đa giác. Một bằng chứng có thể diễn ra như thế này (một lần nữa bởi mâu thuẫn): Giả sử bạn có một hình chữ nhật "tối đa" chỉ có một đỉnh trên đường biên (được đảm bảo bởi Lưu ý số 1). Xét hai cạnh không kề với đỉnh đó. Vì các điểm cuối của chúng KHÔNG nằm trên ranh giới, nên có một căn phòng nhỏ xung quanh. Vì vậy, một trong hai cạnh đó có thể bị "đùn" một chút, mở rộng diện tích của đa giác và mâu thuẫn với tính tối đa của nó.

Lưu ý # 3 : Có hai đỉnh đối diện chéo của hình chữ nhật diện tích tối đa nằm trên đường biên của đa giác. . đang ở trên ranh giới) có thể được đùn ra một chút, làm tăng diện tích của hình chữ nhật và mâu thuẫn với tính tối đa của nó.

Lưu ý # 4 : (EDITED) Nếu hình chữ nhật diện tích tối đa không phải là hình vuông, thì ba đỉnh của nó sẽ nằm trên đường biên của đa giác.

Để chứng minh, giả sử đó không phải là trường hợp, tức là hình chữ nhật diện tích tối đa không phải là một hình vuông, mà chỉ có hai đỉnh của nó nằm trên đường biên của đa giác. Tôi sẽ chỉ cho bạn cách xây dựng một hình chữ nhật lớn hơn, trái ngược với sự tối đa.

Gọi các đỉnh của hình chữ nhật A, B, C, và D. Không mất tính tổng quát, giả sử rằng BDlà hai nằm trên ranh giới đa giác. Vì ACở bên trong đa giác, có một số phòng ngọ nguậy xung quanh chúng (được biểu thị bằng các vòng tròn xung quanh ACtrong hình bên dưới). Bây giờ, vẽ một vòng tròn xung quanh hình chữ nhật, và các điểm trượt ACmột chút xung quanh vòng tròn bằng cùng một lượng (để tạo A'C', hình dưới đây) để hình chữ nhật mớiA'BC'Dlà hình vuông hơn hình chữ nhật ban đầu. Quá trình này tạo ra một hình chữ nhật mới cũng nằm trong đa giác ban đầu và có diện tích lớn hơn. Đây là một mâu thuẫn, vì vậy bằng chứng được thực hiện.

Xây dựng một hình chữ nhật mới

Để tin vào bằng chứng đó, bạn phải tự thuyết phục rằng diện tích của hình chữ nhật được ghi trong một vòng tròn tăng lên khi nó trở nên "vuông hơn" (tức là sự khác biệt giữa các chiều dài cạnh nhỏ hơn). Bạn cũng cần đa giác là lồi để các dòng mới nằm trong đó. Và có lẽ có những chi tiết nhỏ khác bị cuốn theo tấm thảm, nhưng tôi khá chắc chắn rằng tất cả chúng đều hoạt động được.


Lưu ý số 4 là cá, vì "ngọ nguậy" hai đỉnh khác sẽ tạo ra hình chữ nhật.
whuber

Thật. Tuy nhiên, hình dung của bạn về ví dụ thứ 4 không hoàn toàn đúng (nếu 2 đỉnh nằm trên ranh giới đa giác, bạn không thể kéo dài nó thêm nữa). Tôi không thể tìm thấy chính xác làm thế nào để giải thích nó mặc dù (đã thử viết một bình luận nhưng quá lộn xộn), nhưng tôi tin rằng bạn đúng.
Saryk

Tôi tin rằng có những ví dụ cần lưu ý # 4. Những cái tôi đã tìm thấy có một số tính toán liên quan để hiển thị, mặc dù; đơn giản nhất là sự nhiễu loạn của một hình lục giác không đều (hình vuông có hai góc đối diện hơi bị cắt).
whuber

Đồng ý rằng Note 4 là cá. Tôi sẽ xem xét kỹ hơn vào tối nay và sửa nó hoặc gỡ bỏ nó.
csd

+1 Đó là một giải pháp tốt đẹp của khó khăn. Cảm ơn đã chỉnh sửa!
whuber

3

Tôi đã thực hiện một bản phác thảo rất nhanh và gớm ghiếc về ghi chú màu xanh lá cây của bạn trong câu hỏi. Tôi không thể đăng nó dưới dạng bình luận vì vậy tôi phải viết câu trả lời, ngay cả khi đó không phải là một bình luận.
Tôi tin rằng trong hình ảnh bên dưới, chúng ta có một hình chữ nhật diện tích tối đa (không hoàn hảo, nó chỉ là một bản phác thảo được tạo ra trên Paint để đưa ra ý tưởng) và tôi không nghĩ bạn có thể tìm thấy một hình lớn hơn có một mặt chung với viền của plygon đen ...
Tuy nhiên tôi có thể sai, trong trường hợp đó bạn có tất cả lời xin lỗi của tôi.
Phác thảo nhanh tôi đã thực hiện trên Paint


3
Điểm tốt (+1). Mặc dù vậy, có một ví dụ đơn giản hơn nhiều: xem xét vấn đề ghi hình chữ nhật diện tích cực đại trong một hình bát giác thông thường. Thật dễ dàng để thấy (và dễ dàng chứng minh bằng cách trước tiên tìm một hình vuông cực đại trong chu vi của hình bát giác) rằng các góc của giải pháp trùng với các đỉnh của hình bát giác xen kẽ và rằng giải pháp này lớn hơn đáng kể so với bất kỳ hình chữ nhật được căn chỉnh cạnh nào.
whuber

Trên thực tế (tôi chỉ có một nghi ngờ lớn ngay bây giờ), hình chữ nhật nhỏ nhất bên ngoài (những hình từ bài đăng này ) của đa giác này không có cùng hướng với một trong các cạnh, phải không? (Tôi sẽ thấy nó cùng hướng với hình chữ nhật màu đỏ của tôi)
Saryk

3
Nhân tiện, đa giác đó không lồi. Câu hỏi ban đầu không giới hạn đối với đa giác lồi.
csd

2
@csd Đó là một điểm tuyệt vời, nhưng Saryk vẫn đúng, như ví dụ mẫu của tôi cho thấy. Saryk, không có vấn đề gì với hình chữ nhật giới hạn diện tích tối thiểu: thật dễ dàng để chứng minh (một cách chặt chẽ) rằng nó phải bao gồm một mặt của thân lồi. Tôi tin rằng diện tích tối đa được ghi hình chữ nhật (của một đa giác lồi) chỉ cần có hai đỉnh chạm vào ranh giới, không hơn.
whuber

2

Hầu hết các thuật toán khác tìm thấy hình chữ nhật trực tuyến diện tích tối đa được ghi trong một đa giác lồi và có độ phức tạp O(log n). Tôi không nghĩ rằng dự đoán của bạn rằng đa giác diện tích tối đa được căn chỉnh với một trong các cạnh là chính xác, bởi vì tất cả những gì bạn cần làm là xoay nthời gian đa giác , dẫn đến sự phức tạp O(n log n)và trong nghiên cứu ngắn gọn của tôi, tôi không thể tìm thấy bất cứ điều gì nói rằng nó là dễ dàng.

Tuy nhiên, bài báo Hình chữ nhật lớn nhất trong đa giác lồi của Knauer, et. al., mô tả một thuật toán gần đúng sẽ đưa bạn đến gần câu trả lời đúng.

Theo như tôi hiểu về thuật toán, nó xây dựng trên một trong các đa giác diện tích tối đa được căn chỉnh theo trục đã biết, sau đó lấy mẫu ngẫu nhiên các điểm bên trong không gian polyon, tạo ra nhiều trục từ các mẫu ngẫu nhiên đó, lặp qua trục đó và áp dụng trục đó thuật toán được phân bổ cho từng cái, và sau đó trả về hình chữ nhật lớn nhất trong tập hợp đó.


Có lẽ có một lỗi đánh máy trong câu đầu tiên? Không thể có thuật toán O (log (n)) vì chỉ đọc trong tọa độ là thao tác O (n)!
whuber

Liên kết đã chết
nguy hiểm vào

1
@dangerousdave - Tìm thấy một liên kết thay thế trong thời gian dài nhưng nó tồn tại ....
tham gia
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.