ครอบคลุมรูปหลายเหลี่ยมเว้าด้วยจำนวนสี่เหลี่ยมน้อยที่สุด


11

ฉันกำลังพยายามที่จะครอบคลุมรูปหลายเหลี่ยมเว้าอย่างง่ายที่มีสี่เหลี่ยมขั้นต่ำ สี่เหลี่ยมมุมฉากของฉันมีความยาวเท่าใดก็ได้ แต่มีความกว้างสูงสุดและรูปหลายเหลี่ยมจะไม่มีมุมแหลม

ฉันคิดเกี่ยวกับการพยายามที่จะสลายรูปหลายเหลี่ยมเว้าของฉันเป็นรูปสามเหลี่ยมที่สร้างชุดของรูปสี่เหลี่ยมผืนผ้าที่เหลื่อมกันน้อยที่สุด จำกัด ขอบเขตแต่ละสามเหลี่ยมให้น้อยที่สุดแล้วผสานรูปสี่เหลี่ยมเหล่านั้นเป็นรูปที่ใหญ่กว่า อย่างไรก็ตามฉันไม่คิดว่ามันจะใช้งานได้กับรอยหยักขนาดเล็กในขอบของรูปหลายเหลี่ยม สามเหลี่ยมที่สร้างขึ้นโดยจุดสะท้อนกลับบนรอยหยักเหล่านั้นจะสร้างสี่เหลี่ยมที่ไม่ถูกต้อง ฉันกำลังมองหารูปสี่เหลี่ยมผืนผ้าที่จะขยาย / ละเว้นรอยหยัก

ฉันไม่รู้อะไรเลยเกี่ยวกับเรขาคณิตของการคำนวณดังนั้นฉันจึงไม่แน่ใจว่าจะเริ่มถามคำถามได้อย่างไร

ฉันพบโพสต์อื่นที่คล้ายกัน แต่ไม่ใช่สิ่งที่ฉันต้องการ:

ตัวอย่างบางส่วน: สีดำคืออินพุต สีแดงเป็นผลลัพธ์ที่ยอมรับได้

ป้อนคำอธิบายรูปภาพที่นี่

Exmaple อื่น: ต้องการผลลัพธ์ที่สอง อย่างไรก็ตามการสร้างเอาต์พุตและใช้ปัจจัยอื่นเพื่อพิจารณาว่าการกำหนดค่าตามความชอบอาจจำเป็นและไม่ใช่ความรับผิดชอบของอัลกอริทึมนี้

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

รูปหลายเหลี่ยมที่เลียนแบบโค้งนั้นหายากมาก ในสถานการณ์สมมตินี้พื้นที่ส่วนใหญ่ของสี่เหลี่ยมมุมฉากสูญเปล่า อย่างไรก็ตามนี่เป็นสิ่งที่ยอมรับได้เพราะแต่ละสี่เหลี่ยมผืนผ้าจะปฏิบัติตามข้อ จำกัด ความกว้างสูงสุด

ป้อนคำอธิบายรูปภาพที่นี่

นอกจากนี้ฉันพบว่าบทความนี้ใกล้เคียงกับสิ่งที่ฉันต้องการ:

อาจเป็นคำถามที่ดีกว่าคือ "ฉันจะระบุส่วนที่เป็นรูปหลายเหลี่ยมของรูปหลายเหลี่ยมเว้าได้อย่างไร" ป้อนคำอธิบายรูปภาพที่นี่

นี่คือภาพแสดงการใช้งานที่ต้องการ: ป้อนคำอธิบายรูปภาพที่นี่

