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


19

ฉันมีรูปหลายเหลี่ยม (บางครั้งนูน แต่มักเว้า) และเป็นวงกลมที่มีรัศมีแตกต่างกัน ฉันจะทราบได้อย่างไรว่าวงกลมตัดกันหรือทับซ้อนกับรูปหลายเหลี่ยม?

ฉันสามารถแบ่งรูปหลายเหลี่ยมเว้าเป็นชิ้นส่วนนูน จะช่วยได้ไหม

คำตอบ:


26

มีปัญหานี้สองกรณี แรกคือทางแยกและที่สองที่ทับซ้อนกัน (บรรจุ)

แรก (จุดตัด / รูปหลายเหลี่ยมภายในวงกลม):

ค้นหาจุดที่ใกล้เคียงที่สุดบนขอบของรูปหลายเหลี่ยมทุกจุดจนถึงศูนย์กลางของวงกลม หากระยะห่างระหว่างจุดที่ใกล้ที่สุดไปยังศูนย์กลางน้อยกว่ารัศมีคุณมีจุดตัดหรือทับซ้อนกัน

ที่สอง (วงกลมมีทั้งรูปหลายเหลี่ยม): ยิงรังสีจากจุดศูนย์กลางวงกลมไปทางขวา (หรือซ้าย / ขึ้น / ลง) และนับเรย์ / ส่วน (ขอบรูปหลายเหลี่ยม) หากการนับทางแยกเป็นวงกลมแม้จะอยู่นอกรูปหลายเหลี่ยม ถ้ามันเป็นวงกลมแปลก ๆ อยู่ข้างใน

ฉันจะแบ่งปัน picter จากการบรรยายสำหรับกรณีนี้:

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

และดูแลกรณีที่เป็นเอกเทศ

หวังว่าจะช่วยได้


แก้ไข: ฉันคิดว่ามันยุติธรรมที่จะเพิ่มเครดิตในภาพ ผู้แต่งคือ Petr Felkel ผู้ช่วยศาสตราจารย์ที่ Czech Technical University ในปราก


ฉันไม่คิดว่ามันจะใช้ได้โดยเพียงแค่ "ยิง" รังสีไปทางขวา บางทีฉันอาจเข้าใจผิดวิธีของคุณ แต่จากสิ่งที่ฉันเข้าใจว่ามันจะล้มเหลวด้วยการตั้งค่าตามที่อธิบายไว้ที่นี่: imgur.com/Whg2u
bummzack

2
ใช่ แต่นี่จะอธิบายไว้ในกรณีแรก การถ่ายเรย์จะแก้ได้เฉพาะวงกลมหลายเหลี่ยมที่มี (กรณีที่สองในคำอธิบายของฉัน) คุณต้องทดสอบทั้งสองกรณี มันรวดเร็วใช้งานง่ายและไม่ต้องการหน่วยความจำใด ๆ
Notabene

1
ฉันขอโทษฉันสับสน "ขอบ" กับ "จุดสุดยอด" และตีความการตรวจสอบครั้งแรกของคุณผิด เมื่ออ่านได้อย่างถูกต้องก็ทำงาน :)
bummzack

7

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

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

แทนที่จะไปกว่าขั้นตอนวิธีการทั้งหมดที่นี่ Metanet ซอฟแวร์ (ผู้ผลิตของ N / N +) มีการกวดวิชาที่ดีในการตรวจสอบการชนโดยใช้ SATที่ส่วนที่สามซึ่งครอบคลุม SAT เมื่อหนึ่งของวัตถุที่เป็นวงกลม


คุณมีการอ้างอิงสำหรับการแยกรูปหลายเหลี่ยมเว้าเป็นรูปหลายเหลี่ยมนูนหรือไม่? ลิงก์ SAT ที่คุณระบุไม่ได้กล่าวถึงสิ่งใด
ehsanul

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

1
@ehsanul: en.wikipedia.org/wiki/Polygon_triangulationอธิบายวิธีการยอดนิยมสองอย่าง

0

นี่คือสิ่งที่ฉันทำ

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