在Java中用于解码Rubik多维数据集的代码是一种相对简单的算法.效率也很重要,但是次要考虑因素.
我正在寻找一个简单的3D图形程序的好主意作为我的计算机图形类介绍的最终项目.至于一些背景信息,我们将使用opengl并且将有一个多月的时间来处理它,所以没有什么太牵强.看起来更简单,更"漂亮",越好.但是,它确实需要用户可以与之交互的某种界面(因此非常简单的游戏或类似的游戏是一个好主意)并且必须是3D.
到目前为止我唯一的想法可能是俄罗斯方块的3D版本(谷歌的一些例子).
编辑:我最终选择了3D俄罗斯方块.在不到一个月的时间里,你可以看到我在这里想到的东西.
我正在为Android开发一个增强现实应用程序,它使用手机的相机来识别魔方的每个面上的彩色方块的排列.
我不确定的一件事是我将如何检测和识别立方体每个面上的彩色方块.如果你看一下魔方,你可以看到每个方格都是六种颜色中的一种,带有黑色的薄边框.这让我认为应该相对简单地检测一个正方形,可能使用现有的标记检测API.
我的问题是,这里有没有人有图像识别和Android的经验?理想情况下,我希望能够实现和现有的API,但如果有人能指出我正确的方向开始,这将是一个有趣的项目.
提前谢谢了.
android image-processing computer-vision augmented-reality rubiks-cube
我想随机化一个初始化为完整的rubik立方体(正确边上的所有颜色).我有移动旋转立方体的函数.我想连续随机选择50个函数来正确随机化它.
我做这个项目了解更多一点关于Python的,因为我主要是做C++,我看到有Python的任何情况下,/开关,所以我要把一本字典.当我创建字典时,代码似乎由于某种原因而执行:
def random_cube(self):
scramble = { 0 : self.up_turn(),
1 : self.down_turn(),
2 : self.left_turn(),
3 : self.right_turn(),
4 : self.front_turn(),
5 : self.back_turn(),
6 : self.up_turn("inverted"),
7 : self.down_turn("inverted"),
8 : self.left_turn("inverted"),
9 : self.right_turn("inverted"),
10: self.front_turn("inverted"),
11: self.back_turn("inverted")
}
for x in range(50):
i = random.randint(0,11)
scramble[i]
Run Code Online (Sandbox Code Playgroud)
因此,当我创建这个字典时,由于某种原因(我认为)它似乎贯穿并执行所有11个条目.我似乎无法找到更好的方法,至少比if/elif长语句更优雅.
!编辑:实现这两个建议,任何建议都没有设置函数的("倒")标志.例如,调用1和7都会给我down_turn,但是输出显示标志在它应该在7号时没有设置.
有任何想法吗?
我想为任何尺寸的魔方立方体写立方体.
我知道如何解决比3x3x3更大的立方体:
这听起来很容易,但问题是解决中心和边缘的方法取决于立方体大小.对于求解中心和边缘的3x3x3算法有0个移动,对于4x4x4它更长,而对于5x5x5它甚至更长.
但是我该如何计算这些动作呢?有什么简单的方法吗?
提前致谢!
是否有可能通过遗传算法有效地解决魔方?
应该使用什么样的染色体编码?应该如何进行交叉和变异?
我正在使用这个立方体模型:
#ifndef RUBIKSCUBE_H_INCLUDED
#define RUBIKSCUBE_H_INCLUDED
#include "Common.h"
#include "RubiksSide.h"
#include "RubiksColor.h"
#include "RotationDirection.h"
class RubiksCube {
private:
int top[3][3];
int left[3][3];
int right[3][3];
int front[3][3];
int back[3][3];
int down[3][3];
int (*sides[6])[3][3];
std::string result;
void spinSide(RubiksSide side) {
static int buffer[ 3 ];
if (side == TOP) {
for (int i = 0; i < 3; i++) {
buffer[i] = left[i][2];
}
for (int i = 0; i < 3; i++) {
left[i][2] = front[0][i];
}
for (int i …
Run Code Online (Sandbox Code Playgroud) 我正在尝试开发一个用C解决Rubik立方体的程序.我使用了回溯技术.这是一个非常漫长的过程,需要大量的迭代,所以我无法解决它.
请给我关于如何更有效地解决这个问题的建议 - 例如其他技术或采用回溯本身.在谷歌我找到了许多解决这个问题的捷径,但我不想通过使用快捷方式来解决这个问题.
我正在开发我的第一个真正的OpenGL项目.这是一个3x3x3 Rubiks立方体.这是到目前为止我所拥有的简单屏幕截图的链接(我的rubiks立方体)
通过在按住鼠标右键的同时拖动鼠标来旋转立方体.这是使用NeHe Tutorials(NeHe Arcball)的弧形球的例子
我有类singleCubes,它通过6个实际四边形表示一个立方体,存储在可以在其绘制方法中使用的显示列表中.ComplexCube类具有3x3x3单个立方体的数组,并在与完整的rubiks立方体交互时用作接口.
现在我想根据mousedragging旋转每个特定的面部,用鼠标左键按下.我使用pick来获取用户点击的单个多维数据集的相应边的id.这也有效.所以我点击一个面上一个立方体的一侧,根据拖动的方向,我设置受影响的立方体的旋转和偏移系数.(我也想实现你实际上看到的是旋转面而不是仅仅改变颜色)
现在我的问题是,当我用鼠标右键拖动任意方向旋转rubiks立方体时,它会变得颠倒过来.因此,当我单击一侧并想要将面向右旋转时,它的方向是错误的,因为如果立方体是倒置的或者其他什么,我无法跟踪.由于使用了弧形旋转,我没有x或y旋转角度,我可以使用它来确定这一点.
问题1:当使用上面链接的弧形示例时,如果立方体是倒置,倾斜等以便转换鼠标拖动信息(当旋转一个面时),我如何跟踪或稍后获取信息?
// In render function
glPushMatrix();
{
glMultMatrixf(Transform.M); // Rotation applied by arcball object
complCube.draw(); // Draw all the cubes using display lists
}
glPopMatrix();
Run Code Online (Sandbox Code Playgroud)
安装程序:C++与Microsoft Visual Studio 2008,GLEW,freeglut
杜姆先生:您好,我很愚蠢,但我仍然想解决一个3x3x3的Rubik立方体。
斯玛特先生:好的,您很幸运。 这就是这样做的指导!
杜姆先生:不,因为我是杜姆,这对我不起作用。我只能遵循这样的算法。
pick up cube
look up a list of moves from some smart person
while(cube is not solved)
perform the next move from list and turn
the cube as instructed. If there are no
more turns in the list, I'll start from the
beginning again.
hey look, it's solved!
Run Code Online (Sandbox Code Playgroud)
斯玛特先生:好的,这是您的清单!
好的,什么样的列表可以解决这样的问题?我知道,魔方永远不能远离20点移动到解决,并且有一个魔方的43,252,003,274,489,856,000排列。因此,我认为该列表的长度可能为(20 * 43,252,003,274,489,856,000),但是
请注意,这纯粹是一个理论问题,我实际上并不希望对计算机进行编程来做到这一点。
rubiks-cube ×10
algorithm ×4
opengl ×2
3d ×1
android ×1
c ×1
c++ ×1
dictionary ×1
graphics ×1
java ×1
optimization ×1
python ×1
random ×1
solver ×1