科学项目

立方体!

总之,这个项目非常成功并且能够解决子集要魔方。最少的移动应用程序需要运行39;然而,在另一方面,它花了一百零九移动返回数据集的位置来解决。平均而言,花了大约八十一来解决。

类型

计算机科学

年级

9日

困难的项目

困难,需要编程经验

成本

139美元

安全问题

没有安全问题

时间来完成这个项目

1个月:

  • 编程:150小时
  • 板:2小时
  • 书面报告5个小时

客观的

这个项目的目的是创建一个3 d魔方模拟器在c++和OpenGL。程序应该能够争夺多维数据集,并允许用户一个有效位置和计算机生成一个动作列表需要解决它。

材料

电脑,Windows操作系统,微软Visual Studio 2010中,c++, OpenGL材料是现成的。该软件从电脑商店购买。

介绍

魔方,匈牙利发明家发明的厄尔诺鲁比克1974年,现在是世界上最伟大的游戏之一。他的父亲是飞机工程师,母亲是一位诗人,魔方本来学习雕塑,然后回到学校学习建筑。在他毕业后,他留在大学,应用艺术与设计学院,室内设计教育。在多年的教学中,他提出了一个挑战,他试图立方体能够没有分崩离析。在第一次尝试有26个立方体组成大立方体使用松紧带不允许方块移动。然后他想到了立方体持有自己的一种方式。他这样做的方式是通过一个基础核心,中心的螺丝在每个允许的脸。边缘的小立方体小挤压矩形块适合核心和2之间的中心。底部的角落有一块立方角符合两个边缘之间的碎片。这种设计使难题能够机动。 Once Rubik built the cube, he added stickers of different colors on each of the sides. As he did several moves he said:

“这是美妙的,看看,转了几转后,颜色变得复杂,显然以随机的方式。这是非常令人满意的看这个颜色游行。后一次愉快的步行,当你看到许多美丽的风景你决定回家,一段时间后,我决定是时候回家了,让我们把多维数据集。在那一刻,我面对的一大挑战:回家的路上是什么?”- Erno Rubik

花费无数个小时的难题后,他提出了一些算法,将只有特定的碎片。在一个月的时间内,他能够解决多维数据集。

1975年,他申请了匈牙利专利难题;到了1977年,他的专利被批准。在同一时间,两人试着申请专利申请类似的难题。这些设计是基于之一被磁铁在一起。这种机制非常广泛被很多公司包括理想的玩具公司。理想后来买了厄尔诺魔方的专利。

魔方出现后,许多人捡起一块,想出了方法如何解决它。现在人们在很多不同的比赛竞争,如速度、一把,蒙上眼睛,等。很快公司开始创建游戏,使用不同的机制和碎片,他们创建一个立方体,更好和偷工减料,进而使得一个平滑的立方体少锁ups。该功能有助于速度制粒机有较低的时间和更舒适的感觉在他们的手中。最著名的公司之一,设计一个主要的3 x3 V-Cubes。他们所使用的机制有角块扩展深入核心允许平滑转切削和更好的角落。人超过3 x3之后,他们想要一个更困难的挑战,人们开始设计立方体,在不同的轴旋转,例如,标准3 x3将表面上虽然一个立方体像恐龙多维数据集,这取决于它的角落。其他设计不同形状的拼图如八面体和十二面体的拼图。每个拼图带来不同的挑战,人们会花时间算法,将某些碎片。有了扭曲的无数的谜题人总是一个挑战让他们认为更多的逻辑,提出问题的解决方案。

算法是一组特定的动作需要做一定的任务。解决任何类型的弯弯曲曲的难题时,使用一个算法。在编程算法也很有用,在机器人技术。当编程使用多种算法来完成特定的任务。机器人,你必须有机器人做某些事情来完成一个任务。算法也用于日常思维当使用逻辑。

