Prüfen Sie, ob sich ein Punkt innerhalb eines einfachen Polygons befindet
Ich versuche festzustellen, ob sich ein Punkt innerhalb eines Polygons befindet oder nicht. Ich benutze den folgenden (für Swift modifizierten) Algorithmus vonDiese Internetseit:
func contains(polygon: [Point], test: Point) -> Bool {
let count = polygon.count
var i: Int, j: Int
var contains = false
for (i = 0, j = count - 1; i < count; j = i++) {
if ( ((polygon[i].y >= test.y) != (polygon[j].y >= test.y)) &&
(test.x <= (polygon[j].x - polygon[i].x) * (test.y - polygon[i].y) /
(polygon[j].y - polygon[i].y) + polygon[i].x) ) {
contains = !contains;
}
}
return contains;
}
Wenn Sie jedoch ein einfaches Polygon mit den folgenden Koordinaten haben:(x: 0, y: 40), (x: 0, y: 0), (x: 20, y: 0), (x: 20, y: 20), (x: 40, y: 20), (x: 40, y: 40)
, und überprüfen Sie den Punkt(x: 30, y: 20)
das Ergebnis ist wahr, da die if-Anweisung zu @ ausgewertet witrue
wanni
undj
sind 5 und 4 (x: 40, y: 40)
und(x: 40, y: 20)
), obwohl der Punkt nur am Rand des Polygons liegt. Die Funktion sollte eigentlich nur @ auswerttrue
wenn der Punkt wirklich liegti das Polygon. Vielen Dank für Hilfe oder Verbesserungen / Anpassungen des Algorithmus!