我将如何从接触点获取最低和最高坐标数?

Posted

技术标签:

【中文标题】我将如何从接触点获取最低和最高坐标数?【英文标题】:How would I go about getting the lowest and highest coordinate numbers from touchpoints? 【发布时间】:2021-04-26 20:36:38 【问题描述】:

无论绘制的形状是什么,我都想从 touchesmoved 事件中获取最低和最高的 x 和 y 坐标。基本上我想创建一个包含形状的 cgrect 。我不知道该怎么做。

【问题讨论】:

【参考方案1】:

有多种方法可以做到这一点。

UIBezierPath 有一个 bounds 方法,它会给你一个包含路径中所有点的边界矩形。如果您正在将您的形状构建为 UIBezierPath,那么您应该只需要。

如果您需要自己跟踪边界,请设置一些变量并根据需要进行调整:

var minY = CGFloat.greatestFiniteMagnitude
var maxY = -CGFloat.greatestFiniteMagnitude

var minX = CGFloat.greatestFiniteMagnitude
var maxX = -CGFloat.greatestFiniteMagnitude

当您从用户那里收集积分时,如果x 坐标是< minX,则更新minX。如果是> maxX,请更新maxX。对minYmaxY 执行相同操作。

一旦有了xy 的最大值和最小值,就可以轻松地将这些值转换为边界矩形。一些示例代码:

extension CGRect 
    init(minX: CGFloat,
         minY: CGFloat,
         maxX: CGFloat,
         maxY: CGFloat) 
        self.init()
       origin = CGPoint(x: minX, y: minY)
       size = CGSize(width: maxX - minX, height: maxY - minY)
   



let aMinX: CGFloat = CGFloat(Int.random(in: 0...50))
let aMinY: CGFloat = CGFloat(Int.random(in: 0...50))
let aMaxX: CGFloat = CGFloat(Int.random(in: 60...200))
let aMaxY: CGFloat = CGFloat(Int.random(in: 60...200))
let aRect: CGRect = CGRect(minX: aMinX,
                           minY: aMinY,
                           maxX: aMaxX,
                           maxY: aMaxY)
print(aRect)

【讨论】:

感谢您的回答,但有些地方不对劲。在 touchesmoved 事件中使用此代码,每次我跟踪相同的路径时都会得到很大的不同。我意识到使用鼠标我不会精确,但跟踪图像 5 次会得到明显不同的矩形大小。(15,43,56,76)(28,9,32,55)(41,42,125,134)(5 ,4,10,71)(38,48,128,73) 想法? 我在大约 5 分钟内完成了该代码。它未经测试,仅用作您的方法的指南。 (而且我没有提供检测超过最大值/最小值的触摸的代码。)您需要对其进行测试和调试。我建议让您的测试版本在它提供的边界框周围画一个半透明的矩形,这样您就可以看到它在做什么。 看起来我使用了错误的常量作为起始值。您应该改用greatestFiniteMagnitude-greatestFiniteMagnitude。我将编辑我的答案。 好的,我找到了我需要的东西,感谢您的帮助。我最终只使用了 path.bounds.size(width and height) 是的,使用路径的边界是我的第一个建议。

以上是关于我将如何从接触点获取最低和最高坐标数?的主要内容,如果未能解决你的问题,请参考以下文章

matlab 如何从wind中获取股票数据 收盘 开盘 最高 最低 交易量

matlab画图时如何获取指定点的坐标值?

NX二次开发-算法篇-随便找个不规则的体,找出面的中心点的Z坐标最高和最低的面,高亮显示

如何从距离、方位角和仰角获取 3D 坐标

如何从数据库中获取最近的位置条目?

从位置的文本提示中获取 GPS 坐标?