Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

is_valid (with failure value)

Boost , Chapter 1. Geometry , is_valid

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Проверяет, действительна ли геометрия (в смысле ОГК)

Synopsis

template<typename Geometry>
bool is_valid(Geometry const & geometry, validity_failure_type & failure)

Parameters

Тип

Концепция

Имя

Описание

Geometry const &

Любой тип, выполняющий концепцию геометрии

geometry

Модель указанного понятия

validity_failure_type &

failure

Значение перечисления, указывающее, является ли геометрия действительной или нет, и если оно недействительно, указывающее причину

Returns

Возвращается истинно, если геометрия действительна (в смысле ОГК); кроме того, считаются действительными следующие геометрии: многогеометрии без элементов, линейные геометрии, содержащие шипы, ареальные геометрии с дублирующими (последовательными) точками

Header

Либо

#include <boost/geometry.hpp>

Либо

#include <boost/geometry/algorithms/is_valid.hpp>

Conformance

Функция is_valid не определяется OGC.

Supported geometries

Геометрия

статус

Точка

ok

Сегмент

ok

Box

ok

Линия

ok

Кольцо

ok

Полигон

ok

Многоточечный

ok

Мультилинестринг

ok

Мультиполигон

ok

Variant

ok

Complexity

Постоянное время для точек, сегментов, коробок и многоточечных

Линейный для линейных шнуров и многолинейных шнуров

Линеаритмический для колец

В настоящее время худший случай квадратичен для многоугольников и многополигонов.

Example

Проверяет, действительна ли геометрия, и, если не действительна, проверяет, может ли она быть установлена bg::correct; если да, bg::correct вызывается геометрией.

#include <iostream>
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/polygon.hpp>
int main()
{
    typedef boost::geometry::model::d2::point_xy<double> point_type;
    typedef boost::geometry::model::polygon<point_type> polygon_type;
    polygon_type poly;
    boost::geometry::read_wkt("POLYGON((0 0,0 10,10 10,10 0),(0 0,9 2,9 1,0 0),(0 0,2 9,1 9,0 0))", poly);
    std::cout << "original geometry: " << boost::geometry::dsv(poly) << std::endl;
    boost::geometry::validity_failure_type failure;
    bool valid = boost::geometry::is_valid(poly, failure);
    // if the invalidity is only due to lack of closing points and/or wrongly oriented rings, then bg::correct can fix it
    bool could_be_fixed = (failure == boost::geometry::failure_not_closed
                           || boost::geometry::failure_wrong_orientation);
    std::cout << "is valid? " << (valid ? "yes" : "no") << std::endl;
    if (! valid)
    {
        std::cout << "can boost::geometry::correct remedy invalidity? " << (could_be_fixed ? "possibly yes" : "no") << std::endl;
        if (could_be_fixed)
        {
            boost::geometry::correct(poly);
            std::cout << "after correction: " << (boost::geometry::is_valid(poly) ? "valid" : "still invalid") << std::endl;
            std::cout << "corrected geometry: " << boost::geometry::dsv(poly) << std::endl;
        }
    }
    return 0;
}

Результат:

original geometry: (((0, 0), (0, 10), (10, 10), (10, 0)), ((0, 0), (9, 2), (9, 1), (0, 0)), ((0, 0), (2, 9), (1, 9), (0, 0)))
is valid? no
can boost::geometry::correct remedy invalidity? possibly yes
after correction: valid
corrected geometry: (((0, 0), (0, 10), (10, 10), (10, 0), (0, 0)), ((0, 0), (9, 1), (9, 2), (0, 0)), ((0, 0), (2, 9), (1, 9), (0, 0)))
is_valid_failure_example
See also

PrevUpHomeNext

Статья is_valid (with failure value) раздела Chapter 1. Geometry is_valid может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: is_valid ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 06:39:06/0.0032739639282227/0