2014-01-07 132 views
1

我通过给出11个点来绘制曲线和线。是否可以检测两条线(或)两条曲线(或)一条线和一条曲线的交点。如何找到曲线和线的交点?

绘图线使用

CGMutablePathRef path = CGPathCreateMutable(); 

for (int i = 0; i < [_points count]; i++) 
{ 
    CGPoint pt = [[_points objectAtIndex:i] CGPointValue]; 
    if (i == 0) 
    { 
     CGPathMoveToPoint(path, NULL, pt.x+1, pt.y+1); 
    } 
    else 
    { 
     CGPathAddLineToPoint(path, NULL, pt.x+1, pt.y+1); 
    } 
} 

CGContextSetLineWidth(context, 1.0f); 
CGContextSetStrokeColorWithColor(context, curveColor.CGColor); 
CGContextAddPath(context, path); 
CGContextStrokePath(context); 
CGPathRelease(path); 

曲线绘制

CGMutablePathRef path = CGPathCreateMutable(); 

for (int i = 0; i < [_points count]; i++) 
{ 
    CGPoint pt = [[_points objectAtIndex:i] CGPointValue]; 

    NSLog(@"%@",NSStringFromCGPoint(pt)); 

    if (i == 0) 
    { 
     CGPathMoveToPoint(path, NULL, pt.x, pt.y); 
    } 
    else 
    { 
     CGPoint curP = [[_points objectAtIndex:i-1] CGPointValue]; 
     float delta = 1.0f; 
     for (float pointX = curP.x; fabs(pointX - pt.x) > 1e-5f; pointX += delta) 
     { 
      float pointY = func(i-1, pointX); 
      CGPathAddLineToPoint(path, NULL, pointX, pointY); 
     } 
    } 
CGContextSetLineWidth(context, 1.0f); 
CGContextSetStrokeColorWithColor(context, curveColor.CGColor); 
CGContextAddPath(context, path); 
CGContextStrokePath(context); 
CGPathRelease(path); 

通过使用这些代码如何找到交叉点。

+0

我想你知道数学,你将不得不做它在客观的C你自己没有什么大不了的功能吧 – amar

回答

3
  • 要找到两条线的交点,请参见this answer
  • 为了使直线和曲线相交 - 您的曲线只是一组直线,所以如果直线与直线中的任何一条直线相交,直线就与该直线相交。
  • 交叉曲线和曲线 - 检查一条曲线中的每条线与另一条曲线中的每条线。

还有各种方法可以优化,如首先碰撞曲线或线的边界矩形。

+0

你的第一个点链接给出真/假的条件。因为我有很多方法。但事情是,我想要的交点。第二和第三的 – Surfer

+0

我不知道该怎么做。那是我在这里发布的问题。谢谢 – Surfer

+2

@ Hack_123:好的,我做了一些更多的搜索,并找到了一个客观的答案来给你交集点。链接已更新。对于2和3,你使用for循环。从字面上看,假设你有第A行,第B,第C,第D和第E行的曲线。你在X和A之间应用#1的算法。如果这是一个命中,那就是你的答案。如果不是这样,你将它应用到X和B.如果这是一个命中,那就是你的答案。如果没有,请尝试C等。如果没有匹配,那么就没有交集。 – Claudiu