Mat sumCols(const Mat& mat) { Mat colMat(mat.cols, 1, CV_32FC1); for(int i = 0; i < mat.cols; i++) { colMat.row(i) = sum(mat.col(i)); } return colMat; }
Mat meanCols(const Mat& mat) { Mat colMat(mat.cols, 1, mat.type()); for(int i = 0; i < mat.cols; i++) { colMat.row(i) = mean(mat.col(i)); } return colMat; }
Mat maxCols(const Mat& mat) { Mat colMat(mat.cols, 1, CV_32FC1); double minVal, maxVal; for(int i = 0; i < mat.cols; i++) { minMaxLoc(mat.col(i), &minVal, &maxVal); colMat.row(i) = maxVal; } return colMat; }
void Trigger::setTriggerPolyhedron(const Polyhedron& rPolyhedron) { mTriggerPolyhedron = rPolyhedron; if (mTriggerPolyhedron.pointList.size() != 0) { mObjBox.minExtents.set(1e10, 1e10, 1e10); mObjBox.maxExtents.set(-1e10, -1e10, -1e10); for (U32 i = 0; i < mTriggerPolyhedron.pointList.size(); i++) { mObjBox.minExtents.setMin(mTriggerPolyhedron.pointList[i]); mObjBox.maxExtents.setMax(mTriggerPolyhedron.pointList[i]); } } else { mObjBox.minExtents.set(-0.5, -0.5, -0.5); mObjBox.maxExtents.set( 0.5, 0.5, 0.5); } MatrixF xform = getTransform(); setTransform(xform); mClippedList.clear(); mClippedList.mPlaneList = mTriggerPolyhedron.planeList; // for (U32 i = 0; i < mClippedList.mPlaneList.size(); i++) // mClippedList.mPlaneList[i].neg(); MatrixF base(true); base.scale(Point3F(1.0/mObjScale.x, 1.0/mObjScale.y, 1.0/mObjScale.z)); base.mul(mWorldToObj); mClippedList.setBaseTransform(base); SAFE_DELETE( mPhysicsRep ); if ( PHYSICSMGR ) { PhysicsCollision *colShape = PHYSICSMGR->createCollision(); MatrixF colMat( true ); colMat.displace( Point3F( 0, 0, mObjBox.getExtents().z * 0.5f * mObjScale.z ) ); colShape->addBox( mObjBox.getExtents() * 0.5f * mObjScale, colMat ); //MatrixF colMat( true ); //colMat.scale( mObjScale ); //colShape->addConvex( mTriggerPolyhedron.pointList.address(), mTriggerPolyhedron.pointList.size(), colMat ); PhysicsWorld *world = PHYSICSMGR->getWorld( isServerObject() ? "server" : "client" ); mPhysicsRep = PHYSICSMGR->createBody(); mPhysicsRep->init( colShape, 0, PhysicsBody::BF_TRIGGER | PhysicsBody::BF_KINEMATIC, this, world ); mPhysicsRep->setTransform( getTransform() ); } }