这篇我们学习扇形的绘制。扇形绘制函数如下:
//扇形所在椭圆的外切矩形左上角坐标(left, top),右下角坐标(right, bottom),起始角度stangle,终止角度endangle,角度采用弧度表示,也就是单位圆的弧长度
//画无填充扇形
void pie( int left, int top, int right, int bottom, double stangle, double endangle );
//画无边框填充扇形
void solidpie( int left, int top, int right, int bottom, double stangle, double endangle );
//画填充扇形
void fillpie( int left, int top, int right, int bottom, double stangle, double endangle );
//清空扇形
void clearpie( int left, int top, int right, int bottom, double stangle, double endangle );
可以看到扇形绘制函数参数比较多,也说明它比较复杂,下面进行一一解释。
首先扇形是椭圆的一部分,所以前面四个参数定义了扇形所在的椭圆,与椭圆参数一致,分别是椭圆外切矩形左上角坐标(left, top),右下角坐标(right, bottom)。后面两个浮点参数分别是起始角度startangle,和终止角度endangle。这里需要注意起始角度和终止角度的表示方法。由于windows坐标是y轴朝下,所以为了与笛卡尔坐标保持一致,在默认状态下的起始角度和终止角度表示有点别扭,大家可能不大习惯。首先在表示角度时采用弧度表示,例如30度表示成C_PI/3,其中C_PI是圆周率,而且是顺时针增加,不是笛卡尔坐标系的逆时针。但是扇形由起始角度开始,却是逆时针到终止角度为止。如下图所示:
代码:
pie(0,0,200,100,0,C_PI/3);//0度开始,逆时针绕到60度角。
setlinecolor(RGB(255,0,0));
pie(20,10,220,110,C_PI/3,0);//60度开始,逆时针绕到0度
pie(70,40,170,80,C_PI/3,0);
效果图:
可以看到黑色的扇形从0度角逆时针转到60度角(这个60度是水平往右是0度,然后顺时针方向增加60度),红色扇形起始角度为60度,终止角度是0度,则从60度角逆时针转到0度角。
总结一句话,就是角度计算用顺时针,扇形起止用逆时针。
扇形只绘制椭圆的一部分,这在某些时候具有非常重要的作用。
例如绘制饼状图代码如下:
// Pie.cpp : 定义控制台应用程序的入口点。
//
#include "../import/include/CGBoard.h"
#include "math.h"
#ifdef _DEBUG
#pragma comment(lib,"../import/lib/SimpleCG_MDd.lib")
#else
#pragma comment(lib,"../import/lib/SimpleCG_MD.lib")
#endif
int g_nWidth = 400; //画面宽度
int g_nHeight= 400; //画面高度
void DrawProcess()
{
setfillcolor(RGB(100,100,255));
fillpie(120,100,320,300,0,-C_PI/3);
setfillcolor(RGB(255,100,100));
fillpie(100,100,300,300,-C_PI/3,C_PI/3);
setfillcolor(RGB(100,255,100));
fillpie(120,110,320,310,C_PI/3,0);
}
int _tmain(int argc, _TCHAR* argv[])
{
//初始化
if( !ShowingBoard(g_nWidth,g_nHeight, DrawProcess))
return 1;
//关闭图库
CloseBoard();
return 0;
}
运行效果图:
另外我们还可以用pie函数绘制一条弯弯的彩虹,代码如下:
// Pie.cpp : 定义控制台应用程序的入口点。
//
#include "../import/include/CGBoard.h"
#include "math.h"
#ifdef _DEBUG
#pragma comment(lib,"../import/lib/SimpleCG_MDd.lib")
#else
#pragma comment(lib,"../import/lib/SimpleCG_MD.lib")
#endif
#define ADDCOLOR(x,y) ((x+y)>255?255:(x+y))
int g_nWidth = 400; //画面宽度
int g_nHeight= 400; //画面高度
void DrawProcess()
{
COLORREF nColor[]={
RGB(255,0,0),//红
RGB(255,127,0),//橙
RGB(255,255,0),//黄
RGB(0,255,0),//绿
RGB(0,255,255),//青
RGB(0,0,255),//蓝
RGB(255,0,255),//紫
RGB(255,255,255)
};
int i=0;
for(i=0;i<sizeof(nColor)/sizeof(nColor[0]);++i)
{
setfillcolor(nColor[i]);
solidpie(0+i*10,10+i*10,350-i*10,300-i*10,0,C_PI);
}
for(i=0;i<sizeof(nColor)/sizeof(nColor[0]);++i)
{
int r=ADDCOLOR(GetRValue(nColor[i]),150);
int g=ADDCOLOR(GetGValue(nColor[i]),150);
int b=ADDCOLOR(GetBValue(nColor[i]),150);
setfillcolor(RGB(r,g,b));
solidpie(0+i*10,10+i*10,350-i*10,300-i*10,C_PI,0);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
//初始化
if( !ShowingBoard(g_nWidth,g_nHeight, DrawProcess))
return 1;
//关闭图库
CloseBoard();
return 0;
}
运行效果:
好了,以上就是pie函数绘制扇形的相关介绍,相信通过实际编写几个绘制代码,你就能很快掌握扇形的绘制了。下期我们看看多边形的绘制。