2014-01-07 160 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