โครงร่างสามเหลี่ยมของรูปหลายเหลี่ยมแบบไม่มีจุดยอดเพิ่มเติม ของ โครงข่ายสามเหลี่ยมของรูปหลายเหลี่ยม

วิธีการตัดหู (Ear Clipping Method)

หูของรูปหลายเหลี่ยม

วิธีที่ได้รับความนิยมและง่ายในการเขียนวิธีหนึ่งคือการตัดสามเหลี่ยมที่เป็น “หู” สามเหลี่ยมที่เป็นหูคือสามเหลี่ยมที่มีด้าน 2 ด้านอยู่ที่ขอบของรูปหลายเหลี่ยมและด้านที่เหลืออยู่ในด้านในทั้งหมด ซึ่งวิธีนี้จะใช้ได้กับรูปหลายเหลี่ยมที่ไม่มีรูภายในเท่านั้น โดยรูปหลายเหลี่ยมเหล่านั้นที่มีมุมมากกว่า 4 มุมขึ้นไป จะมี 2 หูเป็นอย่างน้อย หลังจากตัดทิ้งไปแล้วก็จะได้รูปหลายเหลี่ยมใหม่ที่มีจุดยอดมากกว่าเท่ากับ 3 ให้ทำต่อไปเรื่อยๆจนหมดก็จะได้เซ็ทของสามเหลี่ยมทั้งหมด ซึ่งเวลาที่ใช้จะเป็น O ( n 2 ) {\displaystyle O(n^{2})} วิธีในการหาหูนั้นถูกค้นพบโดย Hossam ElGindy, Hazel EverettHazel Everett และ Godfried Toussaint โดยในการหาหูจะใช้เวลาเป็น O ( n ) {\displaystyle O(n)}

รหัสเทียม

กำหนดให้ GSP คือรูปหลายเหลี่ยมย่อยของ P ที่เกิดจากการลากเส้นทแยงมุมจากมุมหนึ่งไปสู่อีกมุมหนึ่งเพียงเส้นเดียว

