問題タブ [rubiks-cube]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
202 参照

c# - 2D 配列で表されるルービック キューブの面を操作して、面の回転を実行する方法

ルービック キューブを解く C# でプロジェクトを作成しています。ルービック キューブの現在の状態を入力として受け取り、指定された表記法を使用して立方体を解くために実行する一連の動きを出力します。

Cube は、長さ 9 の 6 つの文字列配列の配列で表されます。

それぞれの顔を表す Excel スプレッドシートを作成しました立方体の二次元表現

これは、一緒に折りたたんで立方体を作成するネットとして想像できます。

Windows フォーム アプリケーションではなく、コンソール アプリケーションを使用しているため、それぞれの面をコンソールの下に書き込んでキューブを表現する必要があります。私は次の方法を使用してこれを行いますPrintCube()

これにより、解決されたキューブの標準出力は次のようになります。

解決されたキューブの出力

現在、キューブで実行できるさまざまな動きをそれぞれコーディングしている段階ですが、問題が発生しました。

操作を実行するコードは次のとおりです。

私は操作を順番にコーディングしているため、現時点ではF操作しか完了していませんが、 R操作のどこが間違っているのか一生わかりません。

ルービック キューブの表記法では、解決された立方体の演算Rは、外側の白い面と上の青い面から始まり、次の動きを示していることがわかります。

  • 白い面を外側にして、青い面を上にして立方体を持ちます。

  • 赤い面を時計回りに 90 度ねじって、白い面の右側が青い面に、緑が白に、黄色が緑に、青が黄色に移動するようにします。

これら 2 つの手順を実行すると、R操作が実行されます。

これを行うためにコードで何をする必要があるかを確認するために、Excel スプレッドシートに戻りましょう。 立方体の二次元表現

白い面から始めて、変更する必要があることがわかります。

  1. ホワイトフェイスのインデックス2、5、8からグリーンフェイスのインデックス2、5、8まで。
  2. ブルーフェイスのインデックス2、5、8からホワイトフェイスのインデックス*2、5、8*まで
  3. ただし、黄色の面に到達すると、ネット内の面が「反転」してオレンジ、青、緑、および赤の面を接続する必要があるため、インデックス0、3、および 6を変更する必要があります。これらはそれぞれ、青の文字盤でインデックス 8、5 、および 2に変わります。目の前に立方体があるとなぜそうなのか考えやすい
  4. の面では、インデックス 2、5 、および 8を、黄色の面ではインデックス 6、3 、および 0に変更します。繰り返しますが、これは私たちがネットをどのように解釈するかによるものです。

Operation Rのコードを拡大すると、これをどのように達成したかがわかります。

変更が行われたことを示す各行の横にコメントがあります。//258 630ここで、 で示される面のnewCubeStateインデックス 2、5 、および 8CubeStateが、それぞれインデックス 6、3 、および 0 で示される面にあったものに変更されたことを示します。

上記の 2 次元配列からわかるように、最初のインデックスは、[0] = "WHITE"、[1] = "BLUE"、[2] = "RED"、[3] = "GREEN"になる面を表していることがわかります。 、[4] =「オレンジ」、[5] =「イエロー」

これを知っていれば、コードを次のように解釈できます。

  • まず、グリーン面の2番目のインデックスがイエロー面の6番目のインデックスになります。[緑→黄]

  • 次に、イエローフェイスの0 番目のインデックスがブルーフェイスの8 番目のインデックスになる[YELLOW -> BLUE]

  • 3 つ目は、ブルーフェイスの 2 番目のインデックスがホワイト フェイスの2番目インデックスになります。[青→白]

  • 4つ目は、ホワイトフェイスの2番目のインデックスがグリーンフェイスの2番目インデックスになります。【白→緑】

