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!

Antworten auf die Frage(10)

Ihre Antwort auf die Frage