เติมช่องว่างระหว่างเส้น 2D แบบสุ่ม


23

พิจารณาภูมิภาค (2D) ที่เต็มไปด้วยเส้นสุ่ม (ตามรูป) เรามีความสนใจในการเติมช่องว่างระหว่างบรรทัดรวมถึงสี่ขอบเขตในวิธี:

0-เพิ่มขนาดของหีบห่อ;
1-รูปร่างของพัสดุบรรจุเป็นแนวตั้งแนวนอนหรือแนวตั้ง;
2-รูปร่างของผืนกรอกเป็นตารางเช่นการจัดตำแหน่งที่ผ่อนคลาย ;
3- รูปร่างของการกรอกพัสดุเป็นรูปสี่เหลี่ยมใด ๆ คำถามเดิมของเรา

ดังนั้นสำหรับตอนนี้มีสามสถานการณ์ที่แตกต่างกัน
โปรดสังเกตว่าบรรทัดนั้นเป็นของ[x1,y1,x2,y2]จุดฟอร์มตั้งค่าจำนวนจริง

[* * *] แนวคิดของการแก้ปัญหา / อัลกอริธึม / ตัวอย่างโค้ด / อื่น ๆ เป็นไปได้มากกว่าการต้อนรับ

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


อัปเดต 1:เราสามารถจัดการวิธีแก้ปัญหาสำหรับกรณีแรก:
ป้อนคำอธิบายรูปภาพที่นี่
ขั้นตอนคือ:
1-บรรทัด
2- rasterizing บรรทัดเป็นบิตแมป
3-ค้นหาเซลล์ใกล้เคียงสำหรับแต่ละเซลล์ของสีที่ต้องการ (เช่นสีเดียวกัน) ด้วยฟังก์ชั่นวัตถุประสงค์เพื่อเพิ่ม พื้นที่คือจำนวนเซลล์

มันใช้งานได้ดี แต่มันครอบคลุมเฉพาะสถานการณ์แรกและมันก็ช้า


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


อัปเดต 3:
สรุป:
แอปพลิเคชั่นเดียวคือค้นหาการกระจายของบล็อก 'ร็อค' ที่ยังสามารถสกัดได้ใน 'เหมือง' ที่แตกหักอย่างมาก สิ่งนี้อาจมีประโยชน์มากสำหรับหลาย ๆ ด้านรวมถึงการออกแบบการขุดเจาะการประเมินทางการเงินและอื่น ๆ
คำอธิบาย:
สำหรับเหมืองหินประดับ (หิน) ผลิตภัณฑ์ที่เป็นบล็อกของหินที่ไม่บุบเหมือนถูกตัดเป็นก้อนสี่เหลี่ยมราคาขึ้นอยู่กับขนาดของ กลุ่ม การสกัดบล็อกออกจากพื้นที่ที่เหมาะสมคือไม่มีการแตกหักที่สำคัญหากต้องการจำนวนชิ้นส่วนที่เหลือน้อยที่สุด โดยปกติแล้วก้อนหินขนาดเล็กนั้นไม่มีมูลค่าทางเศรษฐกิจค่อนข้างมากและถูกพิจารณาว่าเป็นของเสีย
คำถามในโพสต์นี้จะตรวจสอบวิธีแก้ไขปัญหาสำหรับปัญหานี้

มุมมองทางคณิตศาสตร์ของปัญหาสามารถระบุได้ดังนี้:
2D:ค้นหาสี่เหลี่ยมทั้งหมดที่สามารถแยกได้จากขอบเขต 2D ที่กำหนดโดยมีบางบรรทัดที่ปรับให้เหมาะสมกับขนาดสี่เหลี่ยมที่ใหญ่ที่สุดเท่าที่จะเป็นไปได้
3D:ค้นหาลูกบาศก์สี่เหลี่ยมทั้งหมดที่สามารถแยกได้จากภูมิภาค 3 มิติที่กำหนดด้วยระนาบย่อย (ดีกว่า: รูปหลายเหลี่ยม) ที่ปรับให้เหมาะสมที่สุดสำหรับขนาดบล็อกที่ใหญ่ที่สุดเท่าที่จะเป็นไปได้


