easyX下载和绘制简单基本图形

文章介绍了如何利用EasyX库在VisualStudio环境下进行图形绘制,包括设置坐标原点、绘制圆形、椭圆、直线、多边形等基本图形,并提供了相应的代码示例。
摘要由CSDN通过智能技术生成

先去easyX官网easyx.cn下载 

 之后将下载好的easyX与电脑上的Visual版本绑定

 新建控制台项目

绘制圆形:

#include<easyx.h>//包含了绘制图形的各类函数
#include<stdio.h>

int main()
{
    initgraph(800, 600);//创建绘图窗体 
    circle(0, 0, 300);//circle(x坐标,y坐标,半径)
    getchar();//暂时阻塞程序,等待用户按键再关闭
   
    closegraph();//关闭绘图窗体
    return 0;
}

 

 画出这个四分之一圆的原因是因为,easyX的物理坐标和逻辑坐标原点都默认在左上角顶点,且x轴向右,y轴向下。如果想将圆画在界面的中心,那我们则需要将逻辑坐标原点更改到界面的中心,对于这个界面来说它的中心坐标为(400,300)

我们使用setorigin这个函数设置坐标原点。

#include<easyx.h>
#include<stdio.h>

int main()
{
    initgraph(800, 600);//创建绘图窗体 
    setorigin(400, 300);//以物理坐标为基准,设置逻辑坐标
    setaspectratio(1,-1);//setaspectratio(x轴缩放因子,y轴缩放因子) 缩放因子为负数时,实现坐标轴翻转
    circle(0, 0, 300);//circle(x,y,半径)
    getchar();//暂时阻塞程序,等待用户按键再关闭
   
    closegraph();//关闭绘图窗体
    return 0;
}

 同心圆:

#include<easyx.h>
#include<stdio.h>

int main()
{
    initgraph(800, 600);//创建绘图窗体 
    setorigin(400, 300);//以物理坐标为基准,设置逻辑坐标
    setaspectratio(1, -1);
    //同心圆
    for (int r = 10; r <= 300; r += 10)
    {
        circle(0, 0, r);
    }
    getchar();//暂时阻塞程序,等待用户按键再关闭
    closegraph();//关闭绘图窗体
    return 0;
}

 椭圆:

ellipse(椭圆外切矩形左上角的x坐标,椭圆外切矩形左上角的y坐标,椭圆外切矩形右下角的x坐标,椭圆外切矩形右下角的y坐标)

绘制点:

随机绘制1000个小红点

#include<easyx.h>
#include<stdio.h>

int main()
{
    initgraph(800, 600);//创建绘图窗体 
    setorigin(400, 300);//以物理坐标为基准,设置逻辑坐标
    setaspectratio(1, -1);
    int x, y;
    for (int i = 0; i < 1000; i++)
    {
        x = rand() % (800 + 1) - 400;//随机生成一个数对801取余,值在0-800之间,减去400,值在-400-400之间
        y = rand() % (600 + 1) - 300;
        putpixel(x, y, RED);//putpixel(x坐标, y坐标, 颜色)
    }

    getchar();//暂时阻塞程序,等待用户按键再关闭

    closegraph();//关闭绘图窗体
    return 0;
}

 绘制直线:

#include<easyx.h>
#include<stdio.h>

int main()
{
    initgraph(800, 600);//创建绘图窗体 
    setorigin(400, 300);//以物理坐标为基准,设置逻辑坐标
    setaspectratio(1, -1);
    line(-200, -200, 200, 200);// line(起始点x坐标, 起始点y坐标, 终止点x坐标, 终止点y坐标)
    line(-200, 200, 200, -200);
    getchar();//暂时阻塞程序,等待用户按键再关闭

    closegraph();//关闭绘图窗体
    return 0;
}

 圆角矩形:

rectangle(矩形左上角x坐标,矩形左上角y坐标 ,矩形右下角x坐标,矩形右下角y坐标);//这个是矩形的就不演示了

#include<easyx.h>
#include<stdio.h>

int main()
{
    initgraph(800, 600);//创建绘图窗体 
    setorigin(400, 300);//以物理坐标为基准,设置逻辑坐标
    setaspectratio(1, -1);
    //rectangle(矩形左上角x坐标,矩形左上角y坐标 ,矩形右下角x坐标,矩形右下角y坐标)
    //rectangle(-200, 100, 200, -100);
    //圆角矩形 roundrect(圆角矩形左上角x坐标,圆角矩形左上角y坐标,圆角矩形右下角x坐标,圆角矩形右下角y坐标,构成圆角矩形的圆角的椭圆的宽度,构成圆角矩形的圆角的椭圆的高度)
    roundrect(-200, 100, 200, -100, 200, 100);
    getchar();//暂时阻塞程序,等待用户按键再关闭
    closegraph();//关闭绘图窗体
    return 0;
}

 

 扇形和圆弧:

