NODE_IMPLEMENTATION(transpose_mXX, Pointer) { FixedArray* Aarray = NODE_ARG_OBJECT(0, FixedArray); const Class* mtype = static_cast<const Class*>(Aarray->type()); FixedArray* Carray = static_cast<FixedArray*>(ClassInstance::allocate(mtype)); EigenMatXf A(Aarray->data<float>(), Aarray->size(0), Aarray->size(1)); EigenMatXf C(Carray->data<float>(), Aarray->size(0), Aarray->size(1)); C = A.transpose(); NODE_RETURN(Carray); }
TEST(Containers, ArrayBool) { FixedArray<20, bool> array; FixedArray<20, bool> &cref = array; EXPECT_TRUE(array.empty()); EXPECT_TRUE(cref.empty()); EXPECT_EQ(array.size(), 0); EXPECT_EQ(cref.size(), 0); EXPECT_TRUE(array.push_back(true)); EXPECT_FALSE(array.empty()); EXPECT_FALSE(cref.empty()); EXPECT_EQ(array.front(), true); EXPECT_EQ(cref.front(), true); EXPECT_TRUE(array.pop_back()); EXPECT_FALSE(array.pop_back()); EXPECT_TRUE(array.empty()); EXPECT_TRUE(cref.empty()); EXPECT_TRUE(array.push_back(false)); EXPECT_TRUE(array.push_back(true)); EXPECT_EQ(array.front(), false); EXPECT_EQ(cref.front(), false); EXPECT_EQ(array.back(), true); EXPECT_EQ(cref.back(), true); EXPECT_EQ(array.size(), 2); EXPECT_EQ(cref.size(), 2); array.clear(); EXPECT_EQ(array.size(), 0); EXPECT_TRUE(array.empty()); for(unsigned i=0; i< array.capacity(); i++) EXPECT_TRUE(array.push_back(i & 1)); EXPECT_FALSE(array.push_back(-1)); for(unsigned i=0; i < array.capacity(); i++) { EXPECT_EQ(array[i], int(i & 1)); EXPECT_EQ(cref[i], int(i & 1)); } for(unsigned i=0; i < array.capacity(); i++) { EXPECT_EQ(array.back(), int(array.capacity() - 1 - i) & 1); EXPECT_EQ(cref.back(), int(cref.capacity() - 1 - i) & 1); EXPECT_TRUE(array.pop_back()); } }
TEST(Containers, Array) { FixedArray<20, int> array; FixedArray<20, int> &cref = array; EXPECT_TRUE(array.empty()); EXPECT_TRUE(cref.empty()); EXPECT_EQ(array.size(), 0); EXPECT_EQ(cref.size(), 0); EXPECT_TRUE(array.push_back(100)); EXPECT_FALSE(array.empty()); EXPECT_FALSE(cref.empty()); EXPECT_EQ(array.front(), 100); EXPECT_EQ(cref.front(), 100); EXPECT_TRUE(array.pop_back()); EXPECT_FALSE(array.pop_back()); EXPECT_TRUE(array.empty()); EXPECT_TRUE(cref.empty()); EXPECT_TRUE(array.push_back(200)); EXPECT_TRUE(array.push_back(300)); EXPECT_EQ(array.front(), 200); EXPECT_EQ(cref.front(), 200); EXPECT_EQ(array.back(), 300); EXPECT_EQ(cref.back(), 300); EXPECT_EQ(array.size(), 2); EXPECT_EQ(cref.size(), 2); array.clear(); EXPECT_EQ(array.size(), 0); EXPECT_TRUE(array.empty()); for(unsigned i=0; i< array.capacity(); i++) EXPECT_TRUE(array.push_back(i)); EXPECT_FALSE(array.push_back(-1)); for(unsigned i=0; i < array.capacity(); i++) { EXPECT_EQ(array[i], int(i)); EXPECT_EQ(cref[i], int(i)); } for(unsigned i=0; i < array.capacity(); i++) { EXPECT_EQ(array.back(), int(array.capacity() - 1 - i)); EXPECT_EQ(cref.back(), int(cref.capacity() - 1 - i)); EXPECT_TRUE(array.pop_back()); } }
Rect BoundingBox::project2D(const Matrix4x4& projection) const { Vector3 projMin = min; Vector3 projMax = max; // 2+------+3 // /| /| // / | / | // / 0+---/--+1 // 6+------+7 / // | / | / // |/ |/ // 4+------+5 FixedArray<Vector4, 8> corners; corners[0] = Vector4(projMin, 1.0); corners[1] = Vector4(projMax.x, projMin.y, projMin.z, 1.0); corners[2] = Vector4(projMin.x, projMax.y, projMin.z, 1.0); corners[3] = Vector4(projMax.x, projMax.y, projMin.z, 1.0); corners[4] = Vector4(projMin.x, projMin.y, projMax.z, 1.0); corners[5] = Vector4(projMax.x, projMin.y, projMax.z, 1.0); corners[6] = Vector4(projMin.x, projMax.y, projMax.z, 1.0); corners[7] = Vector4(projMax, 1.0); Rect rect; for(unsigned int i = 0; i < corners.size(); ++i) { Vector4 projected = projection * corners[i]; rect.mergePoint(Vector2(projected.x / projected.w, projected.y / projected.w)); } return rect; }