}
//}}}
//{{{ operator *=
- /**
- * @brief 行列の積を計算し,最後の要素が1になるように定数倍する.
- */
Derived& operator*=(const Derived& rhs)
{
++<<<<<<< HEAD
+ Derived M;
+ for (size_t i = 0; i < Dim; ++i) {
+ for (size_t j = 0; j <= Dim; ++j) {
+ float sum = 0;
+ for (size_t k = 0; k <= Dim; ++k) {
+ sum += at(i, k) * rhs.at(k, j);
+ }
+ M.elements_[i][j] = sum;
++=======
+ Derived retval;
+ const int SIZE = Dim + 1;
+
+ // calculate the last element previously
+ int b = last_index() - Dim;
+ int c = Dim;
+ float last_sum = 0;
+ for (int i = 0; i < SIZE; ++i) {
+ last_sum += elements_[b + i] * rhs.elements_[c + i * SIZE];
+ }
+ retval.elements_[last_index()] = 1;
+
+ for (int a = last_index() - 1; a >= 0; --a) {
+ int b = a / SIZE * SIZE;
+ int c = a % SIZE;
+ float sum = 0;
+ for (int i = 0; i < SIZE; ++i) {
+ sum += elements_[b + i] * rhs.elements_[c + i * SIZE];
++>>>>>>> 01b4978a6b6cd046ad399644ea70ddec977a688a
}
- retval.elements_[a] = sum / last_sum;
}
- *this = retval;
+ *this = M;
return *reinterpret_cast<Derived*>(this);//thisがDerived型であることは保証されている.
}
}
{
- matrix3 N1(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0, 0, 0);
- matrix3 N2(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 0, 0);
+ matrix3 N1(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
+ matrix3 N2(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13);
matrix3 N = N1 * N2;
++<<<<<<< HEAD
+ matrix3 A(44, 50, 56, 66, 116, 134, 152, 178, 188, 218, 248, 290);
++=======
+ matrix3 A(44, 50, 56, 66, 116, 134, 152, 178, 188, 218, 248, 290, 0, 0, 0);
+ cout << N << endl;
++>>>>>>> 01b4978a6b6cd046ad399644ea70ddec977a688a
if (N != A) {
cerr << "Failed:" << "Affine matrix N1 * N2 test" << endl;
failed_count++;
}
{
++<<<<<<< HEAD
+ matrix3 M(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
++=======
+ matrix3 N1(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
+ matrix3 N2(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
+ matrix3 N = N1 * N2;
+ matrix3 A
+ (
+ 0.25840f, 0.28424f, 0.31008f, 0.17054f,
+ 0.58915f, 0.65633f, 0.72351f, 0.45995f,
+ 0.91990f, 1.02842f, 1.13695f, 0.74935f,
+ 0.70801f, 0.81912f, 0.93023f
+ );
+ if (N != A) {
+ cerr << "Failed:" << "Projective matrix N1 * N2 test" << endl;
+ failed_count++;
+ }
+ }
+
+ {
+ matrix3 M(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
++>>>>>>> 01b4978a6b6cd046ad399644ea70ddec977a688a
vector3 v(1, 2, 3);
vector3 w = M * v;
- vector3 a(0.20690f, 0.52874f, 0.85057f);
+ vector3 a(18, 46, 74);
if (a != w) {
cerr << "Failed:" << "M * v test" << endl;
failed_count++;