Boost库-功能介绍-Geometry-图形开发库-计算几何-常用功能封装-GraphicalDebugging(一)

文章目录

    • 1.创建多边形
    • 2.常用类型的定义
    • 3.作者答疑

  面对一些路径规划,矢量编辑和界面UI方面的项目时,平面几何的计算功能是非常常见的,也是必备的。本文介绍一个成名已久的开源库,Boost中Geometry,阅读之前,希望读者对C++模板编程有一定程序的了解,推荐大家先阅读博主写的函数模板和类模板。这样阅读本文知识来讲就不会有什么问题。学习Geometry前,读者可以在自己的VS上装上一个非常实用的插件GraphicalDebugging。只需要在VS工具菜单下,扩展与更新,联机,搜索GraphicalDebugging,下载安装,插件大概304k,很容易下载完成,安装后重启VS;然后在视图其它窗口中,就可以找到查看的Geometry Watch,Graphical Watch,Plot Watch三个窗口菜单。
在这里插入图片描述

1.创建多边形

  首先是给读者简单示范一下多边形的创建及插件的使用。代码如下:

#include 
#include 
#include 
int main()
{typedef boost::geometry::model::point<float, 2, boost::geometry::cs::cartesian> Point;typedef boost::geometry::model::polygon<Point, false, false> Polygon; // ccw, open polygon//创建多边形Polygon p;for (float a = 0; a < 6.28316f; a += 1.04720f){float x = int(10 * ::cos(a))*0.1f;float y = int(10 * ::sin(a))*0.1f;p.outer().push_back(Point(x, y));}	return 0;
}

在这里插入图片描述
  调试时在左边下面表格中输入对应变量名称即可查看图形,预览图形。

2.常用类型的定义

  在几何图形计算中,有点,线,多边形等许多非常常见的概念,在使用这个几何库之前需要先做了解。一般定义代码如下:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include namespace bg = boost::geometry;
typedef bg::model::d2::point_xy<double> DPoint; //双精度的点
typedef bg::model::segment<DPoint> DSegment; //线段
typedef bg::model::linestring<DPoint> DLineString; //多段线
typedef bg::model::box<DPoint> DBox; //矩形
//这里的ring就是我们通常说的多边形闭合区域(内部不存在缕空),模板参数为true,表示顺时针存储点,为false,表示逆时针存储点,坐标系为正常向上向右为正的笛卡尔坐标系
typedef bg::model::ring<DPoint, false> DRing; //环
typedef bg::model::polygon<DPoint, false> DPolygon; //多边形
#define A_PI 3.141592653589793238462643383279502884197
int main()
{//创建点DPoint pt1(0, 0), pt2(10,10);//创建线段DSegment ds;ds.first = pt1;ds.second = pt2;//创建多段线DLineString dl;dl.push_back(DPoint(0, 0));dl.push_back(DPoint(15, 8));dl.push_back(DPoint(8, 13));dl.push_back(DPoint(13, 16));//创建矩形DBox db(pt1,pt2);//创建环DRing dr;dr.push_back(DPoint(0, 0));dr.push_back(DPoint(1, 2));dr.push_back(DPoint(3, 4));dr.push_back(DPoint(5, 6));	//创建多边形DPolygon p;for (double a = 0; a < 2*A_PI; a += 2*A_PI/18){double x = ::cos(a)*10.0f;double y = ::sin(a)*10.0f;p.outer().push_back(DPoint(x, y));		}return 0;
}

  读者可以在插件里查看下对应图形。增强对基本几何元素的理解。后面一篇博文会正式介绍这个库的常用几何计算,感兴趣的读者可以去查阅一下。或者直接使用。

3.作者答疑

  如有疑问,请留言。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部