日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Boost.Geometry介绍

發(fā)布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Boost.Geometry介绍 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最在項目中要用到計算幾何的東西,計算三維空間中面片與六面體的相交判斷,通過各種搜索發(fā)現(xiàn)boost庫中的Geometry模塊還不錯,可以比較容易地實現(xiàn)。這里記錄一下這個庫的基本情況。

?

1、常見幾何對象

#include <boost/geometry.hpp>

#include <boost/geometry/geometries/point_xy.hpp>

#include <boost/geometry/geometries/point.hpp>

#include <boost/geometry/geometries/multi_point.hpp>

#include <boost/geometry/geometries/segment.hpp>

#include <boost/geometry/geometries/polygon.hpp>

#include <boost/geometry/geometries/multi_polygon.hpp>

#include <boost/geometry/geometries/linestring.hpp>

#include <boost/geometry/geometries/multi_linestring.hpp>

#include <boost/geometry/geometries/box.hpp>

#include <boost/geometry/geometries/ring.hpp>

#include <boost/geometry/geometries/variant.hpp>

?

Boost.Geometry的model有point_xy,? point, multi_point, ,segment,linestring,multi_linestring, box,ring,polygon,multi_polygon, variant.

model::point

model::d2::point_xy

model::linestring

model::polygon

model::multi_point

model::multi_linestring

model::multi_polygon

model::box

model::ring

model::segment

model::referring_segment

?

model::point

Basic point class, having coordinates defined in a neutral way.

Description

Defines a neutral point class, fulfilling the Point Concept. Library users can use this point class, or use their own point classes. This point class is used in most of the samples and tests of Boost.Geometry This point class is used occasionally within the library, where a temporary point class is necessary.

model::d2::point_xy

2D point in Cartesian coordinate system

?

model::linestring

A linestring (named so by OGC) is a collection (default a vector) of points.

?

model::polygon

The polygon contains an outer ring and zero or more inner rings.

?

2、常見算法

提供的算法有:面積、長度、周長、質(zhì)心、凸殼、交集(剪裁)、內(nèi)(多邊形中的點)、距離、包絡(luò)線(邊界框)、簡化、變換等。

area

assign

append

buffer

centroid

clear

convert

convex_hull

correct

covered_by

crosses

densify

difference

discrete_frechet_distance

discrete_hausdorff_distance

disjoint

distance

envelope

equals

expand

for_each

intersection

intersects

is_empty

is_simple

is_valid

length

make

num_geometries

num_interior_rings

num_points

num_segments

overlaps

perimeter

relate

relation

reverse

simplify

sym_difference

touches

transform

union_

unique

within

常見的有以下幾種:

計算面積

Boost::Geometry::area(obj1)

計算距離

Boost::Geometry::distance(obj1, obj2)

判斷是否相交

Boost::Geometry::intersects(obj1, obj2)

計算交點

Boost::Geometry::intersection(obj1, obj2, result)

判斷是否在box內(nèi)

Boost::Geometry::within(obj1, obj2)

?

?

3、boost.Geometry可以與VS的GraphicalDebugging插件可以配合使用,查看幾何圖形。

在調(diào)試過程中插入斷點,通過在GraphicalDebugging界面輸入對象的名字就可以查看幾何對象的形態(tài)。在視圖中的其他窗口可以找到剛剛安裝的插件的窗口,Geometry Watch,Graphical Watch,Plot Watch。

?

4、幾何圖形的輸入輸出

DSV (Delimiter-Separated Values)

WKT (Well-Known Text)

SVG (Scalable Vector Graphics)

前兩種是文本格式數(shù)據(jù)流,第三種是圖形化輸入和輸出。

?

5、幾何圖形的算術(shù)運算

add_point

add_value

assign_point

assign_value

cross_product

cross_product

divide_point

divide_value

dot_product

multiply_point

multiply_value

subtract_point

subtract_value

?

6、官方示例

https://www.boost.org/doc/libs/1_69_0/libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/index_of_polygons_stored_in_vector.html

?

#include <boost/geometry.hpp>

#include <boost/geometry/geometries/point.hpp>

#include <boost/geometry/geometries/box.hpp>

#include <boost/geometry/geometries/polygon.hpp>

?

#include <boost/geometry/index/rtree.hpp>

?

#include <cmath>

#include <vector>

#include <iostream>

#include <boost/foreach.hpp>

?

namespace bg = boost::geometry;

namespace bgi = boost::geometry::index;

?

int main()

