Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#多边形中的点是检测的麻烦吗?_C#_Geometry - Fatal编程技术网

C#多边形中的点是检测的麻烦吗?

C#多边形中的点是检测的麻烦吗?,c#,geometry,C#,Geometry,我有一个具有以下点的多边形: A=(-8598.077513.37) B=(-8598.075169.17) C=(-8496.475271.77) D=(-4735.475271.77) E=(-4736.477411.77) F=(-8497.477411.77) G=(-4838.077310.17) H=(-4838.075372.37) 所以我的多边形有8段 我在多边形内有点“I” (-66166802.6537) 使用此流行算法: public bool IsPointInPoly

我有一个具有以下点的多边形:

A=(-8598.077513.37)

B=(-8598.075169.17)

C=(-8496.475271.77)

D=(-4735.475271.77)

E=(-4736.477411.77)

F=(-8497.477411.77)

G=(-4838.077310.17)

H=(-4838.075372.37)

所以我的多边形有8段

我在多边形内有点“I”

(-66166802.6537)

使用此流行算法:

public bool IsPointInPolygon(Point2D[] polygon, Point2D testPoint)
        {
               var result = false;
            var j = polygon.Count() - 1;
            for (var i = 0; i < polygon.Count(); i++)
            {
                if (polygon[i].Y < testPoint.Y && polygon[j].Y >= testPoint.Y || polygon[j].Y < testPoint.Y && polygon[i].Y >= testPoint.Y)
                {
                    if (polygon[i].X + (testPoint.Y - polygon[i].Y) / (polygon[j].Y - polygon[i].Y) * (polygon[j].X - polygon[i].X) < testPoint.X)
                    {
                        result = !result;
                    }
                }
                j = i;
            }
            return result;
        }
已知的工作C代码是:

bool pointInPolygon() {

  int   i, j=polyCorners-1 ;
  bool  oddNodes=NO      ;

  for (i=0; i<polyCorners; i++) {
    if ((polyY[i]< y && polyY[j]>=y
    ||   polyY[j]< y && polyY[i]>=y)
    &&  (polyX[i]<=x || polyX[j]<=x)) {
      oddNodes^=(polyX[i]+(y-polyY[i])/(polyY[j]-polyY[i])*(polyX[j]-polyX[i])<x); }
    j=i; }

  return oddNodes; }
bool pointInPolygon(){
int i,j=多角蛋白-1;
bool=NO;
对于(i=0;i=y)
||poly[j]=y)

&&(polyX[i]以这种方式订购:

(-8598.077513.37,--8598.075169.17)

(-8598.075169.17,--8496.475271.77)

(-8496.475271.77,--4735.475271.77)

(-4735.475271.77,--4838.075372.37)

(-4838.075372.37,--4838.077310.17)

(-4838.077310.17,--4736.477411.77)

(-4736.477411.77,--8497.477411.77)

(-8497.477411.77,--8598.077513.37)


您只需“关闭”多边形。

流行算法是从哪里来的?乍一看,“不正确的算法”似乎更好name@Sinatr添加到问题列表中,带有points@Sinatr我认为问题不在那个算法中,可能是点顺序,或者这个算法不适用于那个类型的多边形(如果是,这会很奇怪)嗯……你的分数顺序错了。显然,顺序需要连续。我不理解你发布的“我的分数列表”部分。每行有2分,每行的第2分与下一行的第1分不匹配,那么这到底代表了什么?
bool pointInPolygon() {

  int   i, j=polyCorners-1 ;
  bool  oddNodes=NO      ;

  for (i=0; i<polyCorners; i++) {
    if ((polyY[i]< y && polyY[j]>=y
    ||   polyY[j]< y && polyY[i]>=y)
    &&  (polyX[i]<=x || polyX[j]<=x)) {
      oddNodes^=(polyX[i]+(y-polyY[i])/(polyY[j]-polyY[i])*(polyX[j]-polyX[i])<x); }
    j=i; }

  return oddNodes; }