谢尔宾斯基三角形,“混沌游戏”实现 2014-10-22

请教了一下@李劲 学长用啥图形库,学长推荐了EasyX,我就试了试做这个,原物是从《混沌与分形——科学的新疆界》p24页看到的。

本来还想做的更动态一些,但是没搞清楚画出的线如何删掉,干脆就不划线了。用上下键可调速。

疑问:

①、如何有效地将程序暂停很短的时间?貌似Sleep函数只能最短暂停10ms左右。我用空循环模拟了暂停,但在VS的Release生成时就毫无效果,不知道是空循环的问题还是其他问题(我怀疑后者)。

②、TCHAR如何用itoa等函数?(有wcscpy等TCHAR类型可使用的函数)

感想:

①复杂性科学好好玩,我想好好学数学-_-

②我想赶紧把c prime plus看完…最近都在干啥…

说到数学,我想感谢@吴军博士 的书 @贺利坚老师 的书,让我这智商拙计的人在痛苦学数学的道路上多了几分决绝- -

#include <stdio.h>
#include <time.h>
#include <graphics.h>
#include <conio.h>
#include <string.h>

#define TIMES 200000	  //画点的次数
#define SPEED 2000000      //初始速度(数值越大画得越慢,空循环次数)

POINT pts_tri[3] = { {-200,0} , {200,0} , {0,350} }; //画布顶点
int x, y; //坐标
int dir; //方向键

//画三角形边框
void draw_flame()
{
	polygon(pts_tri, 3);
}

void draw()
{
	switch ( (rand() % 3) + 1 )
	{
	case 1 :
		putpixel((getx() + (-200)) / 2 , gety() / 2 , GREEN);
		x = (getx() + (-200)) / 2;
		y = gety() / 2;
		moveto(x, y);
		break;
	case 2 :
		putpixel((getx() + 200) / 2 , gety() / 2 , GREEN);
		x = (getx() + 200) / 2;
		y = gety() / 2;
		moveto(x, y);
		break;
	case 3 :
		putpixel(getx() / 2, (gety() + 350) / 2 , GREEN);
		x = getx() / 2;
		y = (gety() + 350) / 2;
		moveto(x, y);
		break;
	}
}

int recieve_direction(int speed)
{
    dir = getch();
    if (-32 == dir)
        dir = getch();

	//up 加速
	if (72 == dir)
	{
		speed -= 999999;
		if ((speed - 999999) <= 0)
		{
			speed = 0;
			return speed;
		}
		return speed;
	}

	//down 减速
    if (80 == dir)
		speed += 999999;
    return speed;
}

//itoa不能处理TCHAR,outtextxy又只能用TCHAR-_-
void print_text(int speed, TCHAR* text_1)
{
	settextcolor(WHITE);
	outtextxy(-180, 320, text_1);

	/*
	TCHAR text_speed[10] = {0};
	_itoa(speed, text_speed, 10);
	wcscpy(text_speed, speed);
	outtextxy(-180, 300, text_speed);
	*/
}

int main()
{
	int speed = SPEED; //速度

	srand((unsigned)time(NULL));

	initgraph(640, 480);	//画布
	setorigin(320, 400);	//坐标原点
	setaspectratio(1, -1);	//坐标轴正向

	draw_flame(); //画边框

	moveto(0, 0); //初始点,尚无随机效果

	TCHAR text_1[] = _T("↓ +   ↑ -"); //坐标轴已经上下反过来了怎么办-_-

	for (int i = 0; i < TIMES; i++)
	{
		draw();
		print_text(speed, text_1); //显示速度

		//检测上下按键,改变速度
		while (kbhit())
		{
			speed = recieve_direction(speed);
		} 

		//调速
		for (int j = 0; j < speed; j++)
			;
	}

	getchar();
	return 0;
}
时间: 2024-07-28 12:45:24

谢尔宾斯基三角形,“混沌游戏”实现 2014-10-22的相关文章

混沌分形之谢尔宾斯基(Sierpinski)