เนื่องจากนี่เป็นส่วนหนึ่งของการวิจัยอย่างต่อเนื่องคำถามบางข้อที่ถามในความคิดเห็นด้านล่างจึงไม่มีคำตอบบางอย่างที่เราสามารถให้ได้ เราเชื่อว่าข้อมูลที่ให้ไว้ ณ ที่นี้เพียงพอที่จะรับภาพรวมของปัญหาได้ อย่างไรก็ตามเราให้รายละเอียดบางอย่างเพื่อประโยชน์ชุมชน
คุณอาจวางข้อ จำกัด ในการแก้ปัญหาสำหรับคำถามสุดท้ายแม้ว่าเราเชื่อว่าเป็นไปได้ที่จะเพิ่มในภายหลัง ตัวอย่างเช่นให้ทำตามสิ่งเหล่านี้: {กรณี 2D}
ขนาดที่ดีที่สุดของบล็อก (สี่เหลี่ยมผืนผ้าที่เหมาะสมที่สุดในเชิงเศรษฐศาสตร์) ที่จะแยกออกมาภายใต้เงื่อนไขที่กล่าวถึงข้างต้นนั้นจะถูก1x1 mกำหนด10x10 mสำหรับพื้นที่ในตัวอย่าง นี่คือข้อ จำกัด หนึ่งข้อที่กำหนดตามมูลค่าทางเศรษฐกิจ ขนาดต่ำสุดที่สามารถทำงานได้สำหรับการตัด ฯลฯ ให้เป็น0.15x0.15 m; ดังนั้นนี่เป็นการ จำกัด ขนาดที่สอง
ป้อนคำอธิบายรูปภาพที่นี่
รูปด้านบนแสดงฟังก์ชั่นมูลค่าทางเศรษฐกิจขึ้นอยู่กับขนาดบล็อก ดังนั้นสำหรับกรณีนี้หินทุกก้อนที่เล็กกว่า0.15x0.15 mนั้นก็เสียเปล่า จะไม่มีขนาดบล็อกใหญ่กว่า1.7x1.7 mเนื่องจากข้อ จำกัด การดำเนินการ


3
@RK - ฉันไม่เห็นด้วย เขา / เธอได้ระบุสิ่งที่พวกเขากำลังมองหาอย่างชัดเจนแล้ว แน่นอนว่ามีวิธีแก้ปัญหาที่เป็นไปได้หลายอย่าง แต่ไม่มีอะไรจะหยุดพวกเขาทั้งหมดเป็นประโยชน์และโหวต
GIS-Jonathan

1
เนื่องจากนี่เป็นคำถามของอัลกอริทึมที่อาจเป็นคณิตศาสตร์ที่ค่อนข้างหนักคุณอาจต้องการลอง - math.stackexchange.com
GIS-Jonathan

1
ที่เกี่ยวข้องอย่างใกล้ชิดgis.stackexchange.com/questions/27303 คำถามปัจจุบันซึ่งเป็นบันทึกย่อของ @RK นั้นไม่มีคำตอบที่แน่นอนเพราะมันไม่ได้ถูกวางอย่างดีพอ อนุญาตกี่สี่เหลี่ยม? การขยายขนาดให้ใหญ่สุดหมายความว่าอย่างไร หมายเหตุด้วยเช่นกันว่านี่ไม่ใช่ปัญหา "การเรียงแบบสุ่ม": เส้นจะเป็นตัวกำหนดโดยใช้ส่วนเสริมพื้นที่ที่สามารถครอบครองได้ การแก้ปัญหาจะไม่ถูกสุ่มแน่นอน โปรดทราบด้วยว่าการทำให้เข้าใจง่ายง่ายนั้นมีอยู่ในทันที: ปัญหาสามารถแก้ไขแยกต่างหากภายในแต่ละส่วนประกอบของส่วนประกอบ
whuber

1
@whuber: แอปพลิเคชั่นหนึ่งที่เราสนใจคือการค้นหาการกระจายของบล็อก 'ร็อค' ที่ยังสามารถสกัดได้ซึ่งอยู่ใน 'เหมือง' ที่แตกหักอย่างมาก GIS ดูเหมือนว่าจะมีแนวโน้มสำหรับปัญหานี้เราคิดว่า เราได้เพิ่มสิ่งนี้ลงในคำถามด้วย เราเดาว่าชุมชน GIS อาจได้รับประโยชน์จากแนวคิดสำหรับปัญหาเฉพาะอื่น ๆ อย่างไรก็ตามมันขึ้นอยู่กับคุณถ้าคุณย้ายมัน;)
นักพัฒนา

