/ / ako nájsť sama križovatka v polygóne pomocou boost /? - zvýšenie, polygón, výpočtová geometria, set-křižovatka

ako nájsť seba priesečník v polygóne pomocou boost /? - zvýšenie, polygón, výpočtová geometria, set-križovatka

Potrebujem nájsť vlastné križovatky v polygóne. Viem, že posilnenie má túto schopnosť. ale nemôžem zistiť, ako použiť turn_info získať informácie o križovatkách, ako aké segmenty pretínajú atď môže niekto pomôcť? Vďaka

odpovede:

1 pre odpoveď č. 1

Nemôžete správne, pretože koncepty definované pomocou Boost Geometry odbudzujú vlastné križovatky.

Avšak nepriamo potom môžete použiť funkcie overenia (nové od momentu, keď si myslím, že 1,59), aby ste získali nejaké informácie o sebaobranu:

std::string reason;
poly p;
bg::read_wkt("POLYGON((0 0, 0 4, 2 4, 2 2, 6 2, 6 6, 2 6, 2 4, 0 4, 0 8, 8 8, 8 0, 0 0))", expected);
bool ok = bg::is_valid(p, reason);
std::cout << "Expected: " << bg::dsv(p) << (ok?" valid":" invalid: "" + reason + """) << "n";

tlačí:

očakáva: (2, 4), (2, 2), (6, 2), (6, 6), (2, 6), (2, 4) (0, 4), (0, 8), (8, 8), (8, 0), (0, 0))) neplatné: "Geometria má neplatné samokrížky. 0, 4), metóda: t, operácie: x / u, ID segmentu {source, multi, ring, segment}: {0, -1, "



Translate Home - Google Home

Send us feedback

View Google in:
MobileClassic

©2017 Google - Privacy & Terms


1 pre odpoveď č. 2

Takže toto je kód pre získanie samých priesečníkov.

namespace bg = boost::geometry;
using namespace std;
typedef bg::model::d2::point_xy<double> point_2d;
typedef bg::model::polygon<boost::geometry::model::d2::point_xy<double> > Polygon;

Polygon poly { { { 10, 10 }, { 20, 10 }, { 20, 5 }, { 25, 5 }, { 25, 7 }, { 30, 7 }, { 30, 3 }, { 25, 3 }, { 25, 5 }, { 20, 5 }, { 20, 0 }, { 10, 0 }, { 10, 10 } }};


typedef bg::point_type<Polygon>::type point_type;
typedef boost::geometry::detail::overlay::turn_info<point_type, boost::geometry::segment_ratio<double> > TurnInfoType;

bg::detail::no_rescale_policy robust_policy;
bg::detail::self_get_turn_points::no_interrupt_policy interrupt_policy;
std::vector<TurnInfoType> turns;

boost::geometry::self_turns<boost::geometry::detail::overlay::assign_null_policy>(poly.outer(), robust_policy, turns, interrupt_policy);

pre získanie informácií používajte niečo ako:

turns[i].operations[0].seg_id.segment_index