多边形内的测试点

时间:2013-04-10 14:35:44

标签: java android polygon

我正在尝试测试一个点是否是多边形o并且查看SO。我发现了一些代码,但是我试过了,我不知道我做错了什么......

我使用向量来保存x和y点:

Vector<Double> vxpoints;
Vector<Double> vxpoints;

这就是我的方法“包含”

public boolean contains(double x, double y) {       
    int i,j = this.npoints - 1;  
    boolean oddNodes = false;  

    for(i=0;i<this.npoints;j=i++) {
        if ((((this.vypoints.get(i) <= y) && (y < this.vypoints.get(j))) ||
                ((this.vypoints.get(j) <= y) && (y < this.vypoints.get(i)))) &&
                (x < (this.vxpoints.get(j) - this.vxpoints.get(i)) * (y - this.vypoints.get(i)) / (this.vypoints.get(j) - this.vypoints.get(i)) + this.vxpoints.get(i)))
            oddNodes = !oddNodes;
    }   
    return oddNodes;

当我测试它时,我使用“easy polygons”:  (对于数组os点,我在我的类中的向量中转换)

    double xpoints[] = {100,100,200,200}; //Square      
    double ypoints[] = {100,200,100,200};
    PolygonDouble test = new PolygonDouble(xpoints, ypoints);

    //System.out.println(test.getNumberOfCoordinates());
    if(test.contains(110,110))
        System.out.println("Inside");
    else
        System.out.println("Outside");

输出: - &gt;外 但如果我尝试点(110,111)输出 - &gt;内部。

我不知道发生了什么.....:S

1 个答案:

答案 0 :(得分:3)

问题在于测试中使用的方块的定义。顶点是错误的顺序。改变第三和第四个顶点的顺序,测试应该有效。

double xpoints[] = {100,100,200,200}; //Square      
double ypoints[] = {100,200,200,100};