gpt4 book ai didi

ios - 如何检测 UIImage 的非透明部分何时与 UIImage 的另一个非透明部分接触

转载 作者:搜寻专家 更新时间:2023-10-30 20:17:51 27 4
gpt4 key购买 nike

我在完成一些我认为会容易得多的事情时遇到了困难。每当 UIImage 中的图片的非透明部分接触到 UIImage 中包含的图像的另一个非透明部分时,我试图运行一种方法。我提供了一个示例来帮助进一步解释我的问题。

A visual example of my problem

如您在上图中所见,我有两个三角形,它们都位于 UIImage 中。三角形都是PNG图片。因为背景已经透明,所以只有三角形是可见的。两个 UIImages 都在 UIImageView 中。我希望能够在三角形的可见部分接触到另一个三角形的可见部分时运行一个方法。有人可以帮帮我吗?

最佳答案

这个问题的强力解决方案是为每个图像创建一个 bool 的二维数组,其中每个数组条目对于不透明像素都是 true,并且 false 透明像素。如果 CGRectIntersectsRect 返回 true(表示可能发生碰撞),则代码会扫描两个数组(根据相对位置使用适当的偏移量)以检查是否存在实际碰撞。这变得很复杂,而且计算量很大。

暴力方法的一种替代方法是使用 OpenGLES 完成所有工作。这仍然是一个蛮力解决方案,但它将工作卸载到 GPU,GPU 在这些事情上要好得多。我不是 OpenGLES 方面的专家,所以我会把细节留给其他人。

第二种选择是对问题施加限制,使其更容易解决。例如,给定两个三角形 A 和 B,只有当 A 的顶点之一包含在 B 的区域内,或者 B 的顶点之一在 A 中时,才会发生碰撞。这个问题可以使用 UIBezierPath 类来解决在 Objective-C 中。 UIBezierPath 可用于创建三角形的路径。然后可以使用 UIBezierPath 的 containsPoint: 方法来检查对立三角形的顶点是否包含在目标三角形的区域内。

综上所述,解决方案是为每个对象添加一个 UIBezierPath 属性。初始化 UIBezierPath 以近似对象的形状。如果 CGRectIntersectsRect 指示可能发生碰撞,则使用 containsPoint: 方法检查一个对象的顶点是否包含在另一个对象的区域中。

关于ios - 如何检测 UIImage 的非透明部分何时与 UIImage 的另一个非透明部分接触,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22771662/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com