สีเขียวคือการใช้วัสดุจริง สี่เหลี่ยมสีแดงเป็นโครงร่าง สีน้ำเงินคือ MBR ของรูปหลายเหลี่ยมทั้งหมด ฉันคิดว่าฉันควรพยายามที่จะรับ MBR น้อยและกรอกพวกเขาสี่เหลี่ยมสีเขียว 2-3 อันที่มุมซ้ายบนที่สิ้นสุดลงตรงกลางของรูปหลายเหลี่ยมนั้นมีราคาแพง นั่นคือสิ่งที่ฉันต้องการลด สี่เหลี่ยมสีเขียวมีความกว้างและความสูงขั้นต่ำสุดและสูงสุด แต่ฉันสามารถใช้แถวและคอลัมน์จำนวนมากเพื่อให้ครอบคลุมพื้นที่ได้ อีกครั้งฉันจะต้องลดจำนวนของรูปสี่เหลี่ยมผืนผ้าที่ไม่ได้ข้ามการป้อนข้อมูล ฉันยังสามารถปรับเปลี่ยนรูปร่างของสี่เหลี่ยมสีเขียวเพื่อให้พอดีกับสถานที่เล็ก ๆ ที่มีราคาแพงมาก กล่าวอีกนัยหนึ่งการได้รับสี่เหลี่ยมมากที่สุดเท่าที่จะทำได้เพื่อขยายให้มากที่สุดนั้นเหมาะสมที่สุด


3
ชื่อของคุณพูดว่ารูปหลายเหลี่ยมนูน แต่คำถามพูดถึงรูปหลายเหลี่ยมเว้า บางทีคุณอาจต้องทำการแก้ไขบางอย่าง?
Ankur

1
@ JukkaSuomela ในภาพสองภาพแรกรูปหลายเหลี่ยมมีขนาดเท่ากันและในภาพแรกฉันสามารถเรียกใช้รูปสี่เหลี่ยมผืนผ้าสามรูปในแนวตั้งได้เหมือนที่ฉันทำในรูปที่สอง อย่างไรก็ตามสิ่งนี้เป็นที่ต้องการน้อยกว่า ฉันคิดว่าเล่ห์เหลี่ยมเกี่ยวข้องกับขอบเขตของรูปสี่เหลี่ยมผืนผ้า บางทีสิ่งที่ฉันพยายามทำคือลดขอบเขตของรูปสี่เหลี่ยมผืนผ้าที่อยู่ภายในรูปหลายเหลี่ยมให้น้อยที่สุดและเพิ่มขอบเขตของรูปสี่เหลี่ยมขนมเปียกปูนที่มี collinear กับขอบของรูปหลายเหลี่ยม อย่างไรก็ตามบางครั้งสี่เหลี่ยมจะต้องทะลักออกมาจากรูปหลายเหลี่ยมเพื่อให้ครอบคลุมอย่างเต็มที่
Josh C.

1
@ JohnMoeller ฉันเข้าใจ นี่เป็นปัญหาที่มนุษย์สามารถระบุวิธีแก้ปัญหาได้ง่าย แต่การระบุปัญหาอย่างถูกต้องนั้นค่อนข้างยาก ปัญหานี้คล้ายคลึงกับการปูพรมหรือกระดาษผนังและปัญหาที่แท้จริงคือปัญหาโครงสร้าง / สถาปัตยกรรม ฉันกำลังพยายามระบุภูมิภาคของเลย์เอาต์สี่เหลี่ยมที่ต่อมาจะเต็มไปด้วยรูปแบบการสอนแบบอื่น การค้นหาสี่เหลี่ยมเหล่านั้นและการจัดการบริเวณที่ไม่ใช่สี่เหลี่ยมผืนผ้านั้นเป็นปัญหา แจ้งให้เราทราบหากฉันสามารถอธิบายเพิ่มเติมได้
Josh C.

2
ฉันคิดว่าเราควรเข้าหานี้ก่อนเป็นคำถามสร้างแบบจำลอง: เป้าหมายไม่ได้มากับอัลกอริทึมที่แก้ปัญหาการปรับให้เหมาะสมดี แต่เป้าหมายคือการกำหนดปัญหาการเพิ่มประสิทธิภาพ
Jukka Suomela

3
@JoshC: อาจเป็นประโยชน์ถ้าคุณพยายามบอกเราเพิ่มเติมเกี่ยวกับแอปพลิเคชันในโลกแห่งความจริง ฉันรวบรวมจากคำอธิบายของคุณว่าตัวอย่างเช่นการตัดมีราคาแพงพอสมควรแล้วชิ้นงานรูปสี่เหลี่ยมผืนผ้าจะต้องมีการตัดน้อยที่สุด ถูกต้องหรือไม่
Jukka Suomela

