错觉图片生成实验 - 动态的缪勒莱尔错觉

在C语言课程中,学生通过分组完成了一个错觉图片生成实验,实现了动态缪勒莱尔错觉。尽管学习C语言仅一个月,尚未深入学习数组和函数,但他们成功地完成了代码和PPT报告。实验分为五个步骤,从绘制线条到实现动态效果。同学们表示,这次合作不仅锻炼了解决问题的能力,也加深了他们对所学知识的理解,期待未来能创造更多优秀作品。
摘要由CSDN通过智能技术生成

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

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

这次,介绍许万亿、詹坤阳、田强、史秋实同学实现的动态缪勒莱尔错觉。由于同学们学习C语言刚一个月,还没有正式学习数组、函数等语法知识,因此代码可能不够完善。以下提供了分步骤的实现思路、代码,大家可以参考。

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

v2-f844c4a91537e301787d508b59a75d8f_b.gif

最终实现效果:


错觉原理:

v2-7a5d9abb4be82ee89842a42b06a47c33_b.jpg

第一步:绘制蓝线及红线

v2-2575c8eba56a6d615982697537f60cc0_b.jpg
#include<stdio.h>
#include<graphics.h>
#include<conio.h>
int i,j;
//函数声明;
void blueline();
void redline();
int main()
{
     
	initgraph(640,540);//制表
	setbkcolor(WHITE);//设为白色背景
	BeginBatchDraw();//开始批量绘制;
	while(1){
     
		cleardevice();		
		blueline();//引用函数
		redline();//引用函数

		FlushBatchDraw();//批量绘制
		Sleep(40);
	}
	_getch();
	closegraph();
	return 0;
}

void blueline(){
     
	float line1x=35.5,line1y=45;//蓝线参数;
	float x=line1x,y=line1y;
	int i;
	setlinestyle(PS_SOLID,3);//线宽为3
	setlinecolor(LIGHTBLUE);//颜色为蓝
	line(line1x,line1y,line1x,line1y+450);//绘蓝线

	for (i=1;i<17;i++)//循环绘出所有蓝线
	{
     
		x=x+35.5;
		line(x,y,x,y+450);
	}
}
void redline(){
     
	float line2x=35.5,line2y=135;//红线参数;
	float x=line2x, y=line2y;
	int i;
	setlinestyle(PS_SOLID,3);//线宽为3
	setlinecolor(RED);//颜色为红
	line(line2x,line2y,line2x,line2y+90);//绘上红线
	line(line2x,line2y+180,line2x,line2y+270);//绘下红线

	for (i=1;i<17;i++)//循环绘出所有红线;
	{
     
		x=x+35.5;
		line(x,y,x,y+90);
		line(x,y+180,x,y+270);
	}
}

第二步:使一根黑线运动

#include<stdio.h>
#include<graphics.h>
#include<conio.h>
//定义全局变量
int i,j;
//函数声明;
void blueline();
void redline();
int main()
{
     
	initgraph(640,540);//制表
	setbkcolor(WHITE);//设为白色背景
	BeginBatchDraw();//开始批量绘制;
	float v1=1.5;//储存黑线1的速度
	float x1=35.5,x2=18.5,y1=45,y2=35;   //黑线1参数;
	while(1){
     
		cleardevice();		
		blueline();//引用函数
		redline();//引用函数

		setlinestyle(PS_SOLID,3);
		setlinecolor(BLACK);
		line(x1,y1,x2,y2);
		line(x1,y1,x2+34,y2);
		y2=y2+v1;//实现黑线的运动
		if(y2>32+26||y2<32){
     
			v1=-v1;
		}
		FlushBatchDraw();//批量绘制
		Sleep(40);
	}
	_getch();
	closegraph();
	return 0;
}

void blueline(){
     
	float line1x=35.5,line1y=45;//蓝线参数;
	float x=line1x,y=line1y;
	int i;
	setlinestyle(PS_SOLID,3);//线宽为3
	setlinecolor(LIGHTBLUE);//颜色为蓝
	line(line1x,line1y,line1x,line1y+450);//绘蓝线

	for (i=1;i<17;i++)//循环绘出所有蓝线
	{
     
		x=x+35.5;
		line(x,y,x,y+450);
	}
}
void redline(){
     
	float line2x=35.5,line2y=135;//红线参数;
	float x=line2x, y=line2y;
	int i;
	setlinestyle(PS_SOLID,3);//线宽为3
	setlinecolor(RED);//颜色为红
	line(line2x,line2y,line2x,line2y+90);//绘上红线
	line(line2x,line2y+180
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值