4
ตามที่ @whuber แนะนำว่านี่ไม่ใช่คำถาม GIS (แต่ฉันไม่ได้โกรธที่ถูกถามที่นี่) คุณจะมีโอกาสที่ดีกว่าที่จะได้รับคำตอบในฟอรัมสำหรับการคำนวณเชิงเรขาคณิตหรือการเพิ่มประสิทธิภาพ
Llaves

คำตอบ:


2

ฉันมีความคิดว่าคุณทำงานซ้ำ ๆ จากบล็อกขนาดใหญ่ไปจนถึงบล็อกขนาดเล็กโดยใช้ FME (โดยซอฟต์แวร์ปลอดภัย) สำหรับบันทึกฉันไม่ทำงานสำหรับพวกเขา แต่ดูเหมือนจะยกย่องเครื่องมือของพวกเขามากพอ ...

  1. ใช้ "BoundingBoxReplacer" บนพื้นที่ที่สนใจ
  2. ปฏิเสธมันไปยังระบบพิกัดในพื้นที่ (สำหรับในภายหลังเมื่อคุณต้องการ "ไทล์" เป็นฟุต / เมตร)
  3. บัฟเฟอร์บรรทัดด้วย "Bufferer" หม้อแปลง คุณต้องการขนาดที่กำหนดเองโดยบอกว่า. 01 ฟุต / เมตร สิ่งที่เรากำลังมองหาที่นี่คือรูปหลายเหลี่ยมของบรรทัดสำหรับขั้นตอนต่อไป
  4. เพิ่ม "Tiler" Transformer ระบุขนาดไทล์ขนาดใหญ่ (โดยประมาณหรืออย่างอื่น) เป็นฟุตหรือเมตร สิ่งที่เราทำที่นี่คือการปูกระเบื้องพื้นที่ที่น่าสนใจลงในบล็อกสี่เหลี่ยม ขึ้นอยู่กับชุดข้อมูลเริ่มต้นที่มีขนาดใหญ่ที่จะได้รับค่าผิดปกติขนาดใหญ่
  5. เพิ่มหม้อแปลง "Clipper" สิ่งที่เรากำลังทำอยู่ที่นี่คือการตัดชุดข้อมูลเพื่อดูว่ากระเบื้องใดบ้างที่ดี / ไม่ดี ในเอาต์พุตกระเบื้องที่มี "Inside" ใหญ่เกินไป อย่างไรก็ตามกระเบื้องที่ "ภายนอก" มีขนาดใหญ่พอและพร้อมสำหรับการตัด ...
  6. ที่นี่มันซับซ้อน แต่ไม่ยาก ... เราจะวนรอบหม้อแปลงเพื่อให้เราใช้ BoundingBox เดิมอีกครั้ง แต่ตัดส่วนที่พร้อมแล้วสำหรับการตัดออก ดังนั้นเพิ่ม clipper และกำหนดเส้นทาง Clipper เป็นไทล์ "เอาท์พุท" บนเอาท์พุท clipper ก่อนหน้า ตอนนี้เรามีรูปหลายเหลี่ยมเดียวที่พร้อมจะทำงานอีกครั้ง
  7. ใช้ tiler อีกครั้งคราวนี้ระบุไทล์ที่เล็กกว่า ตัวอย่างเช่นถ้าคุณใช้ไทล์ 100 เมตรก่อนหน้านี้ลอง 90 เมตร
  8. เพิ่ม clipper อื่นโดยที่ clipper อินพุตเป็นบรรทัดที่บัฟเฟอร์และ clippee อินพุตเป็นกระเบื้องขนาดเล็กเป็นอินพุต

ล้างและทำซ้ำหลาย ๆ ครั้งตามความจำเป็นโดยใช้กระเบื้องขนาดเล็กในแต่ละครั้ง ฉันได้แนบจุดเริ่มต้นของ workbench ที่ฉันจะใช้เป็นหนึ่งในวิธีการ

ตามคำอธิบาย (รายละเอียดของคุณอย่างละเอียด) มันจะทำงานกับตัวเลือกที่ 1 ของคุณในตอนนี้เท่านั้น โดยไม่ต้องสละเวลามากเกินไป

ต่อไปนี้เป็นเพียงวิธีหนึ่งที่ฉันจะเริ่มต้นด้วยอย่างน้อยกรองข้าวสาลีจากแกลบ

ตัวอย่างกระเบื้อง FME

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.