คำตอบ:


3

นี่คือชุดครอบเรขาคณิตที่แตกต่าง ขึ้นอยู่กับการตั้งค่าที่แน่นอนคุณอาจสามารถทำการประมาณที่ดีได้ ปัญหาคือปัญหา NP-Hard ธรรมชาติ huersitics คือการใช้อัลกอริทึมโลภ (เลือกสี่เหลี่ยม / แถบที่ครอบคลุมพื้นที่ส่วนใหญ่ยังไม่ครอบคลุมเสมอ) เทคนิคทางเลือกคือการใช้การชั่งน้ำหนักใหม่มีผลลัพธ์ทางทฤษฎีที่น่าสนใจ แต่ตรงไปตรงมาไม่มีอะไรที่ควรจะมีประโยชน์ สิ่งที่น่าสนใจอย่างหนึ่งที่คุณอาจต้องลองคือการแบ่งรูปหลายเหลี่ยมของคุณออกเป็นรูปทรงนูนจำนวนน้อยที่สุด (โดยใช้อัลกอริธึมการเขียนโปรแกรมแบบไดนามิก Keil) จากนั้นครอบคลุมรูปหลายเหลี่ยมนูนแยกกัน ...


ฉันไม่คุ้นเคยกับอัลกอริทึม Keil Dynamic Programming อย่างไรก็ตามฉันพบวิธีการทำงานโดยใช้การรวมกันของอัลกอริธึมสี่เหลี่ยมผืนผ้าที่ใหญ่ที่สุดที่สมัครเป็นสมาชิกและอัลกอริทึมสี่เหลี่ยมผืนผ้าที่ จำกัด ขอบเขตต่ำสุดที่มีตัวแปรบางอย่างขึ้นอยู่กับการวิเคราะห์พฤติกรรม
Josh C.

2

ฉันคิดว่าเอกสารนี้อาจช่วยได้บ้าง เห็นได้ชัดว่าไม่ใช่ปัญหาเดียวกัน - ในความเป็นจริงมันเป็นปัญหาย้อนกลับครอบคลุมสี่เหลี่ยมผืนผ้ากับรูปหลายเหลี่ยม - แต่ความคิดบางอย่างอาจเป็นจุดเริ่มต้น โดยเฉพาะอย่างยิ่งปัญหาย้อนกลับนี้คือ NP-hard และฉันสงสัยว่าคุณอาจจะเป็นอย่างดี (แม้ว่าจะไม่มีส่วนขยายที่ชัดเจนของการลดเท่าที่ฉันสามารถบอกได้)

E. Arkin, A. Efrat, G. Hart, I. Kostitsyna, A. Kroller, J. Mitchell และ V. Polishchuk สแกนดิเนเวียบางเบาบนเค้ก: ในกล่องขนาดเล็กหนึ่งขนาดเหมาะกับทุกคน สนุกกับอัลกอริทึม pg.16-27 2012


1
ขอบคุณสำหรับคำแนะนำของคุณ ฉันได้ทำงานกับแผนกวิศวกรรมและการผลิตที่ บริษัท ของฉันเพื่อนำมาชี้แจงปัญหานี้ให้ชัดเจนยิ่งขึ้น ฉันยังคงรอการยืนยัน แต่ตอนนี้ฉันคิดว่าอัลกอริทึมที่จะส่งกลับชุดสี่เหลี่ยมที่จารึกไว้ที่ใหญ่ที่สุดจะใช้ได้ ในขณะที่มันไม่ครอบคลุมรูปร่างมันจะให้ความสำคัญกับภูมิภาค orthognal ในขณะที่ออกจากพื้นที่ที่ไม่ใช่ orthogonal ฮิวริสติกบางส่วน เคล็ดลับเดียวคือการขยายขอบเขตภูมิภาคมุมฉากเหล่านั้นให้ได้มากที่สุด ดูรูปสุดท้ายของฉันด้วยตัวเลขที่เหมือนแลมด้า 9
Josh C.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.