本文以使用混沌方法生成若干种谢尔宾斯基相关的分形图形. (1)谢尔宾斯基三角形 给三角形的3个顶点,和一个当前点,然后以以下的方式进行迭代处理: a.随机选择三角形的某一个顶点,计算出它与当前点的中点位置: b.将计算出的中点做为当前点,再重新执行操作a 相关代码如下: class SierpinskiTriangle : public FractalEquation { public: SierpinskiTriangle() { m_StartX = 0.0f; m_StartY = 0.0

分形之谢尔宾斯基(Sierpinski)三角形

谢尔宾斯基三角形(英语:Sierpinski triangle)是一种分形,由波兰数学家谢尔宾斯基在1915年提出,它是一种典型的自相似集.也有的资料将其称之为谢尔宾斯基坟垛. 其生成过程为: 取一个实心的三角形.(多数使用等边三角形) 沿三边中点的连线,将它分成四个小三角形. 去掉中间的那一个小三角形. 对其余三个小三角形重复1. 核心代码: static void SierpinskiTriangle(const Vector3& v1, const Vector3& v2, cons

分形--谢尔宾斯基地毯

谢尔宾斯基地毯的构造与谢尔宾斯基三角形相似,区别仅在于谢尔宾斯基地毯是以正方形而非等边三角形为基础的.将一个实心正方形划分为的9个小正方形,去掉中间的小正方形,再对余下的小正方形重复这一操作便能得到谢尔宾斯基地毯. js实现思路和我之前写的分形--谢尔宾斯基三角形的类似. js效果: 贴关键代码: 1.画点 function point(x,y){ this.x = x; this.y = y; } 2.画线 function drawLine (ctx,point1,point2) { ctx

分形之谢尔宾斯基(Sierpinski)地毯

前面讲了谢尔宾斯基三角形,和这一节的将把三角形变为正方形,即谢尔宾斯基地毯,它是由瓦茨瓦夫·谢尔宾斯基于1916年提出的一种分形,是自相似集的一种. 谢尔宾斯基地毯的构造与谢尔宾斯基三角形相似,区别仅在于谢尔宾斯基地毯是以正方形而非等边三角形为基础的.将一个实心正方形划分为的9个小正方形,去掉中间的小正方形,再对余下的小正方形重复这一操作便能得到谢尔宾斯基地毯.如下图:       核心代码: static void SierpinskiCarpet(const Vector3& v, Vect

分形之谢尔宾斯基(Sierpinski)四面体

前面讲了谢尔宾斯基三角形,这一节的将对二维三角形扩展到三维,变成四面体.即将一个正四面体不停地拆分,每个正四面体可以拆分成四个小号的正四面体.由二维转变到三维实现起来麻烦了许多.三维的谢尔宾斯基四面体看上去比谢尔宾斯基三角形更像坟冢. 核心代码: static void SierpinskiTetrahedron(const Vector3* pSrc, Vector3* pDest) { Vector3 v01 = (pSrc[0] + pSrc[1])*0.5f; Vector3 v02 =

谢宾斯基三角形的几种生成方法

简介 谢宾斯基三角形(Sierpinski triangle)是一种分形,由波兰数学家谢宾斯基在1915年提出.它是一种自相似集. 几种生成方法 方法一:去掉中心 取一个实心的三角形(多数用等边三角形) 连接三边中点,将它们分成4个小三角形 将正中间的三角形挖空 对其余三个小三角形重复操作1 取一个正方形或其它图形开始,用类似的方法,形状也和谢宾斯基三角形相似,例如: 取一个实心正方形 将它分成3个“品”字形的小正方形 将其余部分“挖空” 重复步骤1 方法二:Chaos Game 任取平面上三点

苹果iOS手机暗藏间谍软件的揭秘者:扎徳尔斯基

大家知道,苹果iOS手机的短消息服务器(SMS)是用硬件加密的,看起来很安全.但是,Jonathan Zdziarski发现苹果公司有意地放进去一个"文件转发服务器"(file-relay),可以避开SMS的硬件保护机制,留给自己使用. 苹果公司并不否认这个事实,但是,强调这种避开硬件保护的系统设计是为了系统"诊断"使用.可是,实际情况不是这样的. 扎德尔发现,这个所谓的"诊断程序"可以采用无线方式激活,也就是说,在用户完全不知情的情况下,比如,

驳斥苹果“诊断后门论”,声援扎德尔斯基

近日,围绕苹果iOS手机存在系统后门事件,国际上对立两派激战不断升级,从扎德尔斯基个人网站上可见一斑. 反观我们国内,动静不大,深度不够.此刻,我们必须明确表态,批判苹果的"诊断后门论",声援扎德尔斯基!苹果iOS手机存在"后门",事关用户的个人信息安全,也关乎国家的信息安全.对此,我们必须明确表明立场! 我们声援扎德尔斯基的最好办法就是把苹果iOS手机存在后门的事实真相彻底搞清处,把苹果钉在耻辱柱上.中国人现在已经不是东亚病夫可以任人宰割. 说明:我正在收集相关材

《戴尔&#183;卡耐基传记》--[美]戴尔&#183;卡耐基

<戴尔·卡耐基传记>,[美]戴尔·卡耐基 下面是我的书摘: * 而这时卡耐基在写一本书.这本书名字叫做<林肯外传>.他在构思这本书的时候一方面是处于对林肯的崇拜,一方面是因为厌恶家中的一切.他发觉,林肯的家庭生活和他的家庭生活竟有如此的相似之处,虽然写的是林肯,但他觉得这完全是在写他的自传. * 1944年的一个春天的黄昏,在纽约河畔的一片小树林边,卡耐基和桃乐丝并肩坐在树下.他们的心情都非常快乐,在一起享受着爱的甜蜜. 圣经上说,上帝把人分成了两半,一半是男人,一半是女人,让这两