Увеличьте пересечение полигонов с помощью поплавков

#c #boost #intersection

Вопрос:

Я пытаюсь использовать поплавки вместо двойных со стандартным повышением.Метод пересечения геометрии. Но этот код вылетает, если я просто изменю все на плавающее уже в первом цикле. С двойным это работает без проблем. Это ошибка и код:

Необработанное исключение: Система.Исключение AccessViolationException: Попытка чтения или записи защищенной памяти. Это часто указывает на то, что другая память повреждена

 PINVOKE int PolylineIntersectionFloat(
    float* polyline0, size_t polyline0_XYCount,
    float* polyline1, size_t polyline1_XYCount,
    float*amp; intersection, intamp; intersection_XYCount) {



    //////////////////////////////////////////////////////////////////////////////////////////
    /// Convert double array to Boost polygons
    //////////////////////////////////////////////////////////////////////////////////////////

    bg::model::polygon<boost::geometry::model::d2::point_xy<float>> polygon0;
    bg::model::polygon<boost::geometry::model::d2::point_xy<float>> polygon1;

    for (int i = 0; i < polyline0_XYCount; i  = 2) {
        double a = polyline0[i];
        double b = polyline0[i 1];

        bg::append(polygon0.outer(), bg::model::d2::point_xy<float>(a,b));
    }

    for (int i = 0; i < polyline1_XYCount; i  = 2) {
        bg::append(polygon1.outer(), bg::model::d2::point_xy<float>(polyline1[i], polyline1[i   1]));
    }

    //////////////////////////////////////////////////////////////////////////////////////////
    /// Perform 2D Polygon Interserction
    //////////////////////////////////////////////////////////////////////////////////////////
    boost::geometry::correct(polygon0);
    boost::geometry::correct(polygon1);

    typedef bg::model::polygon<boost::geometry::model::d2::point_xy<float>> polygon;
    std::deque<polygon> output;
    bg::intersection(polygon0, polygon1, output);

    //////////////////////////////////////////////////////////////////////////////////////////
    /// Convert to Coordinate Array for Export
    //////////////////////////////////////////////////////////////////////////////////////////


    //std::ofstream myfile;
    //      myfile.open("C:\Users\petra\AppData\Roaming\McNeel\Rhinoceros\packages\7.0\ngon\3.1.0\Test.txt");
    //      myfile << "Writing this to a file.n";
    //      myfile << "Number of Polygons" << output.size();
    //      BOOST_FOREACH(polygon constamp; p, output)
    //      {
    //          myfile << "Count" << p.outer().size();
    //          myfile << "Count*2" << p.outer().size()*2;
    //      }
    //myfile.close();

    if (output.size() == 0)
        return 0;

    BOOST_FOREACH(polygon constamp; p, output)
    {


        intersection_XYCount = p.outer().size() * 2;
        intersection = new float[intersection_XYCount];

        //Iterate Polygon Points
        int j = 0;
        for (auto it = boost::begin(bg::exterior_ring(p)); it != boost::end(bg::exterior_ring(p));   it)
        {
            float x = bg::get<0>(*it);
            float y = bg::get<1>(*it);
            intersection[j] = x;
            intersection[j   1] = y;
            j  = 2;
        }

        return 1;

    }

    return 0;


}