バックグラウンド
四元数は、複素数を拡張する数値システムです。クォータニオンの形式は次のとおりです
ここは実数で、は3つの基本的な四元数単位です。ユニットには次のプロパティがあります。
四元数の乗算は可換ではないことに注意してください。
仕事
非実数のクォータニオンが与えられた場合、その平方根の少なくとも1つを計算します。
どうやって?
このMath.SEの回答によれば、非実数の四元数は次の形式で表現できます。
ここで、Bは実数であり、→ Uは形で虚数単位ベクトルであり、xはI + Y jの+ Z KとX 2 + Y 2 + Z 2 = 1。そのような→ uには、プロパティ→ u 2 = − 1があるため、虚数単位と見なすことができます。
次に、の二乗は次のようになります。
逆に、クォータニオン与えられると、次の方程式を解くことにより平方根を見つけることができます。
これは、複素数の平方根を見つけるプロセスと同じです。
負の実数には無限に多くの四元数平方根がありますが、非実数の四元数には2つの平方根しかありません。
入出力
入力は非実数の四元数です。任意の順序と構造で、4つの実数(浮動小数点数)として受け取ることができます。非実数とは、少なくとも1つが非ゼロであることを意味します。
出力は、1つまたは2つのクォータニオンであり、2乗すると入力と等しくなります。
テストケース
Input (a, b, c, d) => Output (a, b, c, d) rounded to 6 digits
0.0, 1.0, 0.0, 0.0 => 0.707107, 0.707107, 0.000000, 0.000000
1.0, 1.0, 0.0, 0.0 => 1.098684, 0.455090, 0.000000, 0.000000
1.0, -1.0, 1.0, 0.0 => 1.168771, -0.427800, 0.427800, 0.000000
2.0, 0.0, -2.0, -1.0 => 1.581139, 0.000000, -0.632456, -0.316228
1.0, 1.0, 1.0, 1.0 => 1.224745, 0.408248, 0.408248, 0.408248
0.1, 0.2, 0.3, 0.4 => 0.569088, 0.175720, 0.263580, 0.351439
99.0, 0.0, 0.0, 0.1 => 9.949876, 0.000000, 0.000000, 0.005025
このPythonスクリプトを使用して生成されます。各テストケースに対して2つの正解のうち1つだけが指定されています。もう1つは4つの値すべてが否定されます。
採点基準
標準のコードゴルフ規則が適用されます。各言語の最短のプログラムまたは機能がバイト単位で勝ちます。
a,[b,[c,[d]]]
あなたが何とかそれでバイトを保存することができた場合、罰金です:)
a, (b, c, d)
か?