Swift: intersection detection from a set of sprites SKShapeNode drawings

I draw with a sprite kit. I would like to discover when user drawings intersect.
enter image description here

I tried to execute the following code, but it does not work. It seems that the sprite kit doesn't save all the points:

override func touchesMoved(touches: NSSet, withEvent event: UIEvent) { /* Called when a touch begins */ touch = touches.anyObject() as UITouch! for drawingPoint in drawingPoints{ if(touch.locationInNode(self) == drawingPoint){println(true)} } drawingPoints.append(touch.locationInNode(self)) } 
+5
source share
1 answer

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 } 
0
source

Source: https://habr.com/ru/post/1206741/


All Articles