1

ポイントがポリゴン内にあるかどうかをテストしようとしていて、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;

そして、それをテストするときは、「簡単なポリゴン」を使用します:(クラス内のベクトルに変換する配列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");

出力: --> 外側ですが、ポイント (110,111) で試してみると、出力 --> 内側。

何が起こっているのかわかりません..... :S

4

1 に答える 1

3

問題は、テストで使用される正方形の定義にあります。頂点の順序が間違っています。3 番目と 4 番目の頂点の順序を変更すると、テストが機能するはずです。

double xpoints[] = {100,100,200,200}; //Square      
double ypoints[] = {100,200,200,100};
于 2013-04-10T14:39:48.840 に答える