错觉图片生成实验 - Go forward together

本文介绍了大一学生在学习C语言一个月后进行的一次错觉图片生成实验,他们实现了名为'Go forward together'的效果,通过蓝色和黄色在黑白条纹上的移动产生交替前进的错觉。实验中,学生们用C语言分步骤绘制条纹背景、颜色不同的小方块,并让它们匀速运动。按下空格键可以切换背景条纹的显示状态,影响错觉效果。通过这次小组活动,学生们锻炼了编程技巧、逻辑思维和团队合作能力。
摘要由CSDN通过智能技术生成

(图书介绍:童晶:《C和C++游戏趣味编程》新书预告

这学期的线下C语言课程,大一同学们学完旋转蛇案例后(童晶:第4章 旋转蛇(《C和C++游戏趣味编程》配套教学视频)),布置了一次错觉图片生成实验的PBL,给了大家5天时间分组完成代码、ppt报告。

这次,介绍许林苗、赵嘉仪、徐琪、刘竺同学实现的Go forward together错觉。由于同学们学习C语言刚一个月,还没有正式学习数组、函数等语法知识,因此代码可能不够完善。以下提供了分步骤的实现思路、代码,大家可以参考。

首先是同学们调研的目标效果:

v2-f5c92a19b1a5e7762abe5e322a31af01_b.gif

最终实现效果:

大概原理:蓝色和黄色在黑白条纹上移动,蓝色和黄色分别有一半时间的移动是不易感知的,给我们带来交替前进的错觉。

目标效果:两个小方块,在黑白条纹背景下以相同速度前进,产生一前一后交替前进的错觉。按下空格键改变背景条纹有无的状态,有背景时,会有错觉,无背景时,很明显两小方块一起前进。

1 绘制条纹背景

黑、白色方块交替绘制,当奇数时绘制黑色长方形,偶数时绘制白色长方形,最后形成黑白条纹的背景。(for循环+if语句)

v2-bbb55b7eb0b65845c19a5cbac1bb35be_b.jpg
#include<stdio.h>
#include<graphics.h>
#include<conio.h>
int main()
{
     
	int height=400;//画面高度
	int width=800;//画面宽度
	initgraph(width,height);//打开一个画面
	setbkcolor(RGB(139,139,139));//设置背景颜色为灰色
	cleardevice();//以背景色清空画面

	int stripe_width=width/40;
	int stripe_num;
	for(stripe_num=1;stripe_num<=width/stripe_width;stripe_num++)
	{
     
		if(stripe_num%2==1)
		{
     
			setfillcolor(RGB(0,0,0));//设置填充颜色为黑色
			fillrectangle(stripe_width*(stripe_num-1),0,stripe_width*stripe_num,height);//绘制方块
		}
		else
		{
     
			setfillcolor(RGB(255,255,255));//设置填充颜色为白色
			fillrectangle(stripe_width*(stripe_num-1),0,stripe_width*stripe_num,height);//绘制方块
		}
	}
	_getch();
	closegraph();
	return 0;
}

2 绘制颜色不同的两个小方块

在画面左边1/3和2/3处分别绘制一个黄色和蓝色的小方块

v2-2fcc88e8a41513cc95b1537d8a4b78bc_b.jpg
#include<stdio.h>
#include<graphics.h>
#include<conio.h>
int main()
{
     
	int height=400;//画面高度
	int width=800;//画面宽度
	initgraph(width,height);//打开一个画面
	setbkcolor(RGB(139,139,139));//设置背景颜色为灰色
	cleardevice();//以背景色清空画面

	float stripe_width=width/40;//条纹宽度
	float rect_length=stripe_width*4;//移动小方块长度
	float rect_width=stripe_width*2;//移动小方块宽度
	int stripe_num;//条纹数量
	for(stripe_num=1;stripe_num<=width/stripe_width;stripe_num++)//绘制条纹背景
	{
     
		if(stripe_num%2==1)//奇数项为黑色
		{
     
			setfillcolor(RGB(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值