2013-05-03 51 views
1

我有一个路径作为点存储在数组列表中,我想检查线段是否相交。由于某些未知的原因,它不起作用!尽管我正在绘制相交的形状,但我在LogCat中没有收到任何消息。如果有人能够看到我做错了什么,或者对如何改进代码有所建议,请详细说明。线段之间的交点问题

// Intersection control 
    if(touchActionUp) { 

     // Loop throw all points except the last 3 
     for (int i = 0; i < points.size()-3; i++) { 
      Line line1 = new Line(points.get(i), points.get(i+1)); 

      // Begin after the line above and check all points after that 
      for (int j = i + 2; j < points.size()-1; j++) { 
       Line line2 = new Line(points.get(j), points.get(j+1)); 

       // Call method to check intersection 
       if(checkIntersection(line1, line2)) { 
        Log.i("Intersection", "Yes!"); 
       } 
      } 
     } 
    } 

并且所述方法:

// Method to check for intersection between lines 
private boolean interceptionControl(Line line1, Line line2) { 
    int x1 = line1.pointX1; 
    int x2 = line1.pointX2; 
    int x3 = line2.pointX1; 
    int x4 = line2.pointX2; 

    int y1 = line1.pointY1; 
    int y2 = line1.pointY2; 
    int y3 = line2.pointY1; 
    int y4 = line2.pointY2; 

    // Check if lines are parallel 

    int denom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1); 

    if(denom == 0) { // Lines are parallel 
     // ?? 
    } 

    double a = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3))/denom; 
    double b = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3))/denom; 

    // Check for intersection 
    if(a >= 0.0f && a <= 1.0f && b >= 0.0f && b <= 1.0f) { 
     return true; 
    } 
    return false; 
} 
+0

“它不工作”在哪种方式?错误?没有检测到交点? – sashkello 2013-05-03 15:13:56

+0

它没有检测到路口 – 2013-05-03 15:14:29

+0

是否测试=== denom?我没有看到“测试”声明 – 2013-05-03 15:16:53

回答

0

您正在使用int为坐标和它确实是这样的整数除法(即3/2 = 1)。这可能是你除以denom的原因。您可以通过除以((double)denom)而不是简单地将其修复为denom

+0

谢谢,但它仍然不工作!我测试过((双)denom)。任何其他建议? – 2013-05-03 15:24:34

+0

Mate,代码对我来说工作得非常好,你考虑哪些点? – sashkello 2013-05-04 08:46:50