コード例 #1
0
void CPianoHand::UpdateFingersWithHand(CPianoHand *hand)
{
	int i, j;

	for (i=0; i < hand->m_nNumFingers; i++)
	{
		hand->m_fingers[i].mark = false;
		for (j=0; j < m_nNumFingers; j++)
		{
			m_fingers[j].mark = false;
			if (fabs(hand->m_fingers[i].sectionX - m_fingers[j].sectionX) < 0.1)
			{
				hand->m_fingers[i].mark = true;
				//m_fingers[j].mark = true;
				if (fabs(hand->m_fingers[i].sectionY - m_fingers[j].sectionY) < 0.1)
				{
					UpdateFinger(j, hand->m_fingers[i].x, hand->m_fingers[i].y);
					
				}
			}
		}

		if (hand->m_fingers[i].mark == false)
			AddFinger(hand->m_fingers[i].x, hand->m_fingers[i].y);
	}

	for (j=0; j < m_nNumFingers; j++)
	{
		if (m_fingers[j].mark == false)
			UpdateFinger(j);
	}
}
コード例 #2
0
void CPianoHand::UpdateLikelyFingers()
{
	int likelyX[5], likelyY[5];
	int i, j;
	float dist, smallestDistance;
	int smallestLoc;

	//Get Likely coordinates, based on evenly divided points along the
	//width of the hand
	for (i=0; i < 5; i++)
	{
		likelyX[i] = int(i * float(m_boundingBox.width)/5) + (m_boundingBox.x + 2);
		likelyY[i] = 50;
	}
	 
	if (m_nNumFingers < 5)
	{
		for (i=0; i < m_nNumFingers; i++)
		{
			smallestDistance= 1000;
			for (j=0; j < 5; j++)
			{
				dist = sqrt((abs(m_fingers[i].x - likelyX[j]) * abs(m_fingers[i].x - likelyX[j])));
				
				if (dist < smallestDistance)
				{
					smallestDistance = dist;
					smallestLoc = j;
				}
			}

			//Get Rid of That Value
			likelyX[smallestLoc] = 10000;
			likelyY[smallestLoc] = 10000;
			m_fingers[i].certainty = CERTAIN;
			
		}

		for (i=m_nNumFingers; i < 5; i++)
		{
			for (j=0; j < 5; j++)
			{
				if (likelyX[j] != 10000)
				{
					AddFinger(likelyX[j], likelyY[j]);
					m_fingers[i].certainty = UNCERTAIN;
					
					likelyX[j] = 10000;
					likelyY[j] = 10000;
				}
			}
		}
	}


	//Sort From Left To Right
	CPianoFinger tempFinger;
	for (i=0; i < 5; i++)
	{
		for (j=i; j < 5; j++)
		{
			if (m_fingers[j].x < m_fingers[i].x)
			{
				tempFinger = m_fingers[i];
				m_fingers[i] = m_fingers[j];
				m_fingers[j] = tempFinger;
			}
		}
	} 
}
コード例 #3
0
void AddFingerModule(void)
{
        unsigned char i = 0;
        unsigned char AH = 0;//
        unsigned char AL = 0;//
        unsigned char t = 0;

        FingerOn();
		BellOn();
        DelayNmS(200);
		BellOff();

        //
        if(ReadFingerFlash(FingerRecord,sizeof(FingerRecord),0,0) != OK)
        {
                DisplayErr();
                FingerOff();
                return;
        }

        //2 
        for(i = 0;i<MAX_FINGER;i++)
        {
                AH = i/8;
                AL = i%8;
                t = FingerRecord[AH]<<(7-AL);
                t = t>>7;
                if(0 == t)
                {
                        //
                        break;
                }
        }

        if(i == MAX_FINGER)
        {
                //
                DisplayFail();
                FingerOff();
                return;
        }

        //3
        t = AddFinger(0,i,250);
        if(ANSWER_OK == t)
        {
                DisplayOK();//
        }
        else
        {
                if(ANSWER_OUT_TIME == t)//
                {
                        DisplayOutTime();
                        FingerOff();
                        return;
                }
                else
                {
                        if(FALSE == t)//
                        {
                                DisplayErr();
                                FingerOff();
                                return;
                        }
                        else
                        {
                                DisplayFail();//
                                FingerOff();
                                return;
                        }
                }
        }

        //4 
        FingerRecord[AH] |= 1<<AL;
        if(OK == WriteFingerFlash(FingerRecord,sizeof(FingerRecord),0,0))
        {
        }
        else
        {
                DisplayErr();
                FingerOff();
                return;
        }

        FingerOff();//
}