Function FindAnEar (GSP, pi) if pi is an ear then  return pi  Find a vertex pj such that (pi, pj) is a diagonal of GSP.Let GSP' be the good sub-polygon of GSP formed by (pi, pj).
Re-label the vertices of GSP' so that pi = p0 and pj = pk-1 (or pj = p0 and pi = pk-1 as appropriate) where k is the number of vertices of GSP'. FindAnEar (GSP', floor (k/2))End FindAnEar

วิธีรูปหลายเหลี่ยมทางเดียว (Monotone Polygons Method)

การแบ่งรูปหลายเหลี่ยมเป็นรูปหลายเหลี่ยมทางเดียว

เราสามารถแบ่งรูปหลายเหลี่ยมให้กลายเป็นรูปหลายเหลี่ยมทางเดียวได้

ขั้นตอนวิธี

1. แยกรูปหลายเหลี่ยมให้กลายเป็นสี่เหลี่ยมคางหมู

กำหนดให้ S คือเซ็ทของเส้นขอบของรูปหลายเหลี่ยมที่ไม่ใช่เส้นแนวนอนและไม่ตัดกัน ขั้นตอนวิธีแบบสุ่ม (อังกฤษ: Randomised Algorithm) จะถูกใช้เพื่อสร้างสี่เหลี่ยมคางหมูจากเส้นตรงใน S ซึ่งจะทำโดยจะดึงเส้นตรงใน S ออกมาทีละเส้นแบบสุ่มเพื่อสร้างเป็นสี่เหลี่ยมคางหมู วิธีนี้จะแบ่งรูปหลายเหลี่ยมเป็นสี่เหลี่ยมคางหมูจำนวนหนึ่งตัวสี่เหลี่ยมคางหมูนี้สามารถลดรุปเป็นสามเหลี่ยมได้ถ้ามีขอบด้านใดด้านหนึ่งมีความยาวด้านนอนเป็นศูนย์ สำหรับเงื่อนไขที่ว่าเส้นในเซ็ทจะต้องไม่เป็นเส้นนอนนั้นมีขึ้นเพื่อจำกัดจำนวนที่ต้องทำให้ลดน้อยลง แต่ก็ไม่ได้ส่งผลอะไรต่อผลลัพธ์ที่จะได้ ซึ่งจากที่ Siedal ได้พิสูจน์ไว้เราสรุปได้ว่าขั้นตอนนี้ใช้เวลาในการทำงานเป็น O ( n l o g n ) {\displaystyle O(nlogn)}

2. แยกสี่เหลี่ยมคางหมูออกเป็นรูปหลายเหลี่ยมทางเดียว

รูปหลายเหลี่ยมทางเดียวคือรูปหลายเหลี่ยมที่มีสายโซ่ทางเดียวในแกน y {\displaystyle y} 2 สาย รูปหลายเหลี่ยมเหล่านี้จะถูกคำนวณจากการแบ่งรูปเป็นสี่เหลี่ยมคางหมูโดยการตรวจสอบว่ามุม 2 มุมหนึ่งๆของรูปหลายเหลี่ยมเดิมนั้นอยู่บนฝั่งเดียวกันหรือไม่ ขั้นตอนนี้ใช้เวลาเป็นเชิงเส้น O ( n ) {\displaystyle O(n)}

3. แยกรูปหลายเหลี่ยมทางเดียวเป็นสามเหลี่ยม

รูปหลายเหลี่ยมทางเดียวสามารถแยกเป็นสามเหลี่ยมได้โดยใช้ขั้นตอนวิธีเชิงละโมบ โดยให้ตัดมุมเว้าไปเรื่อยๆ ซึ่งในส่วนนี้จะใช้เวลาเป็น O ( n ) {\displaystyle O(n)}

รหัสเทียม

Input: Monotone polygon POutput: Set of triangles     Sort the n vertices belonging to polygon P with respect to x-coordinate and store them in V.Initialize sweep-line active list L L = a list with the first two points of VWHILE V is not empty DO /* Extract the next vertex from V */ p = MIN (V) IF (p is opposite to points in L) THEN  WHILE |L| > 1 DO   Output Triangle {First (L), Second (L),p}   REMOVE (FIRST (L))   Add p to L ELSE  WHILE (Angle{Last (L), Previous (Last (L)), p}is convex .AND. |L| > 1) DO   Output Triangle {last (L), Previous (last), p}   REMOVE last (L)   /*  The angle is reflex or cardinality of L is 1 */  Add p to L

ความซับซ้อนในการคำนวณ

โครงข่ายสามเหลี่ยมของรูปหลายเหลี่ยมนั้นเป็นปัญหาที่มีการคิดกันมานานแล้วว่าจะสามารถทำให้ได้ไวกว่า O ( n l o g n ) {\displaystyle O(nlogn)} ได้หรือไม่ ในปี 1990 นั้น David G. Kirkpatrick,David G. Kirkpatrick, Robert E. Tarjan ได้ค้นพบขั้นตอนวิธีที่ใช้เวลาเพียง O ( n l o g l o g n ) {\displaystyle O(nloglogn)} สำหรับวิธีใช้ขั้นตอนวิธีแบบสุ่มนั้นเช่นขั้นตอนวิธีของ Seidel's or Clarkson et al.'s, ใช้เวลาเป็น O ( n l o g ∗ n ) {\displaystyle O(nlog*n)} ซึ่งในความเป็นจริงแล้วแทบไม่ต่างอะไรกับ O ( n ) {\displaystyle O(n)} เลย

นอกจากวิธีการข้างต้นแล้ว Bernard Chazelle ยังได้แสดงให้เห็นว่าโครงข่ายสามเหลี่ยมของรูปหลายเหลี่ยมนั้นสามารถหาได้ด้วยเวลาเชิงเส้น แต่ขั้นตอนวิธีนั้นมีความซับซ้อนมากต่อมาในปี 1998 ขั้นตอนวิธีที่ใช้เวลาเฉลี่ยเป็น O ( n ) {\displaystyle O(n)} ก็ได้ถูกค้นพบและตีพิมพ์โดย Alexey V. Skvortsov และ Yuri L. Kostyuk โดยขั้นตอนวิธีนี้จะใช้หลักการของกำหนดการพลวัตในการจำรูปสามเหลี่ยม

ส่วนความซับซ้อนทางด้านเวลาของขั้นตอนวิธีในการหาโครงข่ายสามเหลี่ยมของรูปสามเหลี่ยมที่มีรูภายในนั้นจะใช้เวลาเป็น Ω ( n l o g n ) {\displaystyle \Omega (nlogn)}

ใกล้เคียง

โครงข่ายประสาทเทียม โครงข่ายสามเหลี่ยมของรูปหลายเหลี่ยม โครงข่ายโลหะ−สารอินทรีย์ โครงข่ายโทรคมนาคมยุคหน้า โครงข่ายประสาทเทียมแบบสังวัตนาการ โครงข่ายโทรคมนาคมแห่งชาติ โครงข่ายระบบรถไฟฟ้าขนส่งมวลชนในกรุงเทพมหานครและพื้นที่ต่อเนื่อง โครงข่ายคอมพิวเตอร์ โครงข่ายระบบรถไฟฟ้าในประเทศไทย โครงข่ายประสาท

แหล่งที่มา

WikiPedia: โครงข่ายสามเหลี่ยมของรูปหลายเหลี่ยม http://cgm.cs.mcgill.ca/~godfried/teaching/cg-proj... http://www.personal.kent.edu/~rmuhamma/Compgeometr... http://parasol.tamu.edu/publications/abstract.php?... http://www.cs.unc.edu/~dm/CODE/GEM/chapter.html http://computacion.cs.cinvestav.mx/~anzures/geom/t... http://sigbjorn.vik.name/projects/Triangulation.pd... //doi.org/10.1007%2FBF02574703 //doi.org/10.1007%2Fs00454-001-0027-x //doi.org/10.1145%2F357337.357341 //www.worldcat.org/issn/0179-5376