Napisz nazwaną funkcję lub program, który oblicza iloczyn czwartorzędu z dwóch czwartorzędów. Użyj jak najmniej bajtów.
Czwartorzędy
Czwartorzędy są rozszerzeniem liczb rzeczywistych, który dodatkowo rozszerza liczby zespolone. Zamiast jednej urojonej jednostki i
, czwartorzędy używają trzech urojonych jednostek, i,j,k
które spełniają relacje.
i*i = j*j = k*k = -1
i*j = k
j*i = -k
j*k = i
k*j = -i
k*i = j
i*k = -j
(Są też ich tabele na stronie Wikipedii ).
Innymi słowy, każda wyimaginowana jednostka jest kwadratem do -1
, a iloczyn dwóch różnych urojonych jednostek jest pozostałą trzecią, w +/-
zależności od tego, czy (i,j,k)
przestrzegany jest cykliczny porządek (tj. Reguła po prawej stronie ). Tak więc kolejność mnożenia ma znaczenie.
Czwartorzęd ogólny jest liniową kombinacją części rzeczywistej i trzech urojonych jednostek. Tak więc jest opisany czterema liczbami rzeczywistymi (a,b,c,d)
.
x = a + b*i + c*j + d*k
Możemy więc pomnożyć dwa czwarte przy użyciu właściwości rozdzielającej, uważając, aby pomnożyć jednostki we właściwej kolejności i w wyniku grupować podobne terminy.
(a + b*i + c*j + d*k) * (e + f*i + g*j + h*k)
= (a*e - b*f - c*g - d*h) +
(a*f + b*e + c*h - d*g)*i +
(a*g - b*h + c*e + d*f)*j +
(a*h + b*g - c*f + d*e)*k
Patrząc w ten sposób, mnożenie czwartorzędu może być postrzegane jako mapa od pary 4-krotek do pojedynczego 4-krotek, o co proszono cię zaimplementować.
Format
Powinieneś napisać program lub funkcję o nazwie . Program powinien pobrać dane wejściowe ze STDIN i wydrukować wynik. Funkcja powinna przyjmować dane wejściowe funkcji i zwracać (nie drukować) dane wyjściowe.
Formaty wejściowe i wyjściowe są elastyczne. Dane wejściowe to osiem liczb rzeczywistych (współczynniki dla dwóch czwartorzędów), a dane wyjściowe składają się z czterech liczb rzeczywistych. Dane wejściowe mogą składać się z ośmiu liczb, dwóch list czterech liczb, macierzy 2x4 itp. Format wejścia / wyjścia nie musi być taki sam. Kolejność (1,i,j,k)
współczynników zależy od Ciebie.
Współczynniki mogą być ujemne lub niecałe. Nie martw się o prawdziwą precyzję lub przepełnienie.
Zbanowany: funkcja lub typy specjalnie dla czwartorzędów lub ich odpowiedników.
Przypadki testowe
Są w (1,i,j,k)
formacie współczynnika.
[[12, 54, -2, 23], [1, 4, 6, -2]]
[-146, -32, 270, 331]
[[1, 4, 6, -2], [12, 54, -2, 23]]
[-146, 236, -130, -333]
[[3.5, 4.6, -0.24, 0], [2.1, -3, -4.3, -12]]
[20.118, 2.04, 39.646, -62.5]
Wdrożenie referencyjne
W Pythonie, jako funkcja:
#Input quaternions: [a,b,c,d], [e,f,g,h]
#Coeff order: [1,i,j,k]
def mult(a,b,c,d,e,f,g,h):
coeff_1 = a*e-b*f-c*g-d*h
coeff_i = a*f+b*e+c*h-d*g
coeff_j = a*g-b*h+c*e+d*f
coeff_k = a*h+b*g-c*f+d*e
result = [coeff_1, coeff_i, coeff_j, coeff_k]
return result