Here is the segment intersection function 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 }
source share