android 电阻单点触摸屏校准.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
android 电阻单点触摸屏校准

今天做了android下触摸屏的校准,注意触摸屏可能有不一样,我们目前是用的是单点的电阻是触摸屏,android 平台是 2.1 下面来说下触摸屏的校准 client 采集数据:计算校对系数,写入文件 /data/etc/xxxx 通过propty来设置状态 InputDevice.java 根据propty 来读取校对的系数来校对数据。 校对数据模型采用 M=ax+by+k1; N=cx+dy+k2,其中 M,N为经校对系数计算后的准确的触摸屏位置。 那么我们要做的是通过数据采集来计算a,b,k1,c,d,k2,对于每一维的坐标,都是三个系数,因此我们采集三个有效的数据点。成而得到 M1=ax1+by1+k1 ; N1=cx1+dy1+k2 M2=ax2+by2+k1 ; N2=cx2+dy2+k2 M3=ax2+by2+k1 ; N3=cx2+dy2+k2,其中(M1,N1),(M2,N2),(M3,N3),是你校对的标准数据,我的代码里取 做上角(32,32),右上脚(SCREEN_WIDTH-32,32),右下脚(32,SCREEN_HEIGHT-32), (x1,y1),(x2,y2),(x3,y3)分别是获取的没校准前的 触摸屏的数据。 那么可以解得a,b,k1,c,d,k2,让后将这6个数据写入到/data/et/xxx文件中。 然后InputDevice.java读取propty的状态来决定是否使用校对系数.。 当触摸屏设置完后就会设置为done 当InputDevie 发现propty为done的时候读取校对系数建立校对模型。 有触摸屏传来的数据(x,y),那么由公式,X准=ax+by+k1; Y准=cx+dy+k2; 试验验证准有效 代码分析: 界面代码 TouchCalibration.java,它很简单,一个全屏的activty 模型M的取值范围 int xList[] = { 32, UI_SCREEN_WIDTH - 32, 32, UI_SCREEN_WIDTH - 32, UI_SCREEN_WIDTH / 2 }; 模型N的取值范围 int yList[] = { 32, 32, UI_SCREEN_HEIGHT - 32, UI_SCREEN_HEIGHT - 32, UI_SCREEN_HEIGHT / 2 }; 为五个参考点的坐标,其实只用了3个点,哈哈(还没搞明白五个点的数学模型,如果有知道的,希望能不吝赐教) 重载 onTouchEvent的接口,然后活去取三个点的实际触摸到的坐标 x1,y1,x2,y2,x3,y3,而这个准确的位置分别对应了xList[0],yList[0],xList[1],yList[1],xList[2],yList[2], 取道数据后,用Calibrate.java来计算出 a,b,k1,c,d,k2,三个未知数三个一次方程求解, 主要函数在perform_calibration 中 a=((y3-y2)*(M2-M1)-(M3-M2)*(y2-y1))/((y3-y2)*(x2-x1)-(y2-y1)*(x3-x2)) 其它的可以自己计算出来, float M1,M2,M3,N1,N2,N3; float a,b,k1,c,d,k2; float x1,y1,x2,y2,x3,y3; float mul,div; float scaling = (float)65536.0; M1=cal.xfb[0]; N1=cal.yfb[0]; M2=cal.xfb[1]; N2=cal.yfb[1]; M3=cal.xfb[2]; N3=cal.yfb[2]; x1=cal.x[0]; y1=cal.y[0]; x2=cal.x[1]; y2=cal.y[1]; x3=cal.x[2]; y3=cal.y[2]; div=((y3-y2)*(x2-x1)-(y2-y1)*(x3-x2)); mul=((y3-y2)*(M2-M1)-(M3-M2)*(y2-y1)); a=mul/div; div=((x3-x2)*(y2-y1)-(x2-x1)*(y3-y2)); mul=(x3-x2)*(M2-M1)-(x2-x1)*(M3-M2); b=mul/div; k1=M1-a*x1-b*y1; div=((y3-y2)*(x2-x1)-(y2-y

文档评论(0)

hf916589 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档