绘制椭圆
void ellipse(int left,int top,int right,int bottom);
这个函数的参数和绘制矩形的一样就是在矩形内确定一个唯一的椭圆,画一下清晰可见
int main() { initgraph(800, 600); setorigin(400, 300); setaspectratio(1, -1); //画出坐标系 line(400, 0, -400, 0); line(0, 300, 0, -300); //绘制矩形 rectangle(-100,100,100,-200); ellipse(-100, 100, 100, -200); getchar(); closegraph(); return 0; }
更改了矩形的形状,更加体现出这个函数绘制椭圆的形状,如果矩形位正方形,那画出的椭圆就是一个正方形的内接圆。
绘制扇形
void pie(int left,int top,int right,int bottom,double stangle,double endangle);
前边的参数和椭圆的一模一样,后两个参数分别为扇形的起始角度和终止角度,其实就是在上边的椭圆中截取一段,这一段是由该椭圆的原点的x轴开始,顺时针截取一段扇形
代码如下
#define Pai 3.14 int main() { initgraph(800, 600); setorigin(400, 300); setaspectratio(1, -1); //画出坐标系 line(400, 0, -400, 0); line(0, 300, 0, -300); //绘制矩形 rectangle(-100,100,100,-200); //ellipse(-100, 100, 100, -200); //将椭圆函数注释掉 pie(-100, 100, 100, -200, 0, Pai / 4); getchar(); closegraph(); return 0; }
运行后如图,发现正确绘制出一个扇形
绘制一段弧
void arc(int left,int top,int right,int bottom,double stangle,double endangle);
扇形和弧的区别我想大家都知道,直接改变上述代码,把绘制扇形的函数改为绘制弧的函数
代码如下
#define Pai 3.14 int main() { initgraph(800, 600); setorigin(400, 300); setaspectratio(1, -1); //画出坐标系 line(400, 0, -400, 0); line(0, 300, 0, -300); //绘制矩形 rectangle(-100,100,100,-200); //ellipse(-100, 100, 100, -200); //将椭圆函数注释掉 //pie(-100, 100, 100, -200, 0, Pai / 4); //绘制一段弧 arc(-100, 100, 100, -200, 0, Pai / 4); getchar(); closegraph(); return 0; }
运行后效果如下
vectory,嘿嘿
接下来进行绘制更加复杂的图形
有了上边的讲解,接下来绘制一些稍微复杂一点点的图形()
绘制三角形就是利用line函数,确定三角形的三个顶点,依次连接即可
代码如下
int main() { initgraph(800, 600); setorigin(400, 300); setaspectratio(1, -1); //绘制坐标系 line(400, 0, -400, 0); line(0, 300, 0, -300); //绘制三角形 line(0, 100, 50, -50); line(50, -50, -50, -50); line(-50, -50, 0, 100); getchar(); closegraph(); return 0; }
运行后结果如下
是不是觉得好麻烦?
polygon函数
void polygon(const POINT*points,int num);
第一个函数是一个指针,指向数组的首元素,数组里装的是点的坐标,第二个参数阐明有多少个点,用这个函数绘制这个三角形。
int main() { initgraph(800, 600); setorigin(400, 300); setaspectratio(1, -1); //绘制坐标系 line(400, 0, -400, 0); line(0, 300, 0, -300); //绘制三角形 /*line(0, 100, 50, -50); line(50, -50, -50, -50); line(-50, -50, 0, 100); */ POINT points[] = { {0,100},{50,-50},{-50,-50} }; polygon(points, 3); getchar(); closegraph(); return 0; }
运行后和上边的三角形一模一样。
没有简单很多?如果再装其他的点的坐标,就可以绘制其他的图形,例如矩形,梯形,等等等等,是不是很实用。
我们来画出一个五边形,利用数学知识,确定好各个点的坐标,可以用角度来表示,更简单一点。
分析如下
由于确定坐标位置要用到sin和cos函数,要包含头文件math.h
代码如下
#include <math.h> #define Pai 3.14 int main() { initgraph(800, 600); setorigin(400, 300); setaspectratio(1, -1); //绘制坐标系 line(400, 0, -400, 0); line(0, 300, 0, -300); int r = 200;//半径 //初始角度 double theta = Pai / 2; //递增角度 double delta = 2 * Pai / 5; POINT points[5];//定义一个数组,存放点的坐标 for (int i = 0; i < 5; i++) { points[i].x = cos(theta + i * delta) * r; points[i].y = sin(theta + i * delta) * r; } polygon(points, 5); getchar(); closegraph(); return 0; }
运行后如图
怎么改成五角星呢?其实很简单,把递增角度72°改为144°即可,还是循环五次哦
运行后如下图所示
就不解释啦,大家随便一想就可以明白。
然而
这个函数会将传入的坐标依次连接,如果我们想画一个W型呢,找好坐标,用ploygon函数的话
int main() { initgraph(800, 600); setorigin(400, 300); setaspectratio(1,-1); line(400, 0, -400, 0); line(0, 300, 0, -300); POINT points[] = { {-200,200},{-100,0},{0,80},{100,0},{200,200} }; polygon(points, 5); getchar(); closegraph(); return 0; }
运行后如图
而我想要的是不封口的,即最后点不连接第一个点
polyline函数
这个函数和polygon几乎一模一样,不同的是他不会连接最后一个点和第一个点来封闭图形,使用polyline函数再次运行
成功!
绘制图形时的格式
前边所学绘制出的图形描边颜色都默认为白色,现在来更改他,利用
setlinecolor函数
void setlinecolor(COLORREF color);
设置描边颜色,一定要在绘制图形之前设置
int main() { initgraph(800, 600); setorigin(400, 300); setaspectratio(1, -1); setlinecolor(YELLOW); for (int i = 0; i <= 300; i+=50) { circle(0, 0, i); } getchar(); closegraph(); return 0; }
还是之前画圆的代码,设置描边颜色后
还可以设置描边的样式
void setlintstyle
void setlinestyle(int style,int thickness=1;const DWORD *puserstyle=NULL,DOWRD usesrstylecount=0);
稀里哗啦一大堆,我们只需要关注前两个参数即可
第一个参数style有很多种类型,可以利用操作符|来进行连接使用,使描边多样式
从线型,端点样式,连接样式里面各挑出几个不容易明白的进行说明
首先说明一下第二个参数为描边的粗细,我们可以设置粗一点更加容易观察。
int main() { initgraph(800, 600); setorigin(400, 300); setaspectratio(1, -1); setlinecolor(BLUE); //线型为实线,端点为圆弧,连接处为斜接 setlinestyle(PS_SOLID | PS_ENDCAP_ROUND | PS_JOIN_MITER, 60); POINT points[] = { {-200,200},{-100,0},{0,80},{100,0},{200,200} }; polyline(points, 5); //连接处为斜面 //setlinestyle(PS_SOLID | PS_ENDCAP_FLAT | PS_JOIN_BEVEL, 60); //POINT points[] = { {-200,200},{-100,0},{0,80},{100,0},{200,200} }; //polyline(points, 5); getchar(); closegraph(); return 0; }
线型为实线,端点为圆弧,连接为斜接,运行后如图
把第一次绘图的注释掉,把下边的解注释
填充图形
在此之前绘制的所有图形都是十分单调的,没有什么花里胡哨可言,当我们将这些图形进行颜色的填充就可以变得好玩一些。
填充函数只需要在绘制函数前加一个solid即可
solid+图形函数名
例如矩形,三角形,椭圆,只需要将circle换一下即可
绝不仅仅是白色
setfillcolor函数
void setfillcolor(COLORREF color);
设置填充颜色,然后绘制图形,代码如下
int main() { initgraph(800, 600); setorigin(400, 300); setaspectratio(1,-1); setfillcolor(BLUE); solidcircle(0, 0, 200); getchar(); closegraph(); return 0; }
运行后效果如下
如果我们想要红色的描边,红色的填充,而不是将描边颜色也改变,就要使用fill函数
fill+绘制函数的函数
改变上述代码,将solid改为fill,再次运行
设置背景颜色
setbkcolor(颜色);
将上述代码,设置背景颜色为白色,但是仅仅用这个函数是不行的,我们在创建窗体时,默认窗体已经被黑色填满
cleardevice();
将使用新的颜料粉刷一遍窗体,设置好新的背景后,就可以开始粉刷
代码如下
int main() { initgraph(800, 600); setorigin(400, 300); setaspectratio(1,-1); setbkcolor(WHITE); cleardevice(); setlinecolor(RED); setlinestyle(PS_SOLID,5); setfillcolor(BLUE); fillcircle(0, 0, 200); getchar(); closegraph(); return 0; }
运行后如下图
我们今天所学的大概就是如此啦
接下来只会更加精彩哦,欢迎大家点赞评论哇!