作者:朱金灿
来源:http://blog.csdn.net/clever101
GDI+的绘图类Graphics的绘制圆弧的接口DrawArc
Status DrawArc(IN const Pen* pen,
IN const Rect& rect,
IN REAL startAngle,
IN REAL sweepAngle)
教程是这样解释该接口的:
pen : 画笔
rect : 定义弧线的矩形
startAngle: 从x轴到弧线的起始点沿顺时针方向度量的角(以度为单位)。
sweepAngle: 从startAngle参数到弧线的结束点沿顺时针方向度量的角(以度为单位)。
pen参数很好理解,所谓弧线,本质就是椭圆的一部分,GDI/GDI+往往使用椭圆的外接矩形决定椭圆的形状,所以rect参数也很好理解,只是对其它一些参数还有一些疑问:首先哪一条直线代表x轴,其次一段圆弧有两端,哪一端表示弧线的起始点,哪一个结束点?
于是决心自己动手去搞明白这个问题,写了下面代码:
效果图如下:
分析了一下效果图,大致明白了DrawArc函数的各个参数的意义,于是自己画下下图:
看着上图,大家应该很明白,所谓x轴就是过外接矩形中心点的水平线,圆弧的起点就是靠右的一端,结束点就是靠左的一点,上面说的sweepAngle是从startAngle参数到弧线的结束点沿顺时针方向度量的角(以度为单位)其实说得不明不白的,我觉得更为准确的说法应该是沿着外接矩形中心点和圆弧起始点连成的直线扫描到外接矩形中心点和圆弧起始点连成的直线所经过的角度,sweep就有扫描的意思。
想到这里,我想到假如扫描角度超过360度,就可以绘制一个圆出来,还有如果起始角是负值,弧线应该在第一象限内。实际上确实这样的。还有一种情况是当sweepAngle是负值的情况下,是一种怎样的情况呢?我发现当sweepAngle是负值时,弧线是作逆时针扫描的。如下面的代码:
<!-- [if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:PunctuationKerning/>
<w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing>
<w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
<w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:SpaceForUL/>
<w:BalanceSingleByteDoubleByteWidth/>
<w:DoNotLeaveBackslashAlone/>
<w:ULTrailSpace/>
<w:DoNotExpandShiftReturn/>
<w:AdjustLineHeightInTable/>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:UseFELayout/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><!-- [if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" LatentStyleCount="156">
</w:LatentStyles>
</xml><![endif]--><!-- [if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]--><!-- [if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026"/>
</xml><![endif]--><!-- [if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1"/>
</o:shapelayout></xml><![endif]-->
效果图如下:
分享到:
相关推荐
实例457 GDI+绘制圆弧 703 实例458 GDI+绘制椭圆 705 实例459 GDI+绘制扇形 706 实例460 GDI+绘制基数样条 707 实例461 绘制贝塞尔样条 708 实例462 绘制图形路径 709 实例463 GDI+中的画笔之实心画笔 710 实例464 ...
GDI+,绘制矩形及填充,直线,圆,圆弧,小代码测试,
GDI 绘制过程中有锯齿现象,这部分代码可以有效实现抗锯齿功能(线条、矩形,圆角矩形、多边形,圆形、椭圆.....)
帖子地址: https://blog.csdn.net/qq_38693757/article/details/129436229 1.画直线 2.画矩形 3.画圆、圆弧 4.画扇形 5.画多边形 6.绘制字符串 7.填充图形
第一个子模块为绘图部分,主要有直线、多义线、圆、圆弧。第二个子模块为编辑部分。第三个子模块为图形的缩放部分,也是本系统所要重点设计的部分。所以在本论文当中主要围绕图元的放大、缩小、 局部放大、全屏显示...
代码为vb.net源码,vs2015平台,功能是通过数据绘图,如坐标点绘制圆弧,直线,文字。里面只测试了这三种。我相信懂的只需要圆弧直线就能画出任意图形的,因为任何图形都是由直线圆弧点组成。这个代码适合新手,做一...
基于C#语言使用GDI+技术开发简易交互式CAD系统,动态绘制直线、矩形、圆、圆弧。绘圆弧时第三点如果和第一点重合会导致程序崩溃。
内存画板增加“画圆弧路径文字()”,可以画出按照圆弧排列的文字 2.5版本新增类“动态矢量画板”,画出的图形可以随着鼠标滚轮滚动放大缩小 画出的形状支持半透明颜色(画笔颜色、**颜色、文本颜色为ARGB颜色)
14.2.4 绘制圆弧 320 14.2.5 绘制多边形 322 14.2.6 绘制基数样条 323 14.2.7 绘制贝塞尔样条 324 14.2.8 绘制图形路径 326 14.3 GDI+在实际开发中的应用 327 14.3.1 利用柱形图分析每月的商品销售情况...
增加“画圆弧路径文字()”,可以画出按照圆弧排列的文字 ◆新增类“图片对象”和“ICO图标类” ◆增加子程序:_计算直线角度()、_计算直线的终点()、_计算两点间的距离()、_计算两条直线的交点()。 _计算直线的...
分别介绍了C#语言基础、Windows窗体及常用控件、Windows高级控件、控件公共属性、方法及事件、数据库开发、文件、数据流与注册表、GDI+绘图技术和C#高级编程,共包含562个C#编程中常用的属性、方法、类和各种技术,...