PNPOLY - Point Inclusion in Polygon Test

Posted smartch

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PNPOLY - Point Inclusion in Polygon Test相关的知识,希望对你有一定的参考价值。

 

 

https://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html

 

 

The C Code

Here is the code, for reference. Excluding lines with only braces, there are only 7 lines of code.

int pnpoly(int nvert, float *vertx, float *verty, float testx, float testy)
{
  int i, j, c = 0;
  for (i = 0, j = nvert-1; i < nvert; j = i++) {
    if ( ((verty[i]>testy) != (verty[j]>testy)) &&
	 (testx < (vertx[j]-vertx[i]) * (testy-verty[i]) / (verty[j]-verty[i]) + vertx[i]) )
       c = !c;
  }
  return c;
}
ArgumentMeaning
nvert Number of vertices in the polygon. Whether to repeat the first vertex at the end is discussed below.
vertx, verty Arrays containing the x- and y-coordinates of the polygon‘s vertices.
testx, testy X- and y-coordinate of the test point.

The Method

I run a semi-infinite ray horizontally (increasing x, fixed y) out from the test point, and count how many edges it crosses. At each crossing, the ray switches between inside and outside. This is called the Jordan curve theorem.

The case of the ray going thru a vertex is handled correctly via a careful selection of inequalities. Don‘t mess with this code unless you‘re familiar with the idea ofSimulation of Simplicity. This pretends to shift the ray infinitesimally down so that it either clearly intersects, or clearly doesn‘t touch. Since this is merely a conceptual, infinitesimal, shift, it never creates an intersection that didn‘t exist before, and never destroys an intersection that clearly existed before.

The ray is tested against each edge thus:

  1. Is the point in the half-plane to the left of the extended edge? and
  2. Is the point‘s Y coordinate within the edge‘s Y-range?

Handling endpoints here is tricky.

以上是关于PNPOLY - Point Inclusion in Polygon Test的主要内容,如果未能解决你的问题,请参考以下文章

在 YAML 文件中设置 DEFAULT_VIEW_INCLUSION 不适用于 MapperFeature.DEFAULT_VIEW_INCLUSION

django——inclusion_tag

inclusion_tag 基本使用

Django之自定义标签,过滤器,以及inclusion_tag

inclusion_tag的运用

Django模板渲染之自定义inclusion_tag详细使用