ios - 查找给定形状的外线

标签 ios objective-c math

我有各种实体形状,需要为其找到外线。

我从 API 获取形状,作为形状中每个像素的 x、y 坐标列表。我想删除“填充点”,所以我只有一个“外线”列表,即这张图片中的红色像素:

enter image description here

如何做到这一点?

最佳答案

如果您打开该图像并将其放大,您可以很容易地看出红色像素与蓝色像素的区别:红色像素至少有一个白色像素,位于正上方、下方、左侧或右侧它的右边,而蓝色像素为零。对角线不算在内。

因此,在给定像素坐标列表的情况下,您可以使用以下算法找到形状的外线(红色像素):

  • 将所有像素坐标转换为整数(如果尚未转换)。
  • 遍历列表中的所有点并找到最小和最大 x 和 y 坐标。
  • 创建一个大小为 [(max y - min y) + 1][(max x - min x) + 1] 的数组并将所有元素设置为 0
  • 遍历列表中的所有点并将数组[point y - min y][point x - min x]设置为1
  • 为您的外线坐标创建一个空列表
  • 遍历数组,对于每个元素 array[y][x]:
    • 如果 array[y][x] 等于 1 AND (array[y-1][x] 等于 0 OR array[y+1][x] 等于 0 OR array[y][x-1] 等于 0或者 array[y][x+1] 等于 0),那么:
      • 将 (x + min x, y + min y) 添加到外线点列表。

请注意 (max y - min y) 和 (max x - min x) 不要太大,否则在尝试分配数组时可能会出现内存不足错误。此外,为了避免在检查数组时出现索引越界错误,只需在数组的边缘添加任何像素(x 或 y = 0,x 或 y = x 或 y 数组大小 - 1),其中 array[y][x ] 等于列表中的 1 并避免其他检查。

关于ios - 查找给定形状的外线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30161255/

相关文章:

objective-c - ObjectiveZlib 未解压

ios - 为什么 UIView 比 Screen 宽

ios - 为什么字符串格式在 UILabel 中不起作用?

objective-c - 用字节填充 NSMutableData 会导致长度为零

.net - 在椭圆圆周上找到一个点,该点在具有中心点,高度和宽度的矩形内?

javascript - 在 Javascript 中计算 RGB 色 block 平均值的更有效方法

ios - 为什么 NSDictionary 在使用 DictionaryWithObjectsAndKeys 时有时会删除引号?

objective-c - block , self ,保留循环

ios - PromiseKit:如何在 ObjC 中进行重试/轮询?

algorithm - 解决复发