> 文档中心 > 多边形围点

多边形围点


多边形围点

方法

 @JvmStaticfun contains(loc: Location, locs: List): Boolean { val count = locs.size if (count <= 2) {     return false } var nCross = 0 for (i in 0 until count) {     val p1 = locs[i]     val p2 = locs[(i + 1) % count]     if (p1.latitude == p2.latitude) // p1p2 与 y=p0.y平行  continue     if (loc.latitude = Math.max(p1.latitude, p2.latitude)) // 交点在p1p2延长线上  continue     val x =  (loc.latitude - p1.latitude) * (p2.longitude - p1.longitude) / (p2.latitude - p1.latitude) + p1.longitude     if (x > loc.longitude) nCross++ } return nCross % 2 == 1    }

参考:https://blog.csdn.net/wangwangbinbin/article/details/6637159

方法二

  @JvmStatic    fun contains(loc: Location, locs: List): Boolean { val count = locs.size if (count <= 2) {     return false } var hits = 0 var lastX = locs[count - 1].longitude var lastY = locs[count - 1].latitude var curX: Double var curY: Double var leftX: Double var test1: Double var test2: Double var i = 0 while (i < count) {     curX = locs[i].longitude     curY = locs[i].latitude     if (curY == lastY) {  lastX = curX  lastY = curY  i++  continue     }     if (curX = lastX) {      lastX = curX      lastY = curY      i++      continue  }  leftX = curX     } else {  if (loc.longitude >= curX) {      lastX = curX      lastY = curY      i++      continue  }  leftX = lastX     }     if (curY < lastY) {  if (loc.latitude = lastY) {      lastX = curX      lastY = curY      i++      continue  }  if (loc.longitude < leftX) {      hits++      lastX = curX      lastY = curY      i++      continue  }  test1 = loc.longitude - curX  test2 = loc.latitude - curY     } else {  if (loc.latitude = curY) {      lastX = curX      lastY = curY      i++      continue  }  if (loc.longitude < leftX) {      hits++      lastX = curX      lastY = curY      i++      continue  }  test1 = loc.longitude - lastX  test2 = loc.latitude - lastY     }     if (test1 < test2 / (lastY - curY) * (lastX - curX)) {  hits++     }     lastX = curX     lastY = curY     i++ } return hits and 1 != 0    }

注:参考java/awt/Polygon.java