前面给大家讲了常见的常规图形,接下来这个图形稍微有些复杂,但绘出的图案更加五彩缤纷~,就是画多边形的函数polygon,这个函数不仅仅可以画规则的多边形,比如五边形、六边形、八边形等等,还可以画凹多边形以及各种奇怪的多边形,你都可以用它,先看看函数原型吧:
void polygon( const POINT *points, int num );
第二个参数很简单,表示多边形的顶点个数。第一个参数呢,别慌,它表示的是各个顶点的坐标
你可能会好奇const POINT *points怎么表示多个顶点的坐标呢?原因它是一个结构体指针。我们可以找到它的定义来看看,完整定义如下:
typedef struct tagPOINT { LONG x; LONG y; } POINT, *PPOINT, NEAR *NPPOINT, FAR *LPPOINT;
是一个结构体指针,每个结构体里你可以放两个long型的x和y表示这个顶点的坐标。
比如我定义:
POINT points[] ={{100,0},{195,69},{159,181},{41,181},{5,69}};
那么pints数组里这十个数字就分别表示5个顶点的坐标。然后我们调用polygon函数,polygon函数就会按照这五点的顺序一次连线绘制。完整代码如下:
//www.dotcpp.com #include <graphics.h> // 引用图形库头文件 #include <conio.h> int main() { POINT points[] ={{100,0},{41,181},{195,69},{5,69},{159,181}}; //POINT points[] ={{100,0},{195,69},{159,181},{41,181},{5,69}}; initgraph(640, 480); // 创建绘图窗口,大小为 640x480 像素\ polygon(points,5); getch(); // 按任意键继续 closegraph(); // 关闭绘图窗口 return 0; }
注意,如果改变五个点的顺序,则会改变图形的形状,比如改为:
POINT points[] ={{100,0},{195,69},{159,181},{41,181},{5,69}};
则图案效果就变为:
等等,不是应该有填充吗?
噢对了,EasyX中图形的绘制,都有三种,一种是画线轮廓;第二种是有颜色填充有轮廓;第三种是有颜色填充没有轮廓。
以圆形为例,三种函数的命名分别为:circle、fillcircle、solidcircle。注意三个函数的命名规则
那么类似的,画多边形的三个函数也分别为polygon、fillpolygon、solidpolygon。比如前面的例子就是polygon画的,如果想加颜色,不带外面的轮廓,则可以调用solidpolygon函数,参数都不变,代码如下:
//www.dotcpp.com #include <graphics.h> // 引用图形库头文件 #include <conio.h> int main() { //POINT points[] ={{100,0},{41,181},{195,69},{5,69},{159,181}}; POINT points[] ={{100,0},{195,69},{159,181},{41,181},{5,69}}; initgraph(640, 480); // 创建绘图窗口,大小为 640x480 像素 setfillcolor(LIGHTRED); solidpolygon(points,5); getch(); // 按任意键继续 closegraph(); // 关闭绘图窗口 return 0; }
两种不同顶点顺序的效果如下:
另一种:
请大家理解polygon的用法~多多尝试
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程