void Player::mousePress(QPointF& p) //нажатие на кнопку мыши { if (listening_&mousePressListening) //слушать нажатия moveMouse(p); }
void updateHandPosition(PointCloud handPcl) { int i, j; int pointCount = barycenter(handPcl, &barycX, &barycY, &barycZ) ; if (pointCount < MIN_HAND_POINT_NUMBER) { return; } isOpenHand = openHand(handPcl); double posCovarMat[3][3]; double posCovarMatEigVec[3][3]; double posCovarMatEigVal[3]; for (i=0; i<3; i++) { for (j=0; j<3; j++) { posCovarMat[i][j] = 0; } } for(j=0; j<FREENECT_FRAME_H; j++) { for(i=0; i<FREENECT_FRAME_W; i++) { if (handPcl[j][i].valid) { posCovarMat[0][0] += (handPcl[j][i].x - barycX)*(handPcl[j][i].x - barycX); posCovarMat[0][1] += (handPcl[j][i].x - barycX)*(handPcl[j][i].y - barycY); posCovarMat[0][2] += (handPcl[j][i].x - barycX)*(handPcl[j][i].z - barycZ); posCovarMat[1][0] += (handPcl[j][i].y - barycY)*(handPcl[j][i].x - barycX); posCovarMat[1][1] += (handPcl[j][i].y - barycY)*(handPcl[j][i].y - barycY); posCovarMat[1][2] += (handPcl[j][i].y - barycY)*(handPcl[j][i].z - barycZ); posCovarMat[2][0] += (handPcl[j][i].z - barycZ)*(handPcl[j][i].x - barycX); posCovarMat[2][1] += (handPcl[j][i].z - barycZ)*(handPcl[j][i].y - barycY); posCovarMat[2][2] += (handPcl[j][i].z - barycZ)*(handPcl[j][i].z - barycZ); } } } for (i=0; i<3; i++) { for (j=0; j<3; j++) { posCovarMat[i][j] = posCovarMat[i][j] / pointCount; } } eigen_decomposition(posCovarMat, posCovarMatEigVec, posCovarMatEigVal); // printMatrix("Covar Mat", posCovarMat, 3); // printMatrix("Pos Eigen Vec", posCovarMatEigVec, 3); majorAxeX = posCovarMatEigVec[1][2] > 0 ? posCovarMatEigVec[0][2] : - posCovarMatEigVec[0][2]; majorAxeY = posCovarMatEigVec[1][2] > 0 ? posCovarMatEigVec[1][2] : - posCovarMatEigVec[1][2]; majorAxeZ = posCovarMatEigVec[1][2] > 0 ? posCovarMatEigVec[2][2] : - posCovarMatEigVec[2][2]; normVecX = posCovarMatEigVec[2][0] > 0 ? posCovarMatEigVec[0][0] : - posCovarMatEigVec[0][0]; normVecY = posCovarMatEigVec[2][0] > 0 ? posCovarMatEigVec[1][0] : - posCovarMatEigVec[1][0]; normVecZ = posCovarMatEigVec[2][0] > 0 ? posCovarMatEigVec[2][0] : - posCovarMatEigVec[2][0]; //arduinoCmd(); //printf("Barycenter: X: %.4f Y: %.4f Z: %.4f\tDirection: X: %.4f Y: %.4f Z: %.4f\n", barycX, barycY, barycZ, normVecX, normVecY, normVecZ); moveMouse(); }
void Player::mouseMoved(QPointF& p) //движение мыши { if (listening_&mouseMovedListening) //слушать передвижение мыши moveMouse(p); }