电脑是一个神奇的发明。第一台计算机是比房子很快就演变成我们今天的小型笔记本电脑。第一台计算机使用穿孔卡片来识别你按下的按钮。电脑没有LCD或LED屏幕,他们将使用其他诸如坏屏幕分辨率,使用像素显示你写还是什么。随着计算机的发展,他们开始改变电子驱动电脑和他们有液晶显示屏和其他高分辨率屏幕。在19世纪第一个计算机被称为Zuse Z3和建于德国。这台电脑是第一个使用二进制数字系统。随着电脑增长他们开始使用微处理器是Minatare设备充满了真空管。计算机技术的主要进步是显卡和内存。随着技术的先进的计算机能够在更少的空间举行更多的内存和硬盘可以有更多的空间来保存文件。 Soon many companies like NVIDIA started making super high quality graphic chips, they began to sell the chips to companies like Apple and Microsoft. As the computers technology increased so did its price. Though the price was high many programmers and avid gamers felt that it was worth the price. This helped many gamers play to the extreme and programmers to make amazing applications, games, and many other things. As the computers evolved so did the space engineering’s and space craft’s. When the Internet was established this kept many people to do research and to publish their discoveries wirelessly.

不同的公司推出了不同的计算机,它需要一个操作系统来运行。操作系统是一管理计算机硬件资源的软件。当用户运行一个应用程序,它从用户的操作系统,硬件,然后反过来。内存分配函数的处理硬件,操作系统作为一个跨学科的应用程序与用户的计算机硬件。现在的三个最常用的操作系统Windows, Mac OS X和Linux。

1950年初的一台电脑只能执行一个程序。例如,执行一个简单的计算器,一个需要的地方与孔卡,包含应用程序的数据。它将继续运行,直到应用程序崩溃,或完成任务。

不久之后,操作系统,如ms - dos出来,允许用户进行基本的功能。Microsoft Windows出来之后,允许为ms - dos的更高级版本。它允许多任务和能够运行在x86和amd64架构。开始,所有新版本的Windows XP使用Windows NT内核。

包括其他替代Windows系统,基于UNIX的系统上运行。Linux和Mac是最常见的基于UNIX的操作系统。Linux是通用名称的类unix操作系统,可用于各种设备从超级计算机到手表。Linux内核是一个开源许可下发布的,所以任何人都可以阅读和修改其代码。它已经被修改运行在各种各样的电子产品。虽然估计只是用在0.5 - 2%的个人电脑,它已被广泛采用在服务器和嵌入式系统中使用。Linux已经取代了Unix在大多数地方,是世界上十大最强大的超级计算机上使用。GNU项目的大规模协作的程序员寻求创建一个完全自由和开放的类似于Unix操作系统,但与完全原始代码。Linux经常被称为GNU / Linux。成千上万的几乎每一个操作系统的软件许可证在GNU通用公共许可证。 Programmers from GNU took notice, and members of both projects worked to integrate the finished GNU parts into the Linux kernel in order to create a full-fledged operating system.

Mac OS X也像LINUX,基于UNIX。它允许人们使用所有UNIX函数不同的接口。Mac OS X线的部分专有图形操作系统开发,销售,销售的苹果(aapl . o:行情),最近一次是预装在所有目前航运Macintosh电脑。Mac OS X是接替原来的Mac OS,已自1984年以来,苹果的主要操作系统。

一旦编程语言介绍给全世界,许多公司和人开始使用程序的机器人。最常见的编程语言是Java。从c++语言进化而来的,它是由Sun Microsystems James Gosling谁赢了比赛。比赛是一种编程语言,每个电脑上不需要重新编译。它被命名为“Java”从随机的选择的话。高斯林试图使它类似于c++和c#,因为它会更容易为c++和c#学习Java程序员。

Java编程语言使用一个虚拟机,就像以前的编程语言。Java语言有许多不同版本包括Java标准版和Java运行时环境与c++和其他编程语言。

使用Java编程语言可以使很多事情;你可以在电脑上运行的应用程序,不能放在一个互联网网站和您可以创建applet程序不同,可以发布在一个HTML文档。许多程序员使用Java虚拟机(JVM)和编译和执行程序里面其他人使用记事本和保存文件*。java文件。然后打开命令提示符并编译程序并运行它。

的主要区别c++, c#, C和Java语言Java之前你必须重新编译程序的每台电脑上使用它;这是一个大问题导致更少的应用无处不在。一旦Java来改善很多东西包括applet在网站和帮助人们创建网站,把游戏在网站上。编程已经开始许多年前,在1700年的一些软件的编码打开和关闭开关。之后,在1800年的提花机,它的工作原理是使用穿孔卡片生成自动设计。1940台电脑,今天将被创建之后,他们电能,可以运行编译代码。在此期间计算机编程语言。第一编程语言是“Plankalkul”这种语言很容易出错,没有实现到1950年。后不久,许多其他的编程语言,其中包括基本和BCPL, C的前身。

