C ++四元数方程

时间:2018-03-24 23:14:50

标签: c++ math quaternions

我正在尝试编写一个乘以2个四元数方程的程序。这是我的2个初始四元数:

q1 = 2-i + j + 3k,

Q 2 = -1 + I + 4J-2K

我允许用户输入自己的数字,代表从File --> Invalidate Caches / Restarta1的每个顶级组件,以及从a4b1的底部组件,如下所示:

b4

然后我将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 << "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; 乘以每个“a1”元素,b乘以每个“a2”元素,依此类推,然后将这些新值存储在变量中,我按照表格标记了每个新变量,因此我知道它是代表b还是ij

k

最后,我将所有相应的multiplec1 = b1 * a1; // num multiplec2 = b2 * a1; // i multiplec3 = b3 * a1; // j multiplec4 = b4 * a1; // k multiplec5 = b1 * a2; // -i multiplec5 = -multiplec5; multiplec6 = b2 * a2; // num multiplec7 = b3 * a2; // k multiplec8 = b4 * a2; // -j multiplec6 = -multiplec6; multiplec9 = b1 * a3; // j multiplec10 = b2 * a3; // -k multiplec10 = -multiplec10; multiplec11 = b3 * a3; // num multiplec12 = b4 * a3; // i multiplec13 = b1 * a4; // num multiplec14 = b2 * a4; // i multiplec15 = b3 * a4; // j multiplec16 = b4 * a4; // k 值相加:

ijk

出于某种原因,当我显示我的“finalint = multiplec1 + multiplec6 + multiplec11 + multiplec15; finalI = multiplec2 + multiplec5 + multiplec12 + multiplec14; finalJ = multiplec3 + multiplec8 + multiplec9 + multiplec15; finalK = multiplec4 + multiplec7 + multiplec10 + multiplec16; ”变量时,数字似乎与我在纸上完成的数字完全不同,所以我确定我在这里做错了,但我'我不知道是什么。

有人会关心帮我弄清楚我的计算中哪里出错了,为什么我得错了值?

[编辑]

这是我应该得到的值:

9 -11i - 7j - 12k

但由于某种原因,我得到了这个:

15 2i 21j -15k

1 个答案:

答案 0 :(得分:0)

我认为这里最令人惊讶的部分是你的纸张计算和你的程序在同一时间是错误的,但是以不同的方式。其实 2−i+j+3k multiplied by −1+i+4j−2k is 1 - 11 i + 8 j - 12 k,逻辑是

  1   = -2 +1 -4 +6 = 2*(-1) + (-i)*i + j*4j + 3k*(-2k)
-11*i = (+2 +1 -2 -12)*i = 2*i + (-i)*(-1) + j*(-2k) + 3k*4j
  8*j = (+8 -1 -2 +3)*j = 2*4j +j*(-1) + (-i)*(-2k) +  3k*i
-12*k = (-4 -3 -4 -1)*k =  2*(-2k) + (3k)*(-1) + (-i)*4j + j*i

请注意,对于四元数,乘法是非交换的。对于考试,i*j = kj*i = -k。你可以找到完整的multiplication table in the wiki)。因此,请检查您的代码,因为那里有很多错误。