pie(椭圆外切矩形左上角x坐标,椭圆外切矩形左上角y坐标,椭圆外切矩形右下角x坐标,椭圆外切矩形右下角y坐标,扇形起始角弧度,扇形终止角弧度);
//圆弧  
arc(椭圆外切矩形左上角x坐标,椭圆外切矩形左上角y坐标,椭圆外切矩形右下角x坐标,椭圆外切矩形右下角y坐标,扇形起始角弧度,扇形终止角弧度)

#include<easyx.h>
#include<stdio.h>
#define PI 3.14
int main()
{
    initgraph(800, 600);//创建绘图窗体 
    setorigin(400, 300);//以物理坐标为基准,设置逻辑坐标
    setaspectratio(1, -1);
    pie(-200, 100, 299, -100, 0, PI / 4);
    arc(-200, 100, 299, -100, PI/2, PI );
    getchar();//暂时阻塞程序,等待用户按键再关闭
    closegraph();//关闭绘图窗体
    return 0;
}

 

多边形用到函数polygon

void polygon(
	const POINT *points,
	int num
);
/*
points
每个点的坐标,数组元素个数为 num。
该函数会自动连接多边形首尾。

num
多边形顶点的个数。*/

三角形:

#include<easyx.h>
#include<stdio.h>

int main()
{
    initgraph(800, 600);//创建绘图窗体 
    setorigin(400, 300);//以物理坐标为基准,设置逻辑坐标
    setaspectratio(1, -1);
    
    //多边形绘制
    POINT points[] = { {0,200},{200,-200},{-200,-200} };
    polygon(points, 3);
    getchar();//暂时阻塞程序,等待用户按键再关闭

    closegraph();//关闭绘图窗体
    return 0;
}

 正五边形:

#include<easyx.h>
#include<stdio.h>
#include<math.h>
#define PI 3.14
int main()
{
    initgraph(800, 600);//创建绘图窗体 
    setorigin(400, 300);//以物理坐标为基准,设置逻辑坐标
    setaspectratio(1, -1);
    

    double theta = PI / 2;//变量theta的初始角度为90°
    double delta = 2 * PI / 5;//因为是正五边形,每次增加PI/5
    int r = 200;
    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;
}

polyline这个函数用于画连续的多条线段。(不封闭图形)

void polyline(
	const POINT *points,
	int num
);

#include<easyx.h>
#include<stdio.h>
#include<math.h>
#define PI 3.14
int main()
{
    initgraph(800, 600);//创建绘图窗体 
    setorigin(400, 300);//以物理坐标为基准,设置逻辑坐标
    setaspectratio(1, -1);
    
    double theta = PI / 2;//变量theta的初始角度为90°
    double delta = 2 * PI / 5;//因为是正五边形,每次增加PI/5
    int r = 200;
    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;

    }
    polyline(points, 5);
    getchar();//暂时阻塞程序,等待用户按键再关闭

    closegraph();//关闭绘图窗体
    return 0;
}