几年后,C是创建并广泛使用。C震动了计算机世界;它的影响是如此之大,它改变了人们思考的方式编程和思考。Dennis Ritchie和Ken Thompson创建C来满足需要一个结构化的、高效、高级语言可以取代汇编代码在创建系统项目。面临的一些问题,他们是易于使用和电力、安全与效率、刚性和可扩展性。C之前,程序员必须选择优化的编码和语言之间的更强大。例如FORTRAN可以用于代码相当高效的代码,但另一方面是系统代码不是很好。这是许多其他语言如基本相同。一旦C出现之前成功地合成了冲突的属性,包括语言。在1989 C被正式采用美国国家标准协会(ANSI),这标志着现代编程的开始。 C quickly was adopted by many programmers and very rapidly updated to be used for a multiple amount of targets through different compilers. All in all, C was a language by programmers for programmers.

计算机软件世界的下一步是c++。这需要一个新的和改进的编程语言是源于这一事实是非常复杂的管理代码一旦他们达到一定长度。c++带来了一个新主意一个已经成熟的语言;这个想法是面向对象编程(OOP)。OOP对象实例时,可以保存数据。这有助于管理代码,因为数据和方法都是在一个地方。

c++是一种面向对象的编程语言。c++是一种静态类型,形式自由,多维,编译,通用的编程语言。c++是一个高水平和低水平的编程语言,因为它包含了部分。Bjarne Stoustrup开发在1979年在美国电话电报公司的贝尔实验室。它开始作为增强C, C类。后来在1983年,它被重新命名为c++。

c++是一种最常用的编程语言在当今世界。用于应用程序域包括系统软件、应用软件、设备驱动程序、嵌入式软件、高性能服务器和客户端应用程序,视频游戏等娱乐软件。

c++需要在1970年代和1980年代帮助管理更复杂的代码。在C语言中这是非常困难的因为没有对象和更复杂的功能。c++上升到最高级别的语言的场合。例如,当电脑第一次出来是手工编程与二进制开关,然后汇编程序,允许更复杂的应用程序。当语言变得更多的上级,他们允许更高级的应用程序由于新扩展的工具的语言。组装出现后,它很快成为难以使用,以确定应用程序。一个叫做结构化编程新方法出现。这种编程方法允许人们很容易编写相当复杂的代码。一旦程序员看到他们可以做什么,他们将结构化编程语言的局限性。克服这一障碍,继续扩大代码的限制,不得不出来的一种新方法。 This approach was Object Oriented Programming (OOP). Object Oriented programming in summary is a methodology that helps organize code through use of inheritance, encapsulation, and polymorphism.

尽管C是一个非常强大的语言,它也有其局限性。c++现在超级语言之一。它允许程序员将更远的阈值限制。c++的成功的主要关键是事实,它包括所有的C和具有附加功能的函数。这使得C程序员容易c++的开关。

当一个使用代码和3 d图形,它可以生成和操纵它们的痛苦。OpenGL微软举是一个开源的替代。可用于所有平台,有超过二百五十个函数来创建复杂的3 d数据。1992年硅谷图形公司开发的OpenGL。被释放后,它主要用于CAD软件和许多消费者的游戏和应用程序。也是现在应用于虚拟现实、医疗虚拟化,和飞行模拟。它允许程序员完全控制了2 d或3 d图形需要呈现。OpenGL非常低水平的语言中,用户定义的一切对于每一个形状。例如一个广场必须首先生成一个空间轴所需的数量,例如一个正方形只是在二维。然后一个矩阵必须创建允许形状编辑的用户必须指定每个顶点的广场和连接在一起。

为背景研究术语和概念

  • 魔方
  • 编程
  • OpenGL
  • c++

研究问题

  • 上帝的魔方算法
  • 最少的算法需要解决魔方
  • 最快的方法解决魔方

实验的程序

初始化:

  1. 安装Microsoft Visual Studio 2010
  2. 创建一个win32项目解决方案
  3. 创建所有需要的头文件
  4. 创建所需的所有资源文件
  5. 创建类文件所需的所有源代码

编程:

1)。有一个类的初始化每个小压制方糖构成整个立方体。

  • 调用OpenGL函数设置顶点的边和角
  • 创建函数,将圆形的边缘和填补广场构成部分之间的差距
  • 创建一个函数,将填补这个差距3块方块组成的角落
  • 创建一个函数,将设置颜色

