Esempio n. 1
0
 void object::test<2>()
 {
     if( GDALHasTriangulation() )
     {
         double adfX[] = { 0, 1, 2, 3 };
         double adfY[] = { 0, 1, 2, 3 };
         CPLPushErrorHandler(CPLQuietErrorHandler);
         psDT = GDALTriangulationCreateDelaunay(4, adfX, adfY);
         CPLPopErrorHandler();
         ensure(psDT == nullptr);
     }
 }
Esempio n. 2
0
 void object::test<1>()
 {
     if( GDALHasTriangulation() )
     {
         double adfX[] = { 0, -5, -5, 5, 5 };
         double adfY[] = { 0, -5, 5, -5, 5 };
         CPLPushErrorHandler(CPLQuietErrorHandler);
         psDT = GDALTriangulationCreateDelaunay(2, adfX, adfY);
         CPLPopErrorHandler();
         ensure(psDT == NULL);
     }
 }
Esempio n. 3
0
    void object::test<3>()
    {
        if( GDALHasTriangulation() )
        {
            {
                double adfX[] = { 0, -5, -5, 5, 5 };
                double adfY[] = { 0, -5, 5, -5, 5 };
                int i, j;
                psDT = GDALTriangulationCreateDelaunay(5, adfX, adfY);
                ensure(psDT != nullptr);
                ensure_equals(psDT->nFacets, 4);
                for(i=0;i<psDT->nFacets;i++)
                {
                    for(j=0;j<3;j++)
                    {
                        ensure(psDT->pasFacets[i].anVertexIdx[j] >= 0);
                        ensure(psDT->pasFacets[i].anVertexIdx[j] <= 4);
                        ensure(psDT->pasFacets[i].anNeighborIdx[j] >= -1);
                        ensure(psDT->pasFacets[i].anNeighborIdx[j] <= 4);
                    }
                }
                int face;
                CPLPushErrorHandler(CPLQuietErrorHandler);
                ensure_equals(GDALTriangulationFindFacetDirected(psDT, 0, 0, 0, &face), FALSE);
                ensure_equals(GDALTriangulationFindFacetBruteForce(psDT, 0, 0, &face), FALSE);
                double l1, l2, l3;
                ensure_equals(GDALTriangulationComputeBarycentricCoordinates(psDT, 0, 0, 0, &l1, &l2, &l3), FALSE);
                CPLPopErrorHandler();
                ensure_equals(GDALTriangulationComputeBarycentricCoefficients(psDT, adfX, adfY) , TRUE);
                ensure_equals(GDALTriangulationComputeBarycentricCoefficients(psDT, adfX, adfY) , TRUE);
            }

            // Points inside
            {
                double adfX[] = { 0, 1, 0, -1 };
                double adfY[] = { 1, 0, -1, 0 };
                for(int i=0;i<4;i++)
                {
                    double x = adfX[i];
                    double y = adfY[i];
                    int new_face;
                    int face;
                    ensure_equals(GDALTriangulationFindFacetDirected(psDT, 0, x, y, &face), TRUE);
                    ensure(face >= 0 && face < 4);
                    ensure_equals(GDALTriangulationFindFacetDirected(psDT, 1, x, y, &new_face), TRUE);
                    ensure_equals(face, new_face);
                    ensure_equals(GDALTriangulationFindFacetDirected(psDT, 2, x, y, &new_face), TRUE);
                    ensure_equals(face, new_face);
                    ensure_equals(GDALTriangulationFindFacetDirected(psDT, 3, x, y, &new_face), TRUE);
                    ensure_equals(face, new_face);
                    ensure_equals(GDALTriangulationFindFacetBruteForce(psDT, x, y, &new_face), TRUE);
                    ensure_equals(face, new_face);

                    double l1, l2, l3;
                    GDALTriangulationComputeBarycentricCoordinates(psDT, face, x, y, &l1, &l2, &l3);
                    ensure(l1 >= 0 && l1 <= 1);
                    ensure(l2 >= 0 && l2 <= 1);
                    ensure(l3 >= 0 && l3 <= 1);
                    ensure_equals(l3, 1 -l1 - l2);
                }
            }

            // Points outside
            {
                double adfX[] = { 0, 10, 0, -10 };
                double adfY[] = { 10, 0, -10, 0 };
                for(int i=0;i<4;i++)
                {
                    double x = adfX[i];
                    double y = adfY[i];
                    int new_face;
                    int face;
                    ensure_equals(GDALTriangulationFindFacetDirected(psDT, 0, x, y, &face), FALSE);
                    ensure(face >= 0 && face < 4);
                    ensure_equals(GDALTriangulationFindFacetDirected(psDT, 1, x, y, &new_face), FALSE);
                    ensure_equals(face, new_face);
                    ensure_equals(GDALTriangulationFindFacetDirected(psDT, 2, x, y, &new_face), FALSE);
                    ensure_equals(face, new_face);
                    ensure_equals(GDALTriangulationFindFacetDirected(psDT, 3, x, y, &new_face), FALSE);
                    ensure_equals(face, new_face);
                    ensure_equals(GDALTriangulationFindFacetBruteForce(psDT, x, y, &new_face), FALSE);
                    ensure_equals(face, new_face);

                    double l1, l2, l3;
                    GDALTriangulationComputeBarycentricCoordinates(psDT, face, x, y, &l1, &l2, &l3);
                    ensure("outside", !((l1 >= 0 && l1 <= 1) && (l2 >= 0 && l2 <= 1) && (l3 >= 0 && l3 <= 1)));
                    ensure_equals(l3, 1 -l1 - l2);
                }
            }
        }
    }