2017-09-09 18 views
-1

私の問題は、点が同じ面にポリゴン(点の集合)に含まれているかどうかを知ることです。計画中の幾何学

簡単な例私の好きな言語DART

Point myPoint = new Point(10, 12); 

List<Point> myPolygon = [ // The Polygon, for example is simple rect 
    new Point(2, 7), 
    new Point(15,7), 
    new Point(15, 18), 
    new Point(2, 18) 
]; 

bool pointIsContainedInPolygon(List Polygon){ 
    // .. data processing ... 
} 

に私は機能が何であるかを知っておく必要があります。pointIsContainedInPolygon(myPolygon)

+1

宿題ですか? – batMan

+0

いいえ、その宿題はもちろんありません。幾何学的に良くないです。 – Chr

+0

"多角形を指す"ための多くのWebリソースがあります。あなたはそれを探しましたか?これらのウェブページには何かが欠けていますか?ダーツであなたに与えられたルーチンが本当に必要ですか?それを別の言語から移植できませんか? –

答えて

2

が、私はダーツでHow can I determine whether a 2D Point is within a Polygon?ポスト内のコードデータを再開した、ここでの結果は(ありますここでテストした)

bool pnpoly(Point point, List<Point> polygon){ 
    // Step 1: Cut and detail 

    int nvert = polygon.length; 
    List<int> vertx = []; 
    List<int> verty = []; 

    for(Point vert in polygon){ // Listing x and y pos of all vertices 
     vertx.add(vert.x); 
     verty.add(vert.y); 
    } 

    // Step 2: Calcul.. 
    bool c = false; 
    int j = nvert-1; 
    for (int i = 0; i < nvert; j = i++){  
     if(((verty[i]>point.y) != (verty[j]>point.y)) && (point.x < (vertx[j]-vertx[i]) * (point.y-verty[i])/(verty[j]-verty[i]) + vertx[i])){ 
      c = !c; 
     } 
    } 
    return c; 
} 

私のテスト

です210
List<Point> myPolygon = [ // classic rectangle 
    new Point(2,2), 
    new Point(52,2), 
    new Point(52,41), 
    new Point(2,41) 
]; 

Point myPoint = new Point(53,40); 

print(pnpoly(myPoint, myPolygon)); // false 
+0

ダーツチームから成熟したこのライブラリについてのヒント。 Web glに使用される追加機能も含まれています。 https://pub.dartlang.org/packages/vector_math –

関連する問題