eg1:EASY中的颜色模型
可以参考推荐16进制颜色表: https://www.codeeeee.com/color/rgb.html
参考学习EASYX在线文档 https://docs.easyx.cn/zh-cn/drawing-func
easyx的基本概念和使用方式
cpp
#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#define PI 3.14
// 1PI = 180度 2PI = 360度
int main()
{
// 计算机使用RGB的原则,使用多种颜色混合的方式呈现出不同的颜色colorref RGB(red,green,blue);
//colorref HSVtoRGB(float H,float S,float V); H 表示色像,参数S 表示饱和度取值范围在0-1之间,参数V叫明度取值范围在0-1之间
initgraph(800, 600);
//setbkcolor(RGB(134, 172, 242));
setbkcolor(HSVtoRGB(219, 0.15, 0.95));
cleardevice();
getchar();
closegraph();
// HSV颜色模型,采用色相饱和度的方式选择使用的颜色,或者是亮度的方式
return 0;
}
使用easyx绘制彩虹的颜色
cpp
#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#define PI 3.14
// 1PI = 180度 2PI = 360度
int main()
{
// 绘制彩虹的颜色
initgraph(800, 600);
float dH = 360.0 / 600.0;
float h = 0;
for (int y = 0; y < 600; y++) {
setlinecolor(HSVtoRGB(h, 1, 1));
line(0, y, 800, y);
h += dH;
}
getchar();
closegraph();
return 0;
}
easyx绘制彩虹窗体
cpp
#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#define PI 3.14
// 1PI = 180度 2PI = 360度
int main()
{
// 绘制彩虹的颜色
initgraph(800, 600);
float s = 0.76;
float ds = s/600;
for (int y = 0; y < 600; y++) {
setlinecolor(HSVtoRGB(216, s, 0.95));
line(0, y, 800, y);
s -= ds;
}
// 定义一个变量H为色相从0开始逐渐递增变化
float h = 0;
// dh表示每份之间的色相差
float dH = 360.0 / 100;
//使用for循环从半径300开始绘制同心圆
for (int r = 300; r >= 200; r--) {
setlinecolor(HSVtoRGB(h,1,1));
// 绘制同心圆
circle(400, 600, r);
h += dH;
}
getchar();
closegraph();
return 0;
}
easyx绘制显示器
cpp
#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#define PI 3.14
// 1PI = 180度 2PI = 360度
int main()
{
// 创建窗体
initgraph(800, 600);
setbkcolor(WHITE);
cleardevice();
// 绘制圆角矩形
setfillcolor(RGB(232, 235, 240)); // setfillcolor函数设置填充颜色
solidroundrect(100, 50, 700, 450, 20, 20); // 绘制圆角矩形函数
// 绘制矩形
setfillcolor(RGB(71, 78, 94)); // 设置填充颜色
solidrectangle(100, 390, 700, 410); // 绘制对应的蓝黑色矩形
// 直接调用solidroundrect()函数绘制蓝黑色的矩形
solidroundrect(100, 50, 700, 410, 20, 20);
// 绘制天蓝色的填充颜色
setfillcolor(RGB(115, 199, 235));
solidrectangle(120, 70, 680, 390);
// 绘制圆形摄像头
setfillcolor(RGB(232, 235, 240));
solidcircle(400, 60, 5);
// 绘制电脑的开机键
setfillcolor(RGB(71, 78, 94));
solidcircle(400, 430, 12);
// 绘制椭圆形的底座
setfillcolor(RGB(218,219,224));
solidellipse(275, 515, 525, 545);
// 绘制梯形为椭圆形的底座
setfillcolor(RGB(232, 235, 240));
// POINT 类型的数组保存T型4个顶点的坐标
POINT bigTrapezoid[4] = { {345,450},{455,450},{475,530},{325,530} };
// 绘制银色的梯形支架
solidpolygon(bigTrapezoid, 4);
getchar();
// 关闭画布
closegraph();
return 0;
}
EASTX绘制组图案
cpp
#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#define PI 3.14
// 1PI = 180度 2PI = 360度
int main()
{
// 绘制一个800*800的画布
initgraph(800, 800);
// 将画布的圆心设置在画布中心的位置山
setorigin(400, 400);
// 翻转Y轴,形成直角坐标系
setaspectratio(1, -1);
// 绘制画布的背景颜色
setbkcolor(RGB(248, 248, 255));
// 清除画布的样式让画布按自己的方式呈现出来
cleardevice();
// 设置描边的样式为黑色
setlinecolor(BLACK);
// 绘制线段的样式风格和线段的粗细,设置描边为实线,粗细为10px
setlinestyle(PS_SOLID, 10);
int r = 150;
// 绘制一个圆心为0 ,0 半径为10的圆
circle(0, 0, r);
// 通过for循环依托第一个圆绘制另外的6个圆
for (int i = 0; i < 6; i++) {
int x;
int y;
// 使用三角函数计算圆心的位置
x = cos(i * PI / 3) * r;
y = sin(i * PI / 3) * r;
// 绘制圆心为(x,y)半径为r的圆
circle(x, y, r);
}
getchar();
closegraph();
return 0;
}
EASYX绘制剪切区域
cpp
/*
创建剪切区域,绘制在剪切区域内的图形会被保留,绘制在剪切区域外的图形不会被保留
目前WINDOWS GDI中提供了4个函数用于创建剪切区域
createFllipiticRgn:用于创建椭圆区域
createPolygoncRgn: 用于创建多边形区域
createRectRhn: 用于创建矩形
createRoundRectRgn: 用于创建圆角矩形
*/
剪切区域后的代码
cpp
#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#define PI 3.14
// 1PI = 180度 2PI = 360度
int main()
{
// 绘制一个800*800的画布
initgraph(800, 800);
// 将画布的圆心设置在画布中心的位置山
setorigin(400, 400);
// 翻转Y轴,形成直角坐标系
setaspectratio(1, -1);
// 绘制画布的背景颜色
setbkcolor(RGB(248, 248, 255));
// 清除画布的样式让画布按自己的方式呈现出来
cleardevice();
// 设置描边的样式为黑色
setlinecolor(BLACK);
// 绘制线段的样式风格和线段的粗细,设置描边为实线,粗细为10px
setlinestyle(PS_SOLID, 10);
int r = 150;
/*
创建剪切区域,绘制在剪切区域内的图形会被保留,绘制在剪切区域外的图形不会被保留
目前WINDOWS GDI中提供了4个函数用于创建剪切区域
createFllipiticRgn:用于创建椭圆区域
createPolygoncRgn: 用于创建多边形区域
createRectRhn: 用于创建矩形
createRoundRectRgn: 用于创建圆角矩形
*/
// 创建圆形区域
HRGN rgn = CreateEllipticRgn(250, 250, 550, 550);
// 设置剪切区域的函数setcliprgn将刚刚简历的圆形区域设置为剪切区域
setcliprgn(rgn);
// 绘制一个圆心为0 ,0 半径为10的圆
circle(0, 0, r);
// 通过for循环依托第一个圆绘制另外的6个圆
for (int i = 0; i < 6; i++) {
int x;
int y;
// 使用三角函数计算圆心的位置
x = cos(i * PI / 3) * r;
y = sin(i * PI / 3) * r;
// 绘制圆心为(x,y)半径为r的圆
circle(x, y, r);
}
// 绘制剪切区域成功后将剪切区域设置为null后面的绘制操作将不会受到剪切区域的影响
setcliprgn(NULL);
// 销毁之前创建的圆形区域
DeleteObject(rgn);
getchar();
closegraph();
return 0;
}
EASYX组合区域
cpp
/*
组合区域:组合区域函数
int CombineRgn(
HRGN hrgnDst, // 目标区域
HRGN hrgnSRC1,// 源区域1
HRGN hrgnSrc2,// 源区域2
int iMode // 区域的组合模式,作用在于让源区域1和源区域2以某种的方式进行组合得到某种新的组合方式
);
*/
剪切区域之交集
cpp
#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#define PI 3.14
// 1PI = 180度 2PI = 360度
int main()
{
// 绘制一个800*800的画布
initgraph(800, 800);
// 将画布的圆心设置在画布中心的位置山
setorigin(400, 400);
// 翻转Y轴,形成直角坐标系
setaspectratio(1, -1);
// 绘制画布的背景颜色
setbkcolor(RGB(248, 248, 255));
// 清除画布的样式让画布按自己的方式呈现出来
cleardevice();
// 设置描边的样式为黑色
setlinecolor(BLACK);
// 绘制线段的样式风格和线段的粗细,设置描边为实线,粗细为10px
setlinestyle(PS_SOLID, 10);
int r = 150;
/*
创建剪切区域,绘制在剪切区域内的图形会被保留,绘制在剪切区域外的图形不会被保留
目前WINDOWS GDI中提供了4个函数用于创建剪切区域
createFllipiticRgn:用于创建椭圆区域
createPolygoncRgn: 用于创建多边形区域
createRectRhn: 用于创建矩形
createRoundRectRgn: 用于创建圆角矩形
*/
// EASYX剪切区域的代码
HRGN rgn1 = CreateEllipticRgn(250, 250, 550, 550);
HRGN rgn2 = CreateEllipticRgn(250, 100, 550, 400);
HRGN rgn = CreateRectRgn(0, 0, 0, 0);
// 图像的组合模式为交集RGN_AND
CombineRgn(rgn, rgn1, rgn2, RGN_AND);
// 设置剪切区域的函数setcliprgn将刚刚简历的圆形区域设置为剪切区域
setcliprgn(rgn);
// 绘制一个圆心为0 ,0 半径为10的圆
circle(0, 0, r);
// 通过for循环依托第一个圆绘制另外的6个圆
for (int i = 0; i < 6; i++) {
int x;
int y;
// 使用三角函数计算圆心的位置
x = cos(i * PI / 3) * r;
y = sin(i * PI / 3) * r;
// 绘制圆心为(x,y)半径为r的圆
circle(x, y, r);
}
// 绘制剪切区域成功后将剪切区域设置为null后面的绘制操作将不会受到剪切区域的影响
setcliprgn(NULL);
// 销毁之前创建的圆形区域
DeleteObject(rgn1);
DeleteObject(rgn2);
DeleteObject(rgn);
/*
组合区域:组合区域函数
int CombineRgn(
HRGN hrgnDst, // 目标区域
HRGN hrgnSRC1,// 源区域1
HRGN hrgnSrc2,// 源区域2
int iMode // 区域的组合模式,作用在于让源区域1和源区域2以某种的方式进行组合得到某种新的组合方式
);
*/
getchar();
closegraph();
return 0;
}
组合模式之差集
组合模式之并集
并集排除交叠区域
绘制卡通熊头像
cpp
#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#define PI 3.14
// 1PI = 180度 2PI = 360度
int main()
{
initgraph(800, 600);
setbkcolor(RGB(169, 92, 10));
cleardevice();
// 绘制卡通熊的耳朵和耳朵的阴影
setfillcolor(RGB(130, 69, 4));
solidcircle(200, 130, 90);
solidcircle(600, 130, 90);
setfillcolor(RGB(255, 178, 50));
solidcircle(200, 120, 90);
solidcircle(600, 120, 90);
//绘制耳朵的高光
HRGN leftEarClip =
CreateEllipticRgn(110, 30, 290, 210);
HRGN rightEarClip =
CreateEllipticRgn(510, 30, 690, 210);
HRGN earsClip =
CreateRectRgn(0, 0, 0, 0);
CombineRgn(earsClip, leftEarClip, rightEarClip, RGN_OR);
setcliprgn(earsClip);
setfillcolor(RGB(243, 154, 2));
solidcircle(200, 130, 90);
solidcircle(600, 130, 90);
// 绘制出耳朵的形状
setfillcolor(RGB(255, 178, 50));
solidcircle(200, 210, 90);
solidcircle(600, 210, 90);
// 释放之前创建的3个区域
DeleteObject(leftEarClip);
DeleteObject(rightEarClip);
DeleteObject(earsClip);
setcliprgn(NULL);
// 绘制卡通熊的头部
setfillcolor(RGB(255, 178, 50));
solidcircle(400, 300, 250);
// 创建和设置圆形剪切区域
HRGN headClip =
CreateEllipticRgn(150, 50, 650, 550);
setcliprgn(headClip);
//绘制圆形高光
setfillcolor(RGB(243, 154, 2));
solidcircle(400, 320, 250);
// 释放前面建立的区域
DeleteObject(headClip);
setcliprgn(NULL);
// 绘制卡通熊的眼睛
setfillcolor(RGB(51, 34, 8));
solidcircle(275, 300, 25);
solidcircle(525, 300, 25);
// 绘制卡通熊的嘴巴
setfillcolor(RGB(130, 69, 4));
solidellipse(310, 385, 490, 485);
setfillcolor(WHITE);
solidellipse(310, 380, 490, 480);
// 绘制卡通熊的鼻子和胡须
setfillcolor(RGB(51, 34, 8));
solidcircle(400, 420, 15);
// 卡通熊的胡须
setlinestyle(PS_SOLID, 5);
setlinecolor(RGB(51, 34, 8));
line(400, 420, 370, 450);
line(400, 420, 430, 450);
getchar();
closegraph();
return 0;
}