当前位置: 代码迷 >> 综合 >> Boost库--功能介绍--Geometry--图形开发库--计算几何--常用功能封装--GraphicalDebugging(一)
  详细解决方案

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

热度:6   发布时间:2024-01-29 22:26:12.0

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

#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point.hpp>
#include <boost/geometry/geometries/polygon.hpp>
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 <boost/geometry.hpp>
#include <boost/geometry/core/point_type.hpp>
#include <boost/geometry/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/linestring.hpp>
#include <boost/geometry/geometries/box.hpp>
#include <boost/geometry/geometries/ring.hpp>
#include <boost/geometry/geometries/polygon.hpp>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;
}

??读者可以在插件里查看下对应图形。增强对基本几何元素的理解。


??欢迎光临知了软件开发网络平台,本公司定制开发各类软件,主要方向为桌面专业软件开发和插件定制开发,桌面软件主要包括文字图形识别类软件,信息管理类软件,3D打印类软件,视频类软件以及其它涉及专业的各类图形图像处理软件。插件包含AE插件,AI插件,PS插件,PDF插件,3DMAX插件以及Word,Excel等Office插件开发。详情请咨询,微信QQ:312117271,手机:18928899728,邮箱: anjingzhi_sea@163.com.
公司网址:http://www.zhiliaos.com

  相关解决方案