(图书介绍:童晶:《C和C++游戏趣味编程》新书预告)
这学期的线下C语言课程,大一同学们学完旋转蛇案例后(童晶:第4章 旋转蛇(《C和C++游戏趣味编程》配套教学视频)),布置了一次错觉图片生成实验的PBL,给了大家5天时间分组完成代码、ppt报告。
这次,介绍曾奕杰、谷瑞、王世博、王鑫洋同学实现的平行线(黑林错觉)。由于同学们学习C语言刚一个月,还没有正式学习数组、函数等语法知识,因此代码可能不够完善。以下提供了分步骤的实现思路、代码,大家可以参考。
首先是同学们调研的目标效果:

黑林错觉又称为黑灵错觉,赫氏错觉等,这一现象在当时用于研究人眼对错觉的判断,到19世纪末曾试用于审判犯人。
原理:当人观察物体时,基于经验主义或不当的参照所形成的错误的判断和感知。
目标效果:两条平行的直线,被许多在平行线中间相交的直线分割后,看起来这两条平行线显得向外弯曲。在平行线中间相交的直线越密,两个平行线看起来会更弯。当双眼失焦再去看这两条平行线,你又会觉得他们是直的。
1 绘制两侧直线
在画面的左右侧绘制均匀的且相交的多条直线。
依靠line函数与for语句达到目的。

2 绘制上下直线
在画面的上下两方绘制出直线。
设置多组变量用以表示直线坐标,也依靠line函数与for语句实现目标。

3 绘制平行线
这一步要绘制两条产生错觉的平行线,同时设置线条参数使效果更加明显。
主要依靠EasyX函数来设置线条色彩与粗细。

4 绘制多组图形
这一步要绘制出多组相同的黑林错觉图形。
引入多个变量用以表示线条坐标,利用for语言的嵌套绘制图形,达到目的。

5 让“它”转起来
为增加图形的趣味性,添加了图形可旋转的功能。
使用多层if语句,交换直线坐标,实现图形的旋转,也让错觉效果更佳明显。
如果觉得单个图片没有效果,可以尝试长按空格,加速!

#include<stdio.h>
#include<graphics.h>
#include<conio.h>
#include<time.h>
int main()
{
initgraph(1200,800);//打开一个窗口
setbkcolor(WHITE);
cleardevice();
int i,k,j,m,n;
int x0,y0;//线的交点
int x1,y1;//左侧极限坐标
int x2,y2;//右侧极限坐标
int x3,y3;//左上方直线终点
int x4,y4;//右上方直线终点
int x5=0,y5=