计划中的几何(数学)

Geometry in Plan (Math)

我的问题是要知道一个点是否包含在同一表面上的多边形(点集)中。

用我最喜欢的语言 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)

我在dart中恢复了How can I determine whether a 2D Point is within a Polygon?post中的代码数据,这是结果(测试)

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;
}

这是我的测试

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