大佬教程收集整理的这篇文章主要介绍了ios – Swift:有没有一种简单的方法来绘制形状并检测它们是否相交?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
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 - 1 for 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:有没有一种简单的方法来绘制形状并检测它们是否相交?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。