PART1:基本绘图与文字绘制
- 建立与关闭窗体以及如何让让窗体停留,修改x,y轴的轴向,重制原点(计算)
- 修改背景颜色(两步)
- 绘图->点
- 绘图->直线
- 绘图->封闭图形(圆,椭圆,矩形,圆角矩形,……,详见代码)
- 绘图->非封闭线条,由多个点相连而成
- 绘制文字
#可能需要详述的部分
1.setXcolor(通过修改X,可以修改线条颜色line,填充颜色fill,背景颜色bk)
setXstyle(通过修改X,可以修改线条样式)
setbkmode(设置背景模式,透明或不透明)
2.通过给绘制基本图形线条的函数前加一些修饰词变成新的修饰词,SOLID之类的,就可以变成填充的或者别的类型的了
3.设置颜色有两种办法
一是直接填写,颜色的英文大写,但只能用于一部分颜色
二是RGB()--->一种颜色标准,里面有三个参数,分别代表红绿蓝(每个参数的取值范围是0-255),通过修改这三个值,就会得到不同的颜色,那么怎么得到你喜欢的颜色的RGB呢?借助QQ截图,移到你想要的颜色上,点c键复制得到它的三个参数值,ctrl+v就可以了;此外,去画图里找颜色盘也是可以的。
4.如何实现文字居中
首先,要针对不同的坐标系(窗体一般弄成640*480)
对于原坐标系,首先要选择一个差不多大的框装文字要大于文字的宽和高,保证不为负,一次不行就多测试几次。
char arr[]装字符串
再由图可以算出w=textwidth(arr); h=textheight(arr);
最后outtextxy的关键就是x,y;
x=(x2-x1)/2-w/2 + x1;
y=(y2-y1)/2-h/2 + y1;
就这样就可以实现文字居中了
对于改过的坐标系(更贴近平时在数学里接触到的坐标系)
同理计算w=textwidth(arr); h=textheight(arr);
x=x1 + (x2-x1)/2-w/2;(总之这标记过的部分要保证是橙色)
y=y1 - (y1-y2)/2-h/2;
对了还有一个点:写文字的时候y轴最好不要翻转过来,因为文字会随着y轴的翻转而翻转,或者说前面改过了要记得改回来。(setaspectratio)
#include<graphics.h>
/*使用easyx需要的头文件,当然也可以用<easyx.h>,暂时没有去区分它们,两个老师教的*/
#include<stdio.h>
/*因为要看到窗体,不能让它一闪而过,得在init和close之间加一个getchar(),所以需要这个头文件*/
#include<math.h>
/*因为在画一些多边形的时候,我们需要计算一些角度来达到我们需要的效果,可能会用到sin,cos,这些函数,所以需要它*/
#define PI 3.14
/*涉及角度的计算时,很可能需要*/
/**********************************************/
/*******PART1:基本绘图与文字绘制**************/
/********************************************/
int main()
{
initgraph(640, 480, SHOWCONSOLE);
/*建立窗体,不是控制台窗口哦,它的title不是路径,而是我们的项目名称,注意不是在窗体上“画画”*/
//补充一下,(这可能是2022版vs之前需要知道的)如果我们需要用到控制台并且想要看到,就得把initgragh的第三个参数写为SHOWCONSOLE
//因为2022版创建窗体后第一步enter就会退回控制台,所以可能并不需要以上的补充,再按任意键就就结束了
setorigin(320, 240);
/*把原点设置在窗体正中央,更接近我们平时在数学中接触到的坐标系*/
//setaspectratio(1, -1);
/*这一步把y轴翻转过来了*/
//以上操作可以得到我们平时认识的坐标系,有时我们需要,但是有时也没有必要这样修改,所以要针对不同的情况去选择
setbkcolor(WHITE);
/*设置背景颜色,但没有效果*/
cleardevice();
/*清屏,要把原来的黑色清除掉才看得到效果*/
//必须要两步
//画点,在目标位置画点并定下颜色
putpixel(30, 20, BLACK);
//画线,两点确定一条直线,要额外用一个函数标记线的颜色
setlinecolor(BLACK);
line(50, 50, 100, 100);
//画图形
//1.圆
setlinestyle(PS_DASHDOT, 5);
/*设置线条样式,点DOT,还是短线DASH,还是短线+点DASHDOT*/
setlinecolor(CYAN);
/*设置线条的颜色,大写字母,记不太清的两个是CYAN青色,MAGENTA紫色,目前只会一点简单的颜色,还不会弄复杂的颜色*/
setfillcolor(GREEN);
/*设置填充颜色*/
//以上颜色的设置都是在画图之前,线样式也是如此,如果想要不同的图形边框颜色各不相同就得在各个图形画图之前设置好新的颜色或者线条央视。
circle(50, 50, 50);
/*画一个圆形线框*/
setlinecolor(BLUE);
fillcircle(-50, -50, 100);
/*画一个填充且有边框的圆*/
setlinecolor(RED);
setlinestyle(PS_DASH, 3);
setfillcolor(BROWN);
solidcircle(100, 100, 30);
/*画一个填充且没有边框的圆*/
//2.椭圆,用左上,右下两个点的坐标就可以得到,即该矩形的内接椭圆
setfillcolor(YELLOW);
solidellipse(0, 240, 320, 0);
//3.矩形,用左上,右下两个点的坐标就可以得到
setlinecolor(BROWN);
rectangle(122, 122, 300, 200);
//4.圆角矩形,理解就是把圆角矩形N等分,每一份作一个内接椭圆,用这四个椭圆的一小部分作为圆角,最后两个参数是内接椭圆的宽和高
setlinecolor(GREEN);
roundrect(100, 100, 200, 200, 50, 50);
//5.扇形,椭圆的一部分,所以先要有椭圆的四个参数,再加两个参数分别是起始角度和终止角度,因为我们在此之前已经将坐标系修改为了我们熟识的那种,所以我们可以很容易确定角度
setlinecolor(CYAN);
pie(0, 120, 160, 0, 0, PI / 3);
//6.圆弧,参数和扇形一致,只是没有两个边
setlinecolor(YELLOW);
arc(0, 60, 80, 0, 0, PI / 6);
//7.封闭多边形,比如三角形,四边形,五边形(要计算角度)等等
//ps: POINT是一个结构体类型,里边装的是x,y坐标,所以我们要构建结构体数组,数组的每个元素代表一个点,从第一个元素也就是第一个点开始连线,就构成了多边形
//先试一下三角形
POINT pt1[] = {{12,12},{60,60},{100,100}};
setlinecolor(BLACK);
polygon(pt1, 3);
//四边形同理,矩形,梯形,菱形都行,定下点的坐标就可以了,这里不举例了
//五边形难一点点,用for循环来确定每个点的坐标
POINT pt2[5];
int r = 100;
double a = 18;
double b = 72;
for (int i = 0; i < 5; i++)
{
pt2[i].x = r * cos(PI * (a + i * b) / 180);
pt2[i].y = r * sin(PI * (a + i * b) / 180);
}
setlinestyle(PS_SOLID, 3);
setlinecolor(RED);
polygon(pt2, 5);
//8.不封闭,首尾两点不相连,仅次和polygon有区别
POINT pt3[] = {{-160,120},{-80,-40},{0,120},{80,-40},{160,120}};
setlinestyle(PS_DASHDOT,10);
setlinecolor(RED);
polyline(pt3, 5);
//在窗体上绘制文字
settextcolor(RGB(0, 161, 214));
//用QQ截图,按c复制我们喜欢的色号到RGB()里,就可以得到我们想要的颜色了
//设置文本颜色
settextstyle(50, 0, "楷体");
//三个参数分别是高,宽,字体(宽为0表示自适应)
setbkmode(TRANSPARENT);
//设置背景模式,表示透明,就不会覆盖掉原来这个位置上有的图形了
outtextxy(-320, -240, "郭凤兰");
//在指定位置上写下字体,如果是字符串,需要事先(2022版)进项目->属性->配置属性->高级->把字符集改成多字节字符集,这只是一种改法
// 当然还可以不用上面的方法而用L"XXX"或者TEXT("XXX")或者__T("XXX")
//ps:如果前面翻转了y轴,字体也会反掉
setlinestyle(PS_SOLID);
setfillcolor(CYAN);
fillrectangle(-200, 50, 200, -50);
settextcolor(RGB(173, 0, 13));
char arr[] = "我是居中文字maye";
int width = -200 + (200 - (-200)) / 2 - textwidth(arr) / 2;
int height = 50 - (50 - (-50)) / 2 - textheight(arr) / 2;
outtextxy(width ,height, arr);
//通过计算就可以将文字居中了,原理的话,画图讲解吧,关键还是左上坐标的计算,对于不同的坐标系,计算方式也有所不同
//涉及到控制台,init的时候要把第三个参数写成SHOWCONSOLE
int maye = 0;
printf("%d", maye);
int aa = getchar();
/*让窗体停留一下,不要一闪而过*/
closegraph();
/*关闭窗体*/
return 0;
}