Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- typedef struct Point
- {
- unsigned int x;
- unsigned int y;
- } POINT;
- typedef struct Matrix
- {
- long An;
- long Bn;
- long Cn;
- long Dn;
- long En;
- long Fn;
- long Divider;
- } MATRIX;
- lcdPtr is the pointer to POINT variable with this content: POINT displaySample[3] = {{80,48},{400,432},{720,240}}
- touchPtr is the pointer to POINT variable with the touch screen analog readings
- matrixPtr is the pointer to the matrix, where the final calculated matrix will be saved
- int calibrationMatrix( POINT *lcdPtr, POINT *touchPtr, MATRIX *matrixPtr)
- {
- int retValue = 1 ;
- matrixPtr->Divider = ((touchPtr[0].x - touchPtr[2].x) * (touchPtr[1].y - touchPtr[2].y)) -
- ((touchPtr[1].x - touchPtr[2].x) * (touchPtr[0].y - touchPtr[2].y)) ;
- if( matrixPtr->Divider == 0 )
- {
- retValue = 0 ;
- }
- else
- {
- matrixPtr->An = ((lcdPtr[0].x - lcdPtr[2].x) * (touchPtr[1].y - touchPtr[2].y)) -
- ((lcdPtr[1].x - lcdPtr[2].x) * (touchPtr[0].y - touchPtr[2].y)) ;
- matrixPtr->Bn = ((touchPtr[0].x - touchPtr[2].x) * (lcdPtr[1].x - lcdPtr[2].x)) -
- ((lcdPtr[0].x - lcdPtr[2].x) * (touchPtr[1].x - touchPtr[2].x)) ;
- matrixPtr->Cn = ((touchPtr[2].x * lcdPtr[1].x) - (touchPtr[1].x * lcdPtr[2].x)) * touchPtr[0].y +
- ((touchPtr[0].x * lcdPtr[2].x) - (touchPtr[2].x * lcdPtr[0].x)) * touchPtr[1].y +
- ((touchPtr[1].x * lcdPtr[0].x) - (touchPtr[0].x * lcdPtr[1].x)) * touchPtr[2].y ;
- matrixPtr->Dn = ((lcdPtr[0].y - lcdPtr[2].y) * (touchPtr[1].y - touchPtr[2].y)) -
- ((lcdPtr[1].y - lcdPtr[2].y) * (touchPtr[0].y - touchPtr[2].y)) ;
- matrixPtr->En = ((touchPtr[0].x - touchPtr[2].x) * (lcdPtr[1].y - lcdPtr[2].y)) -
- ((lcdPtr[0].y - lcdPtr[2].y) * (touchPtr[1].x - touchPtr[2].x)) ;
- matrixPtr->Fn = ((touchPtr[2].x * lcdPtr[1].y) - (touchPtr[1].x * lcdPtr[2].y)) * touchPtr[0].y +
- ((touchPtr[0].x * lcdPtr[2].y) - (touchPtr[2].x * lcdPtr[0].y)) * touchPtr[1].y +
- ((touchPtr[1].x * lcdPtr[0].y) - (touchPtr[0].x * lcdPtr[1].y)) * touchPtr[2].y ;
- }
- return( retValue ) ;
- }
- When I want to calculate the screen pos from an analog reading I use this code:
- long xAnalogReading, yAnalogReading;
- x = ((matrix.An * xAnalogReading) + (matrix.Bn * yAnalogReading) + matrix.Cn) / matrix.Divider;
- y = ((matrix.Dn * xAnalogReading) + (matrix.En * yAnalogReading) + matrix.Fn) / matrix.Divider;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement