检查android.graphics.path与自身的交集

时间:2011-09-06 11:55:07

标签: android graphics path intersection

我想检查是否(并且如果是,如果碰撞是(x,y) - 仅用于突出显示)路径确实相交。 如何检查路径是否与另一条路径相交也是非常有趣的。 这是一个截图,以更好地解释我的意思:

http://i.stack.imgur.com/JrEmN.png

1 个答案:

答案 0 :(得分:-1)

最简单的方法是检查是否有任何线段与任何其他线段相交。线段由路径中的相邻点对组成。具有10个点的路径具有9个线段。

以下是一个人如何做到这一点的例子。

import android.graphics.Point;
import java.util.List;

static Boolean isPathComplex(List<Point> path) {

    if (path == null || path.size() <= 2) {
        return false;
    }

    int len = path.size();  

   for (int i = 1; i < len; i++) {
        Point lineAStart = path.get(i - 1);
        Point lineAEnd = path.get(i);

        for (int j = i + 1; j < len; j++) {
            Point lineBStart = path.get(j - 1);
            Point lineBEnd = path.get(j);
            if (lineSegmentsIntersect(lineAStart, lineAEnd, lineBStart, lineBEnd)) {
                return true;
            }

        } // inner loop

   } // outer loop

}

static Boolean lineSegmentsIntersect(Point aInitial, Point aFinal, Point bInitial, Point bFinal) {
    // left as an exercise to the reader
}

有关如何实现lineSegmentsIntersect函数的示例,请参阅How do you detect where two line segments intersect?