千家信息网

AGG中agg::ellipse如何渲染椭圆和多边形

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,小编给大家分享一下AGG中agg::ellipse如何渲染椭圆和多边形,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!8.1
千家信息网最后更新 2026年11月01日AGG中agg::ellipse如何渲染椭圆和多边形

小编给大家分享一下AGG中agg::ellipse如何渲染椭圆和多边形,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

8.1引言

圆是椭圆的一种,只不过是长短轴半径相等而已。在AGG中,必须给定椭圆的长短半轴的半径,才能够绘制椭圆。将横坐标半径称为rx,纵坐标半径称为ry。并且可以指定绘制的方向,是顺时针,还是逆时针。提供了一个参数,可以实现内接多边形的渲染。

8.2 函数定义

类定义文件:include/agg_ellipse.h

类的构造函数: ellipse(double x, double y, double rx, double ry,

unsigned num_steps=0, boolcw=false)

参数说明:x是圆心的X坐标,y是圆心的Y坐标,rx是圆形的X半径,ry是圆形的Y半径,当rx不等于ry的时候,渲染出来的实际上是一个椭圆,具体可调整参数根据第三和第四个参数可以了解到圆形可以是一个扁平的圆形,不一定就是一个规规矩矩的圆形。如果指定num_steps值,构建的是一个圆内接多边形。cw是顺时针,还是逆时针渲染。

8.3 例子回放

1)渲染实心圆

说明:在渲染的过程中,跳过agg::conv_stroke显示扩展线(也就是边界,下面有实例说明),绘制的是一个实心圆。

代码如下:

agg::ellipse ell(200,200,50,100);

ras.add_path(ell);

agg::render_scanlines_aa_solid(ras,sl,renb,agg::rgba8(255,0,0));

ras.reset();

2)渲染空心圆

agg::ellipse ell(200,200,50,100);

typedef agg::conv_stroke< agg::ellipse >ell_stroke;

ell_stroke stroke(ell);

ras.add_path(stroke);

agg::render_scanlines_aa_solid(ras,sl,renb,agg::rgba8(255,0,0));

ras.reset();

3)渲染虚线的空心圆

agg::ellipseell(200,200,50,100);

typedef agg::conv_dash ell_cd_type;

ell_cd_type cdccell(ell);

cdccell.add_dash(5,5);

typedef agg::conv_stroke ell_cc_cs_type;

ell_cc_cs_type csccell(cdccell);

ras.add_path(csccell);

rensl.color(agg::rgba8(255,0,0));

agg::render_scanlines(ras,sl,rensl);

ras.reset();

通过构建agg::conv_dash模板,然后创建给agg::conv_stroke实现了虚线的描绘。

4)仿射变换

主要是进行旋转,平移,缩放,圆心进行了偏移,如果需要回到当初的位置,平移肯定是必须的,这一点和agg::conv_contour扩展轮廓线不同。

代码如下:

agg::ellipse ell(200,200,50,100);

//坐标转换

agg::trans_affine mtx;

mtx.scale(0.5,1); //x轴缩小到原来的一半

mtx.rotate(agg::deg2rad(30));//旋转30度

mtx.translate(200,200);//X,Y坐标分别平移100

typedef agg::conv_transform ell_ct_type;

ell_ct_type ctell(ell,mtx); //矩阵变换

typedef agg::conv_dash ell_cd_type;

ell_cd_type cdccell(ctell);

cdccell.add_dash(5,5);

typedef agg::conv_stroke ell_cc_cs_type;

ell_cc_cs_type csccell(cdccell);

摘自:http://www.cnblogs.com/CoolJie/archive/2011/04/27/2030122.html

5)渲染圆内接多边形

说明:指定构造器的第五个参数为12,构建十二边形

代码如下:

agg::ellipse ell(300,300,130,130,12);

agg::conv_stroke stroke(ell);

ras.add_path(stroke);

agg::render_scanlines_aa_solid(ras,sl,renb,agg::rgba8(255,0,0));

8.4 approximation_scale的困惑

说明:很多的类都有该函数,但是具体的该函数的实际意义并不了解!!

例子 inline void ellipse::approximation_scale(double scale):

agg::ellipse ell(300,300,240,240);

ell.approximation_scale(0.0001);//直线

ell.approximation_scale(0.001);//矩形

ell.approximation_scale(0.005);//正七边形

ell.approximation_scale(0.0025);//正五边形

agg::conv_strokestroke2(ell);

agg::render_scanlines_aa_solid(ras,sl,renb,agg::rgba8(255,0,0));

ras.reset();

以上是"AGG中agg::ellipse如何渲染椭圆和多边形"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

椭圆 半径 多边形 参数 圆形 函数 坐标 代码 圆心 篇文章 平移 例子 内容 实际 时针 虚线 还是 逆时针 长短 变换 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 致骋互联网科技 成都互联网科技公司 互联网金融 科技创新 青海省互联网新科技 科技与互联网的利与弊 中盈科技互联网信息有限公司 互联网教育科技公司vipkid 互联网科技中介 阿里互联网科技公司 互联网科技有哪些公司 互联网科技与管理 互联网为啥属于高科技 洛阳共同富裕互联网科技有限公司 华夏恒生科技与互联网科技 上海京穆互联网科技有限公司 云南省自由互联网科技有限公司 上海创道互联网络科技有限公司 35岁以上互联网科技行业 新氧科技和美国互联网有关系吗 杭州融税互联网科技有限公司 中国互联网科技工作委员会毛军 互联网最新的科技 深圳科技互联网 恒生科技互联网指数分析 北京大学互联网科技怎么样 佳云科技和互联网广告 花神(南京)互联网科技有限公司 东营紫格互联网科技 北京互联网科技类企业分布 小牛互联网科技有限公司地址
0