前面给大家讲了常见的常规图形,接下来这个图形稍微有些复杂,但绘出的图案更加五彩缤纷~,就是画多边形的函数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;
}

五角星1


注意,如果改变五个点的顺序,则会改变图形的形状,比如改为:

POINT points[] ={{100,0},{195,69},{159,181},{41,181},{5,69}};

则图案效果就变为:

五角星2


等等,不是应该有填充吗?


噢对了,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;
}

两种不同顶点顺序的效果如下:

五角星3


另一种:

五角星4


请大家理解polygon的用法~多多尝试

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)