Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 是否有一个函数可以检测直线是否与矩形相接触_Ios_Swift_Core Graphics_Cgrect - Fatal编程技术网

Ios 是否有一个函数可以检测直线是否与矩形相接触

Ios 是否有一个函数可以检测直线是否与矩形相接触,ios,swift,core-graphics,cgrect,Ios,Swift,Core Graphics,Cgrect,我们可以检测一个点是否在一个矩形中 CGRectContainsPoint 有没有一种简单的方法来检测一条线是否接触到一个矩形?罗布: 如果结果是空数组,则不存在交点。Wow!非常感谢你的帮助。 extension CGPoint { static func intersectionBetweenSegments(p0: CGPoint, _ p1: CGPoint, _ p2: CGPoint, _ p3: CGPoint) -> CGPoint? { var

我们可以检测一个点是否在一个矩形中 CGRectContainsPoint

有没有一种简单的方法来检测一条线是否接触到一个矩形?

罗布:


如果结果是空数组,则不存在交点。

Wow!非常感谢你的帮助。
extension CGPoint {

    static 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
    }

}
extension CGRect {

    func intersectionsWithLine(p0:CGPoint, _ p1: CGPoint) -> [CGPoint] {

        let a = (self.origin,CGPoint(x: self.width, y: self.origin.y))
        let b = (a.1,CGPoint(x: a.1.x, y: self.height))
        let c = (b.1,CGPoint(x: a.0.x, y: b.1.y))
        let d = (c.1,a.0)

        let lines = [a,b,c,d]

        var intersections : [CGPoint] = []

        for line in lines {
            if let point = CGPoint.intersectionBetweenSegments(p0, p1, line.0, line.1) {
                intersections.append(point)
            }
        }

        return intersections
    }
}