ฉันมีเวกเตอร์เลเยอร์ที่มีรูปหลายเหลี่ยมหลายล้านที่ครอบคลุมอย่างต่อเนื่อง ฉันต้องการจำแนกพวกเขาตามรูปร่างของพวกเขา ฉันกำลังใช้ดัชนีรูปร่างหลายรูปแบบจากนิเวศวิทยาภูมิทัศน์เช่นความกะทัดรัด ( 4piA / P ^ 2 ), ความกว้างเฉลี่ย ( 2A / P ), หมายเลขรูปร่าง ( P / sqrt (A) ) ฉันเห็นคำตอบนี้เพื่อคำนวณความกลม / ความกะทัดรัดของ รูปหลายเหลี่ยม?
ปัญหาของฉันคือว่าตัวชี้วัดเหล่านี้ทั้งหมดใช้อัตราส่วนของพื้นที่และเส้นรอบวงเท่านั้น แม้แต่ดัชนีมิติเศษส่วนก็ใช้พื้นที่และปริมณฑลเท่านั้น ( 2ln (0.25P) / ln (A) ) แต่ฉันจะแยกความแตกต่างของรูปหลายเหลี่ยมสองรูปได้ด้วยพื้นที่และปริมณฑลเดียวกัน แต่มีรูปร่างที่แตกต่างกันอย่างไร ชอบรูปหลายเหลี่ยมที่แยกย่อยนี้ A:
ซึ่งฉันพยายามวาดด้วยพื้นที่และเส้นรอบวงเดียวกันเป็นแถบโค้ง B ดัชนีทั้งหมดที่ฉันรู้จักจะเหมือนกันสำหรับพวกเขา แต่สำหรับฉันมันสำคัญมากที่จะต้องแยกความแตกต่างของแถบแบบง่าย ๆ (รวมถึงโค้งเหมือนดวงจันทร์ใหม่) จากรูปร่างที่แตกกิ่งก้านสาขาที่ซับซ้อน
ฉันตั้งใจแสดงรูปหลายเหลี่ยม B เป็นแถบโค้งและไม่เป็นแถบเส้นตรงเพราะฉันรู้ว่าดัชนี Circumcircle ที่เกี่ยวข้องซึ่งตรวจจับรูปร่างที่ยืดยาวตรง แต่รูปหลายเหลี่ยมของฉันอาจมีรูปวงกลมเหมือนกัน แม้ว่าฉันจะสร้างตัวเรือนูนและคำนวณอัตราส่วนของพื้นที่Apolygon / Aconvexมันอาจคล้ายกันมากที่นี่
ดังนั้นฉันจะแยกความแตกต่างของรูปหลายเหลี่ยมที่แยกจาก A ของรูปหลายเหลี่ยม B ในข้อมูลเวกเตอร์โดยอัตโนมัติได้อย่างไร (การแปลงเป็นแรสเตอร์จะต้องใช้ขนาดเซลล์ที่เล็กมากชุดข้อมูลขนาดใหญ่และการขาดหน่วยความจำจึงไม่สามารถทำได้) มีดัชนีรูปร่างอื่น ๆ ซึ่งรวมถึงพารามิเตอร์อื่น ๆ หรือไม่? เป็นการดีที่วิธีการจะแยกความแตกต่างไม่เพียง แต่รูปหลายเหลี่ยมแยกอย่างชัดเจน แต่แม้ C และ D:
ความคิดเดียวของฉันคือการสร้างฮัลล์นูนจากนั้นลบโพลีกอนออกจากฮัลล์นูนและนับจำนวนชิ้น (ใหญ่) ที่เหลือ (การลบรูปหลายเหลี่ยมด้วยโพลีกอนไม่ใช่ชั้นทั้งหมด นี่อาจแสดงความซับซ้อนของเส้นขอบ
ฉันยินดีต้อนรับโซลูชัน / อัลกอริทึมทางคณิตศาสตร์ซึ่งฉันจะนำไปใช้ใน Python ในภายหลัง