• 大小: 4KB
    文件类型: .c
    金币: 2
    下载: 1 次
    发布日期: 2021-06-28
  • 语言: C/C++
  • 标签: 空间分析  C语言  

资源简介

点是否在多边形内判断的C语言代码,有2维及3维两种情况的判断, 请注意:如果你决定使用其中某个函数,请将它拷出来,每个函数都能用,对应于不同的算法,请看说明,最后一个函数为三维情况。

资源截图

代码片段和文件信息

#define MIN(xy) (x < y ? x : y)
#define MAX(xy) (x > y ? x : y)
//The following C function returns INSIDE or OUTSIDE indicating the status of a point P with respect to a polygon with N points.

#define INSIDE 0
#define OUTSIDE 1

typedef struct {
   double xy;
} Point;

int InsidePolygon(Point *polygonint NPoint p)
{
  int counter = 0;
  int i;
  double xinters;
  Point p1p2;

  p1 = polygon[0];
  for (i=1;i<=N;i++) {
    p2 = polygon[i % N];
    if (p.y > MIN(p1.yp2.y)) {
      if (p.y <= MAX(p1.yp2.y)) {
        if (p.x <= MAX(p1.xp2.x)) {
          if (p1.y != p2.y) {
            xinters = (p.y-p1.y)*(p2.x-p1.x)/(p2.y-p1.y)+p1.x;
            if (p1.x == p2.x || p.x <= xinters)
              counter++;
          }
        }
      }
    }
    p1 = p2;
  }

  if (counter % 2 == 0)
    return(OUTSIDE);
  else
    return(INSIDE);
}


//The following code is by Randolph Franklin it returns 1 for interior points and 0 for exterior points.

int pnpoly(int npol float *xp float *yp float x float y)
    {
      int i j c = 0;
      for (i = 0 j = npol-1; i < npol; j = i++) {
        if ((((yp[i] <= y) && (y < yp[j])) ||
             ((yp[j] <= y) && (y < yp[i]))) &&
            (x < (xp[j] - xp[i]) * (y - yp[i]) / (yp[j] - yp[i]) + xp[i]))
          c = !c;
      }
      return c;
    }


//The inside/outside test might then be defined in C as 
typedef struct {
   int hv;
} Point;

int InsidePolygon(Point *polygonint nPoint p)
{
   int i;
   double angle=0;
   Point p1p2;

   for (i=0;i      p1.h = polygon[i].h - p.h;
      p1.v = polygon[i].v - p.v;
      p2.h = polygon[(i+1)%n].h - p.h;
      p2.v = polygon[(i+1)%n].v - p.v;
      angle += Angle2D(p1.hp1.vp2.hp2.v);
   }

   if (AB

评论

共有 条评论