梦萤花火

学习交流与分享

视觉错觉艺术 铜牌收录

一、 视觉错觉效果图如下

效果图

二、思想

先画小球从左到右排放,然后再到下一行继续重复上一个过程。

三、完整代码如下

///////////////////////////////////////////////////
// 程序名称:视觉错觉艺术图
// 编译环境:VS2019, EasyX_20200902
// 作  者:梦萤花火
// 最后修改:2021-1-24
//
#include <graphics.h>
#include <conio.h>

int x;								// X轴坐标
int y;								// y轴坐标
int g_multiples = 0;				// 倍数:作用是对弧度角进行改变
float g_PI = 3.1415927;				// 圆周率
float g_radianAngle;				// 起始角的弧度


// 实施画单个完整小球的函数
void DrawCell(
	int left_x,						// 左顶点的X轴坐标
	int top_y,						// 左顶点的y轴坐标
	float PI,						// 圆周率
	float radianAngle				// 起始角的弧度
)
{
	// 设置无边框的填充圆的颜色
	setfillcolor(RGB(250, 250, 250));

	// 画无边框的填充圆。
	solidcircle(left_x + 25, top_y + 25, 20);


	// 设置无边框的填充扇形颜色
	setfillcolor(RGB(80, 80, 80));

	// 画无边框的填充扇形
	solidpie(left_x + 5, top_y + 5, left_x + 50 - 5, top_y + 50 - 5, radianAngle, radianAngle + PI);


	// 设置无边填充圆的颜色
	setfillcolor(RGB(158, 2, 251));

	// 画无边填充圆
	solidcircle(left_x + 25, top_y + 25, 15);
}


int main()
{
	// 初始化绘图窗口
	initgraph(830, 580);
	// 设置背景色
	setbkcolor(WHITE);
	// 用背景色清空屏幕
	cleardevice();
	// 设置绘图色为背景颜色:因为在确定每一个小球的位置时要画一个有边框的矩形,所以设置如果去掉会显示矩形边框
	setcolor(RGB(185, 230, 0));


	// 设置无边框的填充矩形的颜色
	setfillcolor(RGB(185, 230, 0));

	// 画外层无边框的填充矩形,限制所有小球的范围
	solidrectangle(10, 10, 820, 570);


	// 控制行数
	for (size_t j = 0; j < 11; j++)
	{
		// 控制列数
		for (size_t i = 0; i < 16; i++)
		{
			x = 15 + 50 * i,							// X轴坐标
			y = 15 + 50 * j,							// y轴坐标
			g_radianAngle = 0 + g_multiples * g_PI / 4;	// 起始角的弧度

			if (i < 15 ? g_multiples++ : g_multiples = g_multiples);


			// 画有边矩形,确定单个小球的位置
			rectangle(x, y, x + 50, y + 50);


			// 画单个小球
			DrawCell(x, y, g_PI, g_radianAngle);
		}
	}


	// 按任意键退出
	_getch();
	closegraph();
}

添加评论