第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何通過旋轉(zhuǎn)而不重復方向來計算立方體的所有方向?

如何通過旋轉(zhuǎn)而不重復方向來計算立方體的所有方向?

有只小跳蛙 2022-06-04 09:26:21
我正在開發(fā)一個應(yīng)用程序,以查找給定特定起始結(jié)構(gòu)的拼圖立方體的可能解決方案的數(shù)量。我將所有獨特的解決方案都存儲在內(nèi)存中,我將與給定的結(jié)構(gòu)進行比較以確定有多少解決方案是可能的。為此,我必須將立方體圍繞每個面旋轉(zhuǎn) 90 度 4 次,以便檢查所有可能的方向。稍后我將考慮反思。對于一個立方體,有 6 個面,進行 4 次旋轉(zhuǎn),總共進行 24 次操作。我正在努力實現(xiàn)一種有效的算法,因為圍繞一個軸的旋轉(zhuǎn)等同于圍繞另一個 2 軸的旋轉(zhuǎn)'。例如:繞 x 軸旋轉(zhuǎn)產(chǎn)生的方向與繞 y 軸旋轉(zhuǎn),然后繞 z 軸旋轉(zhuǎn)相同。因此,我當前的實現(xiàn)需要 64 次操作,這是多余的,因為我要多次檢查相同的方向。當前算法:public static int getPossibleSolutionCount(Map<PieceIndex, Piece> 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 次。
查看完整描述

1 回答

?
寶慕林4294392

TA貢獻2021條經(jīng)驗 獲得超8個贊

24 個旋轉(zhuǎn)中的每一個都可以通過哪個面朝上(6 種可能性)和哪個面朝左(每個向上面 4 種可能性)來唯一識別。


確定朝上面的外部循環(huán),然后確定朝左面的內(nèi)部循環(huán)似乎很容易。鑒于您的旋轉(zhuǎn)調(diào)用所采用的參數(shù),我可能會這樣做:


// Rotating around these axes in sequence will bring each face in turn

// to the top

private static GameObject.AXIS ROTATION_PATH = new GameObject.AXIS[] {

    GameObject.AXIS.X_AXIS,

    GameObject.AXIS.X_AXIS,

    GameObject.AXIS.Z_AXIS,

    GameObject.AXIS.X_AXIS,

    GameObject.AXIS.X_AXIS,

    GameObject.AXIS.Z_AXIS

};


public static int getPossibleSolutionCount(Map<PieceIndex, Piece> pieces)

{

    int count = 0;

    for (GameObject.AXIS path_axis: ROTATION_PATH)

    {

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

        {

            for (Solution s : solutions)

            {

               if (s.isDerivedFrom(pieces))

               {

                   count++;

               }

            }

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

        }

        pieces.values().forEach(piece -> piece.rotate(path_axis));

    }

    return count;

}

希望你看到它應(yīng)該如何工作。我對你的軸指向的方向和旋轉(zhuǎn)的方向做了假設(shè),所以如果 ROTATION_PATH 沒有為你做它應(yīng)該做的事情,那么相應(yīng)地調(diào)整它。


查看完整回答
反對 回復 2022-06-04
  • 1 回答
  • 0 關(guān)注
  • 104 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號