Пересечение двух путей или пути и точки никогда не возвращает истину - PullRequest
0 голосов
/ 06 декабря 2018

Я встречал это и это вопросы, все о пересечениях обнаружения в Android.Ну, мне не удалось заставить их работать с окончательным кодом, поэтому я сделал пример, где 2 линии определенно пересекаются.Даже не везет в этом случае.Я сделал пример кода с двумя прямыми путями, областями, которые соответствуют им, и точкой, которая определенно пересекает это.Совершенно не повезло.

var theyCross = false
val intersectionPath = Path()

val clipArea = Region(0, 0, 100, 100)
val path1 = Path()
path1.moveTo(50f, 0f)
path1.lineTo(50f, 100f)

val path2 = Path()
path2.moveTo(0f, 50f)
path2.lineTo(100f, 50f)

val newRegion1 = Region()
newRegion1.setPath(path1, clipArea)

val newRegion2 = Region()
newRegion2.setPath(path2, clipArea)

if(
    !newRegion1.quickReject(newRegion2) && 
    newRegion1.op(newRegion2, Region.Op.INTERSECT)
) {
    // lines should cross!
    theyCross = true
}

if (intersectionPath.op(path1, path2, Path.Op.INTERSECT)) {
    if (!intersectionPath.isEmpty) {
        // lines should cross!
        theyCross = true
    }
}

if (newRegion1.contains(50, 50)) {
    // lines should cross!
    theyCross = true
}

if (newRegion1.quickContains(49, 49, 51, 51)) {
    // lines should cross!
    theyCross = true
}

В этом примере я не использую Canvas, но в моем исходном коде я использую, и каждый путь состоит из Paint с strokeWidth.Неудачно.Кто-нибудь из вас сталкивался с этим раньше?

1 Ответ

0 голосов
/ 06 декабря 2018

Это работает, только если пути являются поверхностями, а не линиями, например:

val clipArea = Region(0, 0, 100, 100)
val path1 = Path()
path1.moveTo(50f, 0f)
path1.lineTo(50f, 100f)
path1.lineTo(51f, 100f)
path1.lineTo(51f, 0f)
path1.close()

val path2 = Path()
path2.moveTo(0f, 50f)
path2.lineTo(100f, 50f)
path2.lineTo(100f, 51f)
path2.lineTo(0f, 51f)
path2.close()

Кстати, возвращаемое (* игнорируемое) значение newRegion1.setPath(path1, clipArea) теперь истинно (не пусто) вместо ложно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...