判断一个坐标点是否在封闭曲线内的方法(swift)
1 //用playground运行即可 2 import UIKit 3 4 var str = "Hello, playground" 5 6 let lTestPointsOne : [(Double, Double)] = [(0,0)] 7 let lTestPoints : [(Double, Double)] = [(0,0),(0,1),(1,1)] 8 let lPoints : [(Double, Double)] = [(0,0),(0,1),(1,2),(2,1),(3,2),(3,0)] 9 10 func judgeIf(point:(Double,Double), isIn pointArr:[(Double, Double)])->Bool{ 11 if 0 == pointArr.count { 12 return false 13 } 14 let lPath = UIBezierPath.init() 15 let l1stPoint = pointArr.first 16 lPath.move(to: CGPoint.init(x: l1stPoint!.0, y: l1stPoint!.1)) 17 18 for i in 1..<pointArr.count { 19 let lP = pointArr[i] 20 lPath.addLine(to: CGPoint.init(x: lP.0, y: lP.1)) 21 } 22 23 lPath.close() 24 return lPath.contains(CGPoint.init(x: point.0, y: point.1)) 25 } 26 27 print(lPoints) 28 judgeIf(point: (0,0), isIn: lPoints) 29 judgeIf(point: (1,0), isIn: lPoints) 30 judgeIf(point: (3,-1), isIn: lPoints) 31 judgeIf(point: (0.5,2), isIn: lPoints) 32 judgeIf(point: (1,1), isIn: lPoints) 33 judgeIf(point: (2,1), isIn: lPoints) 34 judgeIf(point: (2,0.5), isIn: lPoints) 35 judgeIf(point: (2,1.5), isIn: lPoints) 36 judgeIf(point: (3,1), isIn: lPoints) 37 judgeIf(point: (3.3,8.1), isIn: lPoints) 38 39 judgeIf(point: (0,0), isIn: lTestPoints) 40 judgeIf(point: (0,1), isIn: lTestPoints) 41 judgeIf(point: (0.5,0.5), isIn: lTestPoints) 42 judgeIf(point: (0.5,0.7), isIn: lTestPoints) 43 judgeIf(point: (0.5,0.1), isIn: lTestPoints) 44 judgeIf(point: (0,8), isIn: lTestPoints) 45 judgeIf(point: (1,0), isIn: lTestPoints) 46 47 judgeIf(point: (1,0), isIn: lTestPointsOne) 48 judgeIf(point: (0,0), isIn: lTestPointsOne)
学无止境,快乐编码。
没有一种不经过蔑视、忍受和奋斗就可以征服的命运。