เขียนฟังก์ชั่นที่มีชื่อหรือโปรแกรมที่คำนวณผลิตภัณฑ์ quaternion ของสอง quaternions ใช้น้อยที่สุดเท่าที่เป็นไปได้
quaternions
Quaternionsเป็นส่วนขยายของจำนวนจริงที่เพิ่มเติมขยายจำนวนเชิงซ้อน แทนที่จะเป็นหน่วยจินตภาพหน่วยเดียวi
ควอเทอร์เนียนใช้หน่วยจินตนาการสามหน่วยi,j,k
ที่สนองความสัมพันธ์
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
(นอกจากนี้ยังมีตารางเหล่านี้ในหน้า Wikipedia )
ในคำพูดหน่วยจินตภาพแต่ละหน่วยกำลังสอง-1
และผลิตภัณฑ์ของหน่วยจินตภาพที่แตกต่างกันสองหน่วยคือหน่วยที่สามที่เหลือซึ่ง+/-
ขึ้นอยู่กับว่ามีการปฏิบัติตามลำดับวงโคจรหรือ(i,j,k)
ไม่ (เช่นกฎมือขวา ) ลำดับการคูณมีความสำคัญ
quaternion ทั่วไปเป็นการรวมกันเชิงเส้นของส่วนจริงและสามหน่วยจินตภาพ (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-tuples ไปเป็น 4-tuples เดียวซึ่งเป็นสิ่งที่คุณขอให้ติดตั้ง
รูปแบบ
คุณควรจะเขียนทั้งโปรแกรมหรือฟังก์ชั่นการตั้งชื่อ โปรแกรมควรรับอินพุตจาก STDIN และพิมพ์ผลลัพธ์ ฟังก์ชั่นควรใช้ในฟังก์ชั่นอินพุตและส่งคืน (ไม่พิมพ์) เอาต์พุต
รูปแบบอินพุตและเอาต์พุตมีความยืดหยุ่น อินพุตคือแปดจำนวนจริง (สัมประสิทธิ์สำหรับสองควอเทอร์เนียน) และเอาต์พุตประกอบด้วยตัวเลขจริงสี่ตัว อินพุตอาจเป็นตัวเลขแปดตัวรายการสองตัวในสี่ตัวเมทริกซ์ 2x4 เป็นต้นรูปแบบอินพุต / เอาต์พุตไม่จำเป็นต้องเหมือนกันการเรียงลำดับ(1,i,j,k)
สัมประสิทธิ์ขึ้นอยู่กับคุณ
สัมประสิทธิ์สามารถเป็นลบหรือไม่ทั้งหมดก็ได้ ไม่ต้องกังวลกับความแม่นยำหรือล้นเกินจริง
ถูกแบน:ฟังก์ชั่นหรือประเภทเฉพาะสำหรับ quaternions หรือเทียบเท่า
กรณีทดสอบ
เหล่านี้อยู่ใน(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]
การดำเนินการอ้างอิง
ใน Python เป็นฟังก์ชัน:
#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