如何在iPhone SDK中findclosurespath(两行交集)?

请看图片。 我怎样才能得到两个交点(即绿色圆点)? 我想裁剪图像的内部。 closures的path是任何地方在线。

context = UIGraphicsGetCurrentContext(); CGContextBeginPath(context); CGContextSetLineWidth(context, 1.0 * self.scale); CGContextSetLineCap(context, kCGLineCapRound); [[UIColor redColor] setStroke]; CGPoint firstPoint = CGPointFromString([self.touchPoints objectAtIndex:0]); CGContextMoveToPoint(context, firstPoint.x, firstPoint.y); for (NSString *pointString in self.touchPoints) { CGPoint point = CGPointFromString(pointString); CGContextAddLineToPoint(context, point.x, point.y); } CGContextStrokePath(context); 

这个代码用于绘制线条。 线条工作正常,裁剪也工作正常…但交叉点是我的主要问题。 请帮帮我。

在这里输入图像说明

想法,检查以firstline <> lastline,firstline <> secondlastline … firstline <> thirdline => secondline <> lastline开头的交集。这应该给你最外面的交集。

下面的代码没有经过testing,但应该帮助你解决你的问题。

 typedef struct { CGPoint startPoint; CGPoint endPoint; } Line; #define CGPointNULL CGPointMake(NAN, NAN) #define Line(_i_) {CGPointFromString(touchPoints[_i_-1]), CGPointFromString(touchPoints[_i_])}; CGPoint LineIntersects(Line *first, Line *second) { int x1 = first->startPoint.x; int y1 = first->startPoint.y; int x2 = first->endPoint.x; int y2 = first->endPoint.y; int x3 = second->startPoint.x; int y3 = second->startPoint.y; int x4 = second->endPoint.x; int y4 = second->endPoint.y; int d = (x1-x2)*(y3-y4) - (y1-y2)*(x3-x4); if (d == 0) return CGPointNULL; int xi = ((x3-x4)*(x1*y2-y1*x2)-(x1-x2)*(x3*y4-y3*x4))/d; int yi = ((y3-y4)*(x1*y2-y1*x2)-(y1-y2)*(x3*y4-y3*x4))/d; return CGPointMake(xi,yi); } static inline BOOL CGPointIsValid(CGPoint p) { return (px != NAN && py != NAN); } - (CGPoint)mostOuterIntersection:(NSArray *)touchPoints { CGPoint intersection = CGPointNULL; int touchCount = [touchPoints count]; for(int i = 1; i<touchCount; i++) { Line first = Line(i); for(int j = touchCount-1; j>i+1; j--) { Line last = Line(j); intersection = LineIntersects(&first, &last); if(CGPointIsValid(intersection)) { break; } } } return intersection; }