Dotcpp  >  编程教程  >  C语言用easy画图  >  C语言如何绘制多边形(比如五角星)?

C语言如何绘制多边形(比如五角星)?

点击打开在线编译器,边学边练

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


本文固定URL:https://www.dotcpp.com/course/1197

C语言图形编程
第一章 easyX图形编程入门
第二章 C语言用easy画图
第三章 C语言使用EasyX绘制文本
第四章 C语言使用EasyX图形处理
第五章 EasyX项目实战
Dotcpp在线编译      (登录可减少运行等待时间)