2017-09-09 4 views
-1

Mon problème est de savoir si un point est contenu ou non dans un polygone (ensembles de points) sur la même surface.Géométrie en plan (Math)

Exemple simple dans ma langue 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 ... 
} 

préféré que je dois savoir ce qui est la fonction: pointIsContainedInPolygon(myPolygon)

+1

Est-ce un devoir? – batMan

+0

Non, ce n'est pas du devoirs bien sûr, je ne suis pas bon en géométrie – Chr

+0

Il y a beaucoup de ressources web pour "point en polygone". Avez-vous fait une recherche pour cela? Y a-t-il quelque chose qui manque à toutes ces pages Web? Avez-vous vraiment besoin d'une routine dans Dart qui vous est donnée - ne pouvez-vous la porter d'une autre langue? –

Répondre

2

J'ai repris les données de code dans le poste How can I determine whether a 2D Point is within a Polygon? en flèche, est le résultat ici (testé)

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

Voici mon test

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

Juste un conseil à propos de cette lib, de l'équipe de fléchettes et mature. Contient également des fonctionnalités supplémentaires utilisées pour le web gl. https://pub.dartlang.org/packages/vector_math –