{

??? typedef bg::model::point<float, 2, bg::cs::cartesian> point;? //define point 2 dimension

??? typedef bg::model::box<point> box;

??? typedef bg::model::polygon<point, false, false> polygon; // ccw, open polygon

??? typedef std::pair<box, unsigned> value;

?

??? // polygons

??? std::vector<polygon> polygons;

?

??? // create some polygons

??? for ( unsigned i = 0 ; i < 10 ; ++i )

??? {

??????? // create a polygon

??????? polygon p;

??? ????for ( float a = 0 ; a < 6.28316f ; a += 1.04720f )

??????? {

??????????? float x = i + int(10*::cos(a))*0.1f;

??????????? float y = i + int(10*::sin(a))*0.1f;

??????????? p.outer().push_back(point(x, y));

??????? }

?

??????? // add polygon

??????? polygons.push_back(p);

??? }

?

??? // display polygons

??? std::cout << "generated polygons:" << std::endl;

??? BOOST_FOREACH(polygon const& p, polygons)

??????? std::cout << bg::wkt<polygon>(p) << std::endl;

?

??? // create the rtree using default constructor

??? bgi::rtree< value, bgi::rstar<16, 4> > rtree;

?

??? // fill the spatial index

??? for ( unsigned i = 0 ; i < polygons.size() ; ++i )

??? {

??????? // calculate polygon bounding box

??????? box b = bg::return_envelope<box>(polygons[i]);

??????? // insert new value

??????? rtree.insert(std::make_pair(b, i));

??? }

?

??? // find values intersecting some area defined by a box

??? box query_box(point(0, 0), point(5, 5));

??? std::vector<value> result_s;

??? rtree.query(bgi::intersects(query_box), std::back_inserter(result_s));

?

??? // find 5 nearest values to a point

??? std::vector<value> result_n;

??? rtree.query(bgi::nearest(point(0, 0), 5), std::back_inserter(result_n));

?

??? // note: in Boost.Geometry the WKT representation of a box is polygon

?

??? // note: the values store the bounding boxes of polygons

??? // the polygons aren't used for querying but are printed

?

??? // display results

??? std::cout << "spatial query box:" << std::endl;

??? std::cout << bg::wkt<box>(query_box) << std::endl;

?? ?std::cout << "spatial query result:" << std::endl;

??? BOOST_FOREACH(value const& v, result_s)

??????? std::cout << bg::wkt<polygon>(polygons[v.second]) << std::endl;

?

??? std::cout << "knn query point:" << std::endl;

??? std::cout << bg::wkt<point>(point(0, 0)) << std::endl;

??? std::cout << "knn query result:" << std::endl;

??? BOOST_FOREACH(value const& v, result_n)

??????? std::cout << bg::wkt<polygon>(polygons[v.second]) << std::endl;

?

??? return 0;

}

總結(jié)

以上是生活随笔為你收集整理的Boost.Geometry介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人午夜福利视频 | 国产白丝在线观看 | 国产一区二区三区福利 | 六月久久| a毛片大片| 欧美三级午夜理伦三级小说 | 日本亚洲视频 | 少妇性l交大片免潘金莲 | 五月天激情电影 | 国产男女自拍 | 91视频久久久久 | 中国女人性猛交 | 爱情岛亚洲论坛入口 | 亚洲视频自拍偷拍 | 岛国伊人 | 午夜天堂| 国产婷婷色一区二区 | 日韩一区在线免费观看 | 午夜视频在线瓜伦 | jizz国产在线 | 天堂va在线 | 精品无码一区二区三区 | 亚洲性综合 | 永久免费精品 | 亚洲免费观看高清完整版在线 | 亚洲操一操 | 波多野结衣 在线 | 日本少妇网站 | 色就是色欧美色图 | 欧美一区二区最爽乱淫视频免费看 | 国产欧美日韩成人 | 一区二区三区在线观看免费视频 | 夜夜看 | 在线视频观看你懂得 | 欧美激情在线免费 | 亚洲国产aⅴ精品一区二区的游戏 | 精品久久久久久久中文字幕 | 日本久久免费 | 精品美女www爽爽爽视频 | 日本xxxx在线观看 | 香蕉久操 | 久久伊人草 | 国产在线观看中文字幕 | 日韩国产精品一区二区三区 | 丝袜老师扒开让我了一夜漫画 | 草草草在线观看 | 欧美生活一级片 | 欧美激情成人 | 女攻总攻大胸奶汁(高h) | 色悠久| 日本久久综合网 | 国产经典一区二区 | 欧美色第一页 | 日日摸日日碰 | 日日摸日日操 | 国产一区二区三区免费在线观看 | 国产九九九九九 | 亚洲妇熟xx妇色黄蜜桃 | 九九av在线| 网站黄在线观看 | 性欧美free| 欧美级毛片 | 日韩欧美国产一区二区在线观看 | 在线观看自拍 | 成人中文在线 | 中文字幕理论片 | 久久久www免费人成人片 | 欧美激情亚洲 | 三区在线视频 | 国产精品一区二区性色av | 国产精品久久久久久久久久久久久久 | 国产人妻人伦精品1国产丝袜 | 午夜在线精品 | 免费又黄又爽又色的视频 | 成年视频在线 | 欧美成人vr18sexvr | 成人久色 | 91伦理视频 | 一级少妇精品久久久久久久 | 国产免费又粗又猛又爽 | 欧美久久一区二区 | 夜夜欢视频 | 特级西西www444人体聚色 | 狠狠操在线播放 | 少妇人妻好深好紧精品无码 | 亚洲美女在线视频 | 国产内射合集颜射 | 超碰997| 久久精品国产精品亚洲 | 在线观看亚洲一区二区 | 日本高清视频在线 | 五月婷婷啪啪 | 日韩一区2区 | 中文字幕一区二区在线老色批影视 | 国产成人精品视频在线观看 | 亲切的金子餐桌片段的金子 | 亚洲高清视频在线 | 成人一区二区三区在线观看 | 国产天堂精品 |