الاسم
CG_AlphaShape — تحسب شكل ألفا (Alpha-shape) المحيط بشكل هندسي
المختصر
geometry CG_AlphaShape(geometry geom, float alpha, boolean allow_holes = false);
الوصف
تحسب شكل ألفا (Alpha-Shape) لنقاط شكل هندسي. شكل ألفا هو شكل هندسي مضلعي مقعّر (عادةً) يحتوي جميع رؤوس المُدخَل، ورؤوسه مجموعة جزئية من رؤوس المُدخَل. يوفّر شكل ألفا مطابقة أقرب لشكل المُدخَل من الشكل الناتج عن الغلاف المحدب.
يُتحكَّم في "درجة المطابقة" بالمعامل alpha الذي يمكن أن يأخذ قيمًا من 0 إلى ما لا نهاية. تنتج قيم ألفا الأصغر نتائج أكثر تقعّرًا. وتنتج قيم ألفا الأكبر من قيمة معيّنة تعتمد على البيانات الغلافَ المحدب للمُدخَل.
|
|
|
اتباعًا لتطبيق CGAL، فإن قيمة ألفا هي مربع نصف قطر القرص المستخدم في خوارزمية Alpha-Shape "لتآكل" تثليث ديلوني (Delaunay) لنقاط المُدخَل. انظر أشكال ألفا في CGAL لمزيد من المعلومات. يختلف هذا عن التعريف الأصلي لأشكال ألفا الذي يعرّف ألفا بأنها نصف قطر القرص المُتآكِل. |
لا يحتوي الشكل المحسوب على ثقوب ما لم يُحدَّد المعامل الاختياري allow_holes بالقيمة true.
تحسب هذه الدالة فعليًا غلافًا مقعّرًا لشكل هندسي بطريقة مشابهة لـ ST_ConcaveHull، لكنها تستخدم CGAL وخوارزمية مختلفة.
متاحة منذ: 3.5.0 - تتطلب SFCGAL >= 1.4.1.
تتطلب هذه الدالة الواجهة الخلفية SFCGAL.
أمثلة
شكل ألفا لـ MultiPoint (المثال نفسه في CG_OptimalAlphaShape)
SELECT ST_AsText(CG_AlphaShape('MULTIPOINT((63 84),(76 88),(68 73),(53 18),(91 50),(81 70),
(88 29),(24 82),(32 51),(37 23),(27 54),(84 19),(75 87),(44 42),(77 67),(90 30),(36 61),(32 65),
(81 47),(88 58),(68 73),(49 95),(81 60),(87 50),
(78 16),(79 21),(30 22),(78 43),(26 85),(48 34),(35 35),(36 40),(31 79),(83 29),(27 84),(52 98),(72 95),(85 71),
(75 84),(75 77),(81 29),(77 73),(41 42),(83 72),(23 36),(89 53),(27 57),(57 97),(27 77),(39 88),(60 81),
(80 72),(54 32),(55 26),(62 22),(70 20),(76 27),(84 35),(87 42),(82 54),(83 64),(69 86),(60 90),(50 86),(43 80),(36 73),
(36 68),(40 75),(24 67),(23 60),(26 44),(28 33),(40 32),(43 19),(65 16),(73 16),(38 46),(31 59),(34 86),(45 90),(64 97))'::geometry,80.2));
POLYGON((89 53,91 50,87 42,90 30,88 29,84 19,78 16,73 16,65 16,53 18,43 19,
37 23,30 22,28 33,23 36,26 44,27 54,23 60,24 67,27 77,
24 82,26 85,34 86,39 88,45 90,49 95,52 98,57 97,
64 97,72 95,76 88,75 84,83 72,85 71,88 58,89 53))
شكل ألفا لـ MultiPoint مع السماح بالثقوب (المثال نفسه في CG_OptimalAlphaShape)
SELECT ST_AsText(CG_AlphaShape('MULTIPOINT((63 84),(76 88),(68 73),(53 18),(91 50),(81 70),(88 29),(24 82),(32 51),(37 23),(27 54),(84 19),(75 87),(44 42),(77 67),(90 30),(36 61),(32 65),(81 47),(88 58),(68 73),(49 95),(81 60),(87 50),
(78 16),(79 21),(30 22),(78 43),(26 85),(48 34),(35 35),(36 40),(31 79),(83 29),(27 84),(52 98),(72 95),(85 71),
(75 84),(75 77),(81 29),(77 73),(41 42),(83 72),(23 36),(89 53),(27 57),(57 97),(27 77),(39 88),(60 81),
(80 72),(54 32),(55 26),(62 22),(70 20),(76 27),(84 35),(87 42),(82 54),(83 64),(69 86),(60 90),(50 86),(43 80),(36 73),
(36 68),(40 75),(24 67),(23 60),(26 44),(28 33),(40 32),(43 19),(65 16),(73 16),(38 46),(31 59),(34 86),(45 90),(64 97))'::geometry, 100.1,true))
POLYGON((89 53,91 50,87 42,90 30,84 19,78 16,73 16,65 16,53 18,43 19,30 22,28 33,23 36, 26 44,27 54,23 60,24 67,27 77,24 82,26 85,34 86,39 88,45 90,49 95,52 98,57 97,64 97,72 95, 76 88,75 84,83 72,85 71,88 58,89 53),(36 61,36 68,40 75,43 80,60 81,68 73,77 67, 81 60,82 54,81 47,78 43,76 27,62 22,54 32,44 42,38 46,36 61))
شكل ألفا لـ MultiPoint مع السماح بالثقوب (المثال نفسه في ST_ConcaveHull)
SELECT ST_AsText(CG_AlphaShape(
'MULTIPOINT ((132 64), (114 64), (99 64), (81 64), (63 64), (57 49), (52 36), (46 20), (37 20), (26 20), (32 36), (39 55), (43 69), (50 84), (57 100), (63 118), (68 133), (74 149), (81 164), (88 180), (101 180), (112 180), (119 164), (126 149), (132 131), (139 113), (143 100), (150 84), (157 69), (163 51), (168 36), (174 20), (163 20), (150 20), (143 36), (139 49), (132 64), (99 151), (92 138), (88 124), (81 109), (74 93), (70 82), (83 82), (99 82), (112 82), (126 82), (121 96), (114 109), (110 122), (103 138), (99 151), (34 27), (43 31), (48 44), (46 58), (52 73), (63 73), (61 84), (72 71), (90 69), (101 76), (123 71), (141 62), (166 27), (150 33), (159 36), (146 44), (154 53), (152 62), (146 73), (134 76), (143 82), (141 91), (130 98), (126 104), (132 113), (128 127), (117 122), (112 133), (119 144), (108 147), (119 153), (110 171), (103 164), (92 171), (86 160), (88 142), (79 140), (72 124), (83 131), (79 118), (68 113), (63 102), (68 93), (35 45))'::geometry,102.2, true));
POLYGON((26 20,32 36,35 45,39 55,43 69,50 84,57 100,63 118,68 133,74 149,81 164,88 180,
101 180,112 180,119 164,126 149,132 131,139 113,143 100,150 84,157 69,163 51,168 36,
174 20,163 20,150 20,143 36,139 49,132 64,114 64,99 64,90 69,81 64,63 64,57 49,52 36,46 20,37 20,26 20),
(74 93,81 109,88 124,92 138,103 138,110 122,114 109,121 96,112 82,99 82,83 82,74 93))