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?。