ios – Swift:有没有一种简单的方法来绘制形状并检测它们是否相交?

ios – Swift:有没有一种简单的方法来绘制形状并检测它们是否相交?,第1张

概述这个问题与以下内容完全相同:            >             Swift: detecting intersection from sprite kit SKShapeNode drawings                                    1个 有没有一种简单的方法可以在Swift中绘制形状(最好使用Sprite-Kit),然后检测它们是否相交以及它们相 这个问题与以下内容完全相同:> Swift: detecting intersection from sprite kit SKShapeNode drawings1个
有没有一种简单的方法可以在Swift中绘制形状(最好使用Sprite-Kit),然后检测它们是否相交以及它们相交的位置?就像这里是一个相交的形状:解决方法 如果这由一系列线段组成,可以使Martin R对 UIBezierPath intersect的回答不仅可以检测交叉点,还可以识别交叉点的位置:
func intersectionBetweenSegments(p0: CGPoint,_ p1: CGPoint,_ p2: CGPoint,_ p3: CGPoint) -> CGPoint? {    var denominator = (p3.y - p2.y) * (p1.x - p0.x) - (p3.x - p2.x) * (p1.y - p0.y)    var ua = (p3.x - p2.x) * (p0.y - p2.y) - (p3.y - p2.y) * (p0.x - p2.x)    var ub = (p1.x - p0.x) * (p0.y - p2.y) - (p1.y - p0.y) * (p0.x - p2.x)    if (denominator < 0) {        ua = -ua; ub = -ub; denominator = -denominator    }    if ua >= 0.0 && ua <= denominator && ub >= 0.0 && ub <= denominator && denominator != 0 {        return CGPoint(x: p0.x + ua / denominator * (p1.x - p0.x),y: p0.y + ua / denominator * (p1.y - p0.y))    }    return nil}

因此,如果您有一个CGPoint值数组并且想要识别所有交叉点,则可以执行以下 *** 作:

let n = points!.count - 1for i in 1 ..< n {    for j in 0 ..< i-1 {        if let intersection = intersectionBetweenSegments(points![i],points![i+1],points![j],points![j+1]) {            // do whatever you want with `intersection`        }    }}

例如,您可以在屏幕相交的屏幕上添加一个点:

但是,如果曲线由三次贝塞尔曲线组成,则更复杂.不过,您可以考虑一下Checking if two cubic Bézier curves intersect.

总结

以上是内存溢出为你收集整理的ios – Swift:有没有一种简单的方法来绘制形状并检测它们是否相交?全部内容,希望文章能够帮你解决ios – Swift:有没有一种简单的方法来绘制形状并检测它们是否相交?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1098830.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存