Swift: detecting intersection from sprite kit SKShapeNode drawings

前端 未结 1 1709
被撕碎了的回忆
被撕碎了的回忆 2021-01-03 02:37

I\'m drawing with Sprite Kit. I would like to detect when user\'s drawings are intersecting.
\"enter

相关标签:
1条回答
  • 2021-01-03 02:48

    Here is a function for segments intersection in swift.

    func linesIntersect(line1 : CGPointInterval, line2 : CGPointInterval) -> (intersects: Bool, point : CGPoint?)
        {
            //The algorithm is taken from http://www.amazon.com/dp/0672323699/?tag=stackoverfl08-20
            // http://portal.aauj.edu/portal_resources/downloads/programming/windows_game_programming_guru.pdf
    
            let p0_x = line1.start.x
            let p1_x = line1.end.x
            let p2_x = line2.start.x
            let p3_x = line2.end.x
    
            let p0_y = line1.start.y
            let p1_y = line1.end.y
            let p2_y = line2.start.y
            let p3_y = line2.end.y
    
            let s1_x = p1_x - p0_x
            let s1_y = p1_y - p0_y
            let s2_x = p3_x - p2_x
            let s2_y = p3_y - p2_y
    
            let s = (-s1_y * (p0_x - p2_x) + s1_x * (p0_y - p2_y)) / (-s2_x * s1_y + s1_x * s2_y)
            let t = ( s2_x * (p0_y - p2_y) - s2_y * (p0_x - p2_x)) / (-s2_x * s1_y + s1_x * s2_y)
    
            if (s >= 0 && s <= 1 && t >= 0 && t <= 1)
            {
                // Collision detected
                let finalX = p0_x + (t * s1_x)
                let finalY = p0_y + (t * s1_y)
                return (true, CGPointMake(finalX, finalY))
            }
    
            return (false, nil) // No collision
        }
    
    0 讨论(0)
提交回复
热议问题