我在一个整数网格上有数千个点的数组。我正在寻找一种快速找到点的凹船体的方法。如果点在任何基本方向上相距1个单位,则它们是相邻的。我对边界是否应该对角移动感到矛盾(即从 [391,4036] -> [392,4037] 中偷工减料),而是优先考虑计算速度。没有内部漏洞。我正在使用Python。
x1c 0d1x的数据
我最初的想法是遍历每一个点,并查找它的基数邻居是否也在点集中,如果其中一个不在,那么将该点标记为在形状的边界上。然后我需要一些其他的算法来排序这些点以获得(顺时针或逆时针)边界。
这不会很好地与点的数量,因为对于每个点,我需要检查它的四个基本方向对其他点的成员资格。
查找边界点的Python代码:
boundary_pixels = [
(row_idx, col_idx)
for (row_idx, col_idx) in full_pixels
if not (
((row_idx+1, col_idx) in full_pixels) &
((row_idx-1, col_idx) in full_pixels) &
((row_idx, col_idx+1) in full_pixels) &
((row_idx, col_idx-1) in full_pixels)
)
]
字符串
我知道找到凹壳是一个困难的问题,但有一个解决方案时,点均匀分布在一个网格?
1条答案
按热度按时间k4aesqcs1#
有一个年轻的repo(
concav_hull
,* 依赖于JavaScript算法 *)。你可能会觉得很有趣。如果是这样,这里有一个建议,你可以根据需要进行调整:
字符串
的数据
使用的输入:
型