いくつかの奇妙な理由で、それらは完全に別の変数ですが、CubeState[x,y]設定したときに影響するように見えることに注意してください。そのため、newCubeState[i,j] = CubeState[x, y]変更する前にインデックスを使用する必要があり、一時変数が必要になりますtempStringが、そうではありませんここで当面の問題。

  • 5 つ目は、グリーン面の5 番目のインデックスが、イエロー面の3 番目のインデックスになります。[緑→黄]

  • 第六に、イエローフェイスの3番目のインデックスは、ブルーフェイスの5番目のインデックスになります[YELLOW -> BLUE]

  • 7番目、ブルーフェイスの5番目のインデックスは、ホワイトフェイスの5番目インデックスになります。[青→白]

  • 8番目に、ホワイトフェイスの5番目のインデックスは、グリーンフェイスの5番目インデックスになります。【白→緑】

  • グリーン面の9番目、8番目のインデックスは、イエロー面の0番目のインデックスになります。[緑→黄]

  • イエローフェイスの10番目、6番目のインデックスがブルーフェイスの2番目のインデックスになる[YELLOW -> BLUE]

  • 11 番目、青文字盤の 8 番目のインデックスは、白文字盤の8番目インデックスになります。[青→白]

  • 12番目、ホワイトフェイスの8番目のインデックスは、グリーンフェイスの8番目インデックスになります。【白→緑】

これにより、次の出力が得られるはずです。


白 - 白 - 緑

白 - 白 - 緑

白 - 白 - 緑  

 

青 - 青 - 白

青 - 青 - 白

青 - 青 - 白  

 

赤 - 赤 - 赤

赤 - 赤 - 赤

赤 - 赤 - 赤  

 

緑 - 緑 - 黄

緑 - 緑 - 黄

緑 - 緑 - 黄  

 

オレンジ - オレンジ - オレンジ

オレンジ - オレンジ - オレンジ

オレンジ - オレンジ - オレンジ  

 

青 - 黄 - 黄

青 - 黄 - 黄

青 - 黄 - 黄


ただし、そうではないことがわかります。

正しい操作の実行

何らかの奇妙な理由で、 3 番目の面 ( GREEN )の8 番目のインデックスがYELLOWではなくBLUEになり、 5 番目の面 ( YELLOW )の6 番目のインデックスがBLUEではなくWHITEになることがわかります。

なぜこれが起こるのかわかりません。これについて助けていただければ幸いです。

問題が発生することはありませんが、私のRotateFaceRight()方法は次のとおりです。

私のコードの残りの部分はここにあります:

Cube.cs

CubeCenters.cs

CubeOperations.cs

Program.cs

0 投票する
1 に答える
245 参照

java - javaFX でピボットを中心にオブジェクトを回転させる

javaFX でルービック キューブを作成しようとしていますが、面の回転に苦労しています。これまで、面の 9 つの立方体をグループに追加し、その 90 度を回転させて面全体を正しい方法で回転させてきましたが、この方法は複数の回転では機能しないようです。

代わりに、各面の中心にあるピボット ポイントを中心に各キューブを回転させたいと考えています。これを行うために、ピボット パラメータに組み込まれた Rotate クラスを使用しようとしましたが、回転には影響がないようです。これは、2D 配列 frontFace に前面のすべての立方体が左上から右下に含まれる前面を回転させるために使用している関数の簡略化されたバージョンです。

これにより、次の結果が得られます (見やすいように 45 度回転させています)。

現在の回転

私はそれを次のように回転させたいのですが:

理想的な回転

これは、javaFX を使用した最初のプロジェクトであり、どんな助けも大歓迎です! これまでの完全なプロジェクトは次の場所にあります。

https://gofile.io/d/KidwKh

編集:最小限の再現可能な例を含めるように求められたので、問題を1つのクラスに凝縮しようとしましたが、混乱しないことを願っています。コードは次のとおりです:

これは、問題に関連しているとは思わないが、色が必要な場合にコードで使用される画像、pallete.png です

ありがとう。