C++四元数乘法程序开发需求:支持自定义分量输入
没问题,我来帮你实现一个满足需求的C++四元数相乘程序,先理清楚核心逻辑,再给你完整的代码实现~
四元数相乘的C++实现方案
核心公式回顾
首先明确四元数的标准表示:设两个四元数为
- ( q_1 = a_1 + a_2i + a_3j + a_4k )
- ( q_2 = b_1 + b_2i + b_3j + b_4k )
它们的乘积 ( q = q_1 \times q_2 ) 分量计算公式如下:
- ( c_1 = a_1b_1 - a_2b_2 - a_3b_3 - a_4b_4 )
- ( c_2 = a_1b_2 + a_2b_1 + a_3b_4 - a_4b_3 )
- ( c_3 = a_1b_3 - a_2b_4 + a_3b_1 + a_4b_2 )
- ( c_4 = a_1b_4 + a_2b_3 - a_3b_2 + a_4b_1 )
完整C++代码
下面的代码包含用户自定义分量输入和示例四元数验证功能,注释清晰,使用起来很方便:
#include <iostream> #include <iomanip> // 用于格式化输出,让结果更美观 using namespace std; // 封装四元数相乘的计算逻辑 void calculateQuaternionProduct(double a1, double a2, double a3, double a4, double b1, double b2, double b3, double b4, double &c1, double &c2, double &c3, double &c4) { c1 = a1*b1 - a2*b2 - a3*b3 - a4*b4; c2 = a1*b2 + a2*b1 + a3*b4 - a4*b3; c3 = a1*b3 - a2*b4 + a3*b1 + a4*b2; c4 = a1*b4 + a2*b3 - a3*b2 + a4*b1; } // 格式化打印四元数,避免出现"+-"这类不美观的符号 void printQuaternion(double c1, double c2, double c3, double c4) { cout << fixed << setprecision(2); cout << "\n乘积结果:"; cout << c1; // 处理i分量的符号 if (c2 >= 0) cout << " + "; else cout << " - "; cout << abs(c2) << "i"; // 处理j分量的符号 if (c3 >= 0) cout << " + "; else cout << " - "; cout << abs(c3) << "j"; // 处理k分量的符号 if (c4 >= 0) cout << " + "; else cout << " - "; cout << abs(c4) << "k" << endl; } int main() { char useExample; double a1, a2, a3, a4; double b1, b2, b3, b4; double res1, res2, res3, res4; cout << "=== 四元数相乘计算器 ===" << endl; cout << "是否使用题目给出的示例四元数?(输入y/n): "; cin >> useExample; if (useExample == 'y' || useExample == 'Y') { // 加载题目中的示例四元数:q1=2−i+j+3k、q2=−1+i+4j−2k a1 = 2; a2 = -1; a3 = 1; a4 = 3; b1 = -1; b2 = 1; b3 = 4; b4 = -2; cout << "\n已加载示例四元数:" << endl; cout << "q1 = " << a1 << " " << (a2 >=0 ? "+" : "") << a2 << "i + " << a3 << "j + " << a4 << "k" << endl; cout << "q2 = " << b1 << " " << (b2 >=0 ? "+" : "") << b2 << "i + " << b3 << "j + " << b4 << "k" << endl; } else { // 引导用户输入自定义四元数分量 cout << "\n请输入第一个四元数 q1 = a1 + a2i + a3j + a4k 的分量:" << endl; cout << "Enter the [A1] value: "; cin >> a1; cout << "Enter the [A2] value: "; cin >> a2; cout << "Enter the [A3] value: "; cin >> a3; cout << "Enter the [A4] value: "; cin >> a4; cout << "\n请输入第二个四元数 q2 = b1 + b2i + b3j + b4k 的分量:" << endl; cout << "Enter the [B1] value: "; cin >> b1; cout << "Enter the [B2] value: "; cin >> b2; cout << "Enter the [B3] value: "; cin >> b3; cout << "Enter the [B4] value: "; cin >> b4; } // 计算并打印结果 calculateQuaternionProduct(a1, a2, a3, a4, b1, b2, b3, b4, res1, res2, res3, res4); printQuaternion(res1, res2, res3, res4); return 0; }
代码亮点说明
- 模块化设计:把计算和打印功能拆分到独立函数里,后续要加四元数其他运算(比如共轭、模长)会很方便。
- 输入灵活性:支持示例模式快速验证,也支持自定义输入满足个性化需求。
- 输出美观度:处理了符号显示问题,不会出现
1 + -2i这类奇怪的输出,同时保留两位小数让结果更清晰。 - 类型兼容性:用
double存储分量,既支持整数输入也支持小数输入。
示例运行效果
当选择使用示例四元数时,程序会输出:
=== 四元数相乘计算器 === 是否使用题目给出的示例四元数?(输入y/n): y 已加载示例四元数: q1 = 2 -1i + 1j + 3k q2 = -1 +1i + 4j + -2k 乘积结果:1.00 - 11.00i + 8.00j - 12.00k
这个结果和手动计算的完全一致,验证了代码的正确性。
内容的提问来源于stack exchange,提问作者non bee
相关产品推荐
相关产品推荐

