8
私は、衝突が(x、y)であるかどうかをチェックしたいと思います。 パスが別のパスと交差しているかどうかを確認する方法も非常に面白いでしょう。ここ は、より良い、私が何を意味するかを説明するためのスクリーンショットです:android.graphics.pathそれ自身との交差を確認してください。
http://i.stack.imgur.com/JrEmN.png
私は、衝突が(x、y)であるかどうかをチェックしたいと思います。 パスが別のパスと交差しているかどうかを確認する方法も非常に面白いでしょう。ここ は、より良い、私が何を意味するかを説明するためのスクリーンショットです:android.graphics.pathそれ自身との交差を確認してください。
http://i.stack.imgur.com/JrEmN.png
最も簡単な方法は、任意の線分が他の線分と交差するかどうかを確認することです。線分は、パス内の隣接する点のペアで構成されます。 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?を参照してください。