SimpleCG绘图函数(7)--绘制扇形

        这篇我们学习扇形的绘制。扇形绘制函数如下:

//扇形所在椭圆的外切矩形左上角坐标(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函数绘制扇形的相关介绍,相信通过实际编写几个绘制代码,你就能很快掌握扇形的绘制了。下期我们看看多边形的绘制。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

b2b160

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值