java 三维旋转立方体_java - 如何通过旋转来计算立方体的所有方向,而不重复方向? - SO中文参考 - www.soinside.com...

我正在研究一个应用程序,以找到给定特定起始结构的拼图立方体的可能解决方案的数量。

我将所有唯一的解决方案存储在内存中,将与给定结构进行比较,以确定可能有多少解决方案。

为此,我必须围绕每个面将立方体旋转90度,共4次,以便检查所有可能的方向。稍后我将考虑思考。

[使用一个立方体,有6个面进行4圈旋转,总共进行24个操作。

由于围绕一个轴的旋转等效于围绕另一个2轴的旋转,因此我努力实现高效的算法'。

例如:绕x轴旋转产生的方向与绕y轴然后绕z轴旋转的方向相同。因此,我当前的实现需要64个操作,这是多余的,因为我多次检查相同的方向。

当前算法:public static int getPossibleSolutionCount(Map pieces)

{

int count = 0;

for (Solution s : solutions)

{

for (int z = 0; z < 4; z++)

{

for (int x = 0; x < 4; x++)

{

for (int y = 0; y < 4; y++)

{

if (s.isDerrivedFrom(pieces))

{

count++;

}

//all rotation calls rotate the piece / structure byt 90 degrees

pieces.values().forEach(piece -> piece.rotate(GameObject.Axis.Y_AXIS));

}

pieces.values().forEach(piece -> piece.rotate(GameObject.Axis.X_AXIS));

}

pieces.values().forEach(piece -> piece.rotate(GameObject.Axis.Z_AXIS));

}

}

return count;

}

如何改善这一点,以便不重复相同的方向,即,我只能检入24次迭代,而不是64次。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值