ios - 简单 2D "collision detection"iOS

标签 ios xcode drawing coordinates diagram

我正在编写一个应用程序,它将计算 CGPoint 并在信封中显示一个标记(如果您愿意,可以是图表)。我的信封只是 UIImageView 中背景图像的一部分。我想要做的是构造一种“线”,对应于包络线限制(它们不是直线,而是曲线),这样如果计算出的 CGPoint 位于这条线的左侧,或者位于另一行,则计算点不被批准。如果它位于这两者的中间,则它被批准。

我首先想到使用 CoreGraphics 绘制线条,但我不确定是否可以检查计算出的 CGPoint 是在这些线条的右侧还是左侧。

信封只有 149px 高,所以我也在考虑整理一个字典,其中 y 位置的键和代表定义边界线的像素的 x 位置的值。

该应用程序相当简单,没有任何动画。有没有人知道如何最好地为这种行为提出解决方案?

最佳答案

您可以通过创建代表您的边界线(包络线的轮廓)的 CGPath 并使用 CGPathContainsPoint 测试其中是否包含一个点来实现此目的。

您必须反复试验才能构建与您的信封形状匹配的 CGPath,尝试将其填充到 drawRect 方法中以查看您的路径实际是什么。

这是一个圆形路径的例子:

CGPoint viewCenter = CGPointMake(100,100);
CGPoint checkPoint = CGPointMake(110,110);
UIBezierPath *bpath = [UIBezierPath bezierPathWithArcCenter:viewCenter radius:50 startAngle:0 endAngle:DEGREES_TO_RADIANS(360) clockwise:YES];
CGPathRef path = [bpath CGPath];
BOOL inPath = CGPathContainsPoint(path, NULL, checkPoint, NO);

这里我定义了 DEGREES_TO_RADIANS:

#define DEGREES_TO_RADIANS(angle) ((angle) / 180.0 * M_PI)

关于ios - 简单 2D "collision detection"iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9049614/

相关文章:

c# - 滚动文本真的很痛苦..?

ios - Swift - 通过定义的点/区域检测用户绘图。

ios - AlamoFireObjectMapper 无法在对象数组中保存数据响应

ios - 在 ViewController 中使用带有外部数据源和 UITableView 的自定义 UITableViewCell

ios - Xcode推送工作区与子模块错误的存储库推送

ios - .gitignore 不适用于 XCode 项目中的 xcuserdata 目录

ios - 将APN从 Node 服务器发送到设备

ios - AVAssetExportSession 无音频(iPhone),适用于 iPad

objective-c - iOS 获取连接

c# - 获取具有由鼠标位置定义的坐标的线