确定CGpath / CGcontext是否与CGpoint相交?

时间:2014-02-24 18:52:31

标签: iphone objective-c xcode cgcontext cgpath

我已经搜索了一段时间,我似乎没有找到一个好的答案。我只找到了一个关于路径交集的模板,但它有点太复杂而且不是我正在寻找的,因为我只需要一个返回BOOL的函数是YES或NO。

//This is my code so far. Its getting called every time the touch is moved.
 UIGraphicsBeginImageContext(CGSizeMake(320, 568));
    [drawImage.image drawInRect:CGRectMake(0, 0, 320, 568)];
    CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
    CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 8.0);
    CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 0, 1, 0, 1);
    CGContextBeginPath(UIGraphicsGetCurrentContext());
    CGContextMoveToPoint(UIGraphicsGetCurrentContext(), greentmporary.x, greentmporary.y);
    CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), greenpoint1.x, greenpoint1.y);
    CGContextStrokePath(UIGraphicsGetCurrentContext());


    [drawImage setFrame:CGRectMake(0, 0, 320, 568)];
    drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    [self.view addSubview:drawImage];

1 个答案:

答案 0 :(得分:0)

如果你看到哪些片段相交或不相交。

您可以通过检查值是否属于间隔来解决此问题。

您的细分(线)相交,当且仅当 x间隔重叠,y间隔相互重叠。

线A - x从x1A到x2A - y从y1A到y2A 线B-x从x1B到x2B-y从y1B到y2B

表示点为(x1A,y1A)(x2A,y2A) 表示点是(x1B,y1B)(x2B,y2B)

如果

,它们相交

(x1B≤x1A≤x2B或x1B≤x2A≤x2B)

AND

(y1B≤y1A≤y2B或y1B≤y2A≤y2B)

如果您查找由一组段构成的路径的交集,您可以简单地遍历路径A的所有段并检查是否存在与B的一个段的交集。时间复杂度将是二次的并且然后无法扩展到大路径。

但是在第一次蛮力逼近之后,您可以尝试减少问题,例如,仅对与2个路径边界框的交叉点相交的线段进行搜索(在其中至少有一个点的平均值)。查找边界框相当于搜索点的x和y的最小值和最大值。