You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:43:51