C#多边形中的点是检测的麻烦吗?
我有一个具有以下点的多边形: 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) 使用此流行算法: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
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; }