2)有一个类实现的颜色控制能够改变颜色和输入自己的立场

  • 创建一个函数,它将在屏幕上创建一个广场和一个颜色
  • 创建一个函数处理选择颜色
  • 创建一个函数,选择颜色按下鼠标时

3)。有一个类处理的2 d和3 d净立方体接口

  • 创建一个函数处理创建每个平的一面
  • 创建一个函数,将平的多维数据集
  • 创建一个函数,将一个正方形在每个瓷砖
  • 创建一个函数,将三维立方体

4)。有一个类的初始化处理一边

  • 创建一个函数,将明确的颜色
  • 创建一个函数,将设置颜色
  • 创建一个函数,该函数将返回边的颜色

5)。有一个类,它将创建三维立方体

  • 创建一个函数,将每个cubelet渲染
  • 创建函数,使旋转沿X, Y和Z轴
  • 创建一个函数,将每一脸的颜色

6)。有一个类的处理对话框窗口和界面

  • 创建一个函数,将数据交换
  • 创建一个函数,将初始化窗口
  • 创建一个函数为每个按钮和他们做什么
  • 创建一个功能,允许用户改变移动通过滑杆每秒
  • 创建一个方法,让你通过移动导航列表

7)。有一个类的生成需要解决多维数据集

  • 定义边缘和角落
  • 定义如何旋转移动
  • 创建一个函数,该函数将争夺立方体
  • 创建一个函数,它会发现优势与给定两个颜色
  • 创建一个函数,会发现一个角落与给定的三个颜色
  • 创建一个函数,将解决顶边
  • 创建一个函数,将解决顶部角落
  • 创建一个函数,将解决中间边缘
  • 创建一个函数查看有多少底边取向和排列正确
  • 创建一个函数来检查有多少底部角落取向和排列正确
  • 创建一个函数,将东方最后一层
  • 创建一个函数,将交换的最后一层数需要移动
  • 创建一个函数,该函数将返回列表

结果

在项目结束后,许多运行。这些运行帮助显示真正的应用程序应该如何评价。假设被证明是不正确的,因为电脑平均花了八十。应用程序可以做很多功能。其中包括能够解决和争夺一个魔方。十万年被处决,看看有多少移动平均运行需要解决多维数据集。平均而言,它能够解决它在大约八十一个动作。最小数量的变动是39,最大的是一百零六年。应用程序是非常成功的,能够完成其任务。

示例图:

媒体运行的应用程序:

运行数

视频:

结论

这个应用程序已经完美地工作100%的时间。应用程序可以有用户输入他们的立场和项目将解决它。此外,应用程序可以争夺,并且解决它。用户还可以查看数据集3 d或2 d净。如果用户查看2 d地图,他们将可以选择编辑数据集的位置。应用程序解决了难题后它显示所需的措施来解决它。从这个项目中我学到了更多的深度OpenGL编程和更好的和更高效的编程古典。

问题进一步的研究

虽然这个项目有许多特性,总有改进的余地。这些改进包括:

  • 允许用户能够争夺魔方
  • 有一个更优化的解决方案
  • 有一个物理机器人解决它
  • 使用人工学习算法算出如果我重做这个项目,我将重写立方体的更优化的解决方案。我可能会尝试开发一个算法,将围绕上帝的号码。

参考书目

  • “c++, Java程序员(9780139194245):马克·a·维斯:书。”网络。06 2011年2月。
  • 道森,迈克。开始游戏编程。波士顿,MA:汤姆森科技,2004年。打印。•OpenGL——高性能图形的行业标准。网络。06 2011年2月。
  • “魔方的历史。”'80s Actual. Web. 06 Feb. 2011.

免责声明和安全预防措施

Education.com提供了科学展览项目的想法仅供参考。Education.com不作出任何保证或陈述关于科学展览项目的想法和不负责或承担任何损失或损害,造成的直接或间接地使用此类信息。通过访问科学展览项目的想法,你放弃,放弃任何索赔出现的Education.com。此外,访问Education.com的网站和展会的项目的想法是由Education.com网站的隐私政策和网站使用条款,其中包括限制在Education.com上的责任。

特此警告并非所有项目的想法是适合所有个人或在所有情况下。实现任何科学项目的想法应该只有在进行适当的设置和适当的父母或其他监督。阅读以下安全措施的一个项目中使用的所有材料是每个人的唯一责任。为进一步的信息,请咨询您的国家的科学安全的手册。

添加到收藏

创建新的集合

创建新的集合

新的集合

0

新系列>

0 项目
Baidu