视觉错觉艺术

这是网上经常见的视觉错觉艺术图片,可以用程序生成的。效果如下:

完整的源代码如下:

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

const double PI = 3.1415926536;

int main()
{ 
	// 创建绘图窗口
	initgraph(800, 560);

	// 使用青绿色填充背景
	setbkcolor(RGB(185, 230, 0));
	cleardevice();

	double b = 0;

	for(int x = 20; x < 760; x += 48, b -= PI)
	{
		for(int y = 20; y < 520; y += 48, b -= PI / 4)
		{
			setfillcolor(BLACK);							// 设置填充的颜色		
			solidellipse(x, y,  x + 39, y + 39);			// 画无边框的填充圆

			setfillcolor(WHITE);							// 设置无边框的填充扇形颜色
			solidpie(x, y, x + 39, y + 39, b + PI, b);		// 画无边框的填充扇形颜色

			setfillcolor(RGB(158, 2, 251));					// 设置填充颜色
			solidellipse(x + 3, y + 3, x + 36, y + 36);		// 画无边框的填充小圆
		}
	}

	//按任意键退出
	_getch();
	closegraph();
	return 0;
}
分享到

Comments (1) -

  • 改进了一下你的代码,这回动起来了
    /////////////////////////////////////////////////
    // 程序名称:视觉错觉艺术图
    // 编译环境:VS2010, EasyX_20200902
    // 作  者:温良
    // 最后修改:2021-1-24
    //
    #include <graphics.h>
    #include <conio.h>
    #include <windows.h>

    const double PI = 3.1415926536;

    void draw(double b)
    {
      for (int x = 20; x < 760; x += 48, b -= PI)
      {
        for (int y = 20; y < 520; y += 48, b -= PI / 4)
        {
          setfillcolor(BLACK);              // 设置填充的颜色    
          solidellipse(x, y, x + 39, y + 39);      // 画无边框的填充圆

          setfillcolor(WHITE);              // 设置无边框的填充扇形颜色
          solidpie(x, y, x + 39, y + 39, b + PI, b);    // 画无边框的填充扇形颜色

          setfillcolor(RGB(158, 2, 251));          // 设置填充颜色
          solidellipse(x + 3, y + 3, x + 36, y + 36);    // 画无边框的填充小圆
        }
      }

    }
    int main()
    {
      // 创建绘图窗口
      initgraph(800, 560);

      // 使用青绿色填充背景
      setbkcolor(RGB(185, 230, 0));
      cleardevice();
      double b = 0;
      do
      {
        b++;
        if (b >= 2 * PI)b -= 2 * PI;
        draw(b);
        Sleep(100);
      } while (!_kbhit());//按任意键退出
      
      
      closegraph();
      return 0;
    }