/****************************************************** * EasyX Library for C++ (Ver:20151015(beta)) * http://www.easyx.cn * * graphics.h * 基于 EasyX.h,实现在 VC 下实现简单绘图。 * 同时,为了兼容 Turbo C/C++ 和 Borland C/C++ 等一系 * 列开发环境中的 BGI 绘图库函数,做了相应扩展。 ******************************************************/ #pragma once #include <easyx.h> // 兼容 initgraph 绘图模式的宏定义(无实际意义) #define DETECT 0 #define VGA 0 #define VGALO 0 #define VGAMED 0 #define VGAHI 0 #define CGA 0 #define CGAC0 0 #define CGAC1 0 #define CGAC2 0 #define CGAC3 0 #define CGAHI 0 #define EGA 0 #define EGALO 0 #define EGAHI 0 // BGI 格式的初始化图形设备,默认 640 x 480 HWND initgraph(int* gdriver, int* gmode, char* path); void bar(int left, int top, int right, int bottom); // 画无边框填充矩形 void bar3d(int left, int top, int right, int bottom, int depth, bool topflag); // 画有边框三维填充矩形 void drawpoly(int numpoints, const int *polypoints); // 画多边形 void fillpoly(int numpoints, const int *polypoints); // 画填充的多边形 int getmaxx(); // 获取最大的宽度值 int getmaxy(); // 获取最大的高度值 COLORREF getcolor(); // 获取当前绘图前景色 void setcolor(COLORREF color); // 设置当前绘图前景色 void setwritemode(int mode); // 设置前景的二元光栅操作模式 /////////////////////////////////////////////////////////////////////////////////// // 以下函数仅为兼容早期 EasyX 的接口,不建议使用。请使用相关新函数替换。 // #if _MSC_VER > 1200 #define _EASYX_DEPRECATE(_NewFunc) __declspec(deprecated("This function is deprecated. Instead, use this new function: " #_NewFunc ". See http://www.easyx.cn/help?" #_NewFunc " for details.")) #define _EASYX_DEPRECATE_OVERLOAD(_Func) __declspec(deprecated("This overload is deprecated. See http://www.easyx.cn/help?" #_Func " for details.")) #else #define _EASYX_DEPRECATE(_NewFunc) #define _EASYX_DEPRECATE_OVERLOAD(_Func) #endif // 设置当前字体样式(该函数已不再使用,请使用 settextstyle 代替) // nHeight: 字符的平均高度; // nWidth: 字符的平均宽度(0 表示自适应); // lpszFace: 字体名称; // nEscapement: 字符串的书写角度(单位 0.1 度); // nOrientation: 每个字符的书写角度(单位 0.1 度); // nWeight: 字符的笔画粗细(0 表示默认粗细); // bItalic: 是否斜体; // bUnderline: 是否下划线; // bStrikeOut: 是否删除线; // fbCharSet: 指定字符集; // fbOutPrecision: 指定文字的输出精度; // fbClipPrecision: 指定文字的剪辑精度; // fbQuality: 指定文字的输出质量; // fbPitchAndFamily: 指定以常规方式描述字体的字体系列。 _EASYX_DEPRECATE(settextstyle) void setfont(int nHeight, int nWidth, LPCTSTR lpszFace); _EASYX_DEPRECATE(settextstyle) void setfont(int nHeight, int nWidth, LPCTSTR lpszFace, int nEscapement, int nOrientation, int nWeight, bool bItalic, bool bUnderline, bool bStrikeOut); _EASYX_DEPRECATE(settextstyle) void setfont(int nHeight, int nWidth, LPCTSTR lpszFace, int nEscapement, int nOrientation, int nWeight, bool bItalic, bool bUnderline, bool bStrikeOut, BYTE fbCharSet, BYTE fbOutPrecision, BYTE fbClipPrecision, BYTE fbQuality, BYTE fbPitchAndFamily); _EASYX_DEPRECATE(settextstyle) void setfont(const LOGFONT *font); // 设置当前字体样式 _EASYX_DEPRECATE(gettextstyle) void getfont(LOGFONT *font); // 获取当前字体样式 // 以下填充样式不再使用,新的填充样式请参见帮助文件 #define NULL_FILL BS_NULL #define EMPTY_FILL BS_NULL #define SOLID_FILL BS_SOLID // 普通一组 #define BDIAGONAL_FILL BS_HATCHED, HS_BDIAGONAL // /// 填充 (对应 BGI 的 LTSLASH_FILL) #define CROSS_FILL BS_HATCHED, HS_CROSS // +++ 填充 #define DIAGCROSS_FILL BS_HATCHED, HS_DIAGCROSS // xxx 填充 (heavy cross hatch fill) (对应 BGI 的 XHTACH_FILL) #define DOT_FILL (BYTE*)"\x80\x00\x08\x00\x80\x00\x08\x00" // xxx 填充 (对应 BGI 的 WIDE_DOT_FILL) #define FDIAGONAL_FILL BS_HATCHED, HS_FDIAGONAL // \\\ 填充 #define HORIZONTAL_FILL BS_HATCHED, HS_HORIZONTAL // === 填充 #define VERTICAL_FILL BS_HATCHED, HS_VERTICAL // ||| 填充 // 密集一组 #define BDIAGONAL2_FILL (BYTE*)"\x44\x88\x11\x22\x44\x88\x11\x22" #define CROSS2_FILL (BYTE*)"\xff\x11\x11\x11\xff\x11\x11\x11" // (对应 BGI 的 fill HATCH_FILL) #define DIAGCROSS2_FILL (BYTE*)"\x55\x88\x55\x22\x55\x88\x55\x22" #define DOT2_FILL (BYTE*)"\x88\x00\x22\x00\x88\x00\x22\x00" // (对应 BGI 的 CLOSE_DOT_FILL) #define FDIAGONAL2_FILL (BYTE*)"\x22\x11\x88\x44\x22\x11\x88\x44" #define HORIZONTAL2_FILL (BYTE*)"\x00\x00\xff\x00\x00\x00\xff\x00" #define VERTICAL2_FILL (BYTE*)"\x11\x11\x11\x11\x11\x11\x11\x11" // 粗线一组 #define BDIAGONAL3_FILL (BYTE*)"\xe0\xc1\x83\x07\x0e\x1c\x38\x70" // (对应 BGI 的 SLASH_FILL) #define CROSS3_FILL (BYTE*)"\x30\x30\x30\x30\x30\x30\xff\xff" #define DIAGCROSS3_FILL (BYTE*)"\xc7\x83\xc7\xee\x7c\x38\x7c\xee" #define DOT3_FILL (BYTE*)"\xc0\xc0\x0c\x0c\xc0\xc0\x0c\x0c" #define FDIAGONAL3_FILL (BYTE*)"\x07\x83\xc1\xe0\x70\x38\x1c\x0e" #define HORIZONTAL3_FILL (BYTE*)"\xff\xff\x00\x00\xff\xff\x00\x00" // (对应 BGI 的 LINE_FILL) #define VERTICAL3_FILL (BYTE*)"\x33\x33\x33\x33\x33\x33\x33\x33" // 其它 #define INTERLEAVE_FILL (BYTE*)"\xcc\x33\xcc\x33\xcc\x33\xcc\x33" // (对应 BGI 的 INTERLEAVE_FILL)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小梁今天敲代码了吗

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

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

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

打赏作者

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

抵扣说明:

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

余额充值