두 쿼터니언의 쿼터니언 곱을 계산하는 명명 된 함수 또는 프로그램을 작성하십시오. 가능한 적은 바이트를 사용하십시오.
쿼터니언
쿼터니언 은 복소수를 더 확장하는 실수의 확장입니다. i
쿼터니언 은 단일 허수 단위 대신 i,j,k
관계를 만족하는 3 개의 허수 단위 를 사용 합니다.
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
( 위키 백과 페이지에도이 표가 있습니다 .)
다시 말해, 각 허수 단위는로 제곱되고 -1
, 두 개의 서로 다른 허수 단위의 곱은 +/-
순환 순서 (i,j,k)
가 존중 되는지 여부 (즉, 오른쪽 규칙 )에 따라 나머지 세 번째 입니다. 따라서 곱셈의 순서가 중요합니다.
일반적인 쿼터니언은 실수 부와 3 개의 허수 단위의 선형 조합입니다. 따라서 4 개의 실수로 설명됩니다 (a,b,c,d)
.
x = a + b*i + c*j + d*k
따라서 우리는 분배 속성을 사용하여 두 개의 쿼터니언을 곱할 수 있습니다. 단위를 올바른 순서로 곱할 때주의를 기울이고 결과에서 용어처럼 그룹화합니다.
(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
이런 식으로 쿼터니언 곱셈은 한 쌍의 4 튜플에서 단일 4 튜플까지의 맵으로 볼 수 있습니다. 이는 구현하라는 요청입니다.
체재
프로그램 이나 명명 된 함수를 작성해야 합니다 . 프로그램은 STDIN에서 입력을 받아 결과를 인쇄해야합니다. 함수는 함수 입력을 받아서 출력을 반환 (인쇄하지 않음)해야합니다.
입력 및 출력 형식이 유연합니다. 입력은 8 개의 실수 (2 개의 쿼터니언에 대한 계수)이며 출력은 4 개의 실수로 구성됩니다. 입력은 8 개의 숫자, 4 개의 두 목록, 2x4 행렬 등일 수 있습니다. 입력 / 출력 형식이 같을 필요는 없습니다. (1,i,j,k)
계수의 순서는 사용자에게 달려 있습니다.
계수는 음수이거나 완전하지 않을 수 있습니다. 실제 정밀도 또는 오버플로에 대해 걱정하지 마십시오.
금지됨 : 쿼터니언 또는 그에 상응하는 기능 또는 유형.
테스트 사례
이들은 (1,i,j,k)
계수 형식입니다.
[[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]
참조 구현
파이썬에서 함수로 :
#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