且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

安卓编程坐标系的一个问题

更新时间:2022-09-08 18:17:04

From: Wang, Jerry


Sent: Thursday, August 16, 2012 10:51 AM

Subject: reason why I cannot judge whether the current click resides within icon or outside it


我解释一下昨天说的为什么现在不能判断当有单击事件的时候,当前单击的位置是否落在六个图标任意一个之内,还是之外。


我们肉眼看到的椭圆(上面那个),是通过六个点的圆心角经过三角函数计算出来的3D坐标,来模拟3D效果。(把X,Y坐标用三角函数处理,产生弧度),再加上Z产生纵深效果。


当你单击的时候,event handler传进来的x和y是基于设备坐标系(红色的X’和Y’)的绝对坐标。因此,每次一个单击事件之后,要计算当前单击位置离哪一个点最近,必须要得到6个点在设备坐标系的绝对坐标。


图中的6条虚线就代表了从3D坐标转换到2D设备坐标系坐标的映射逻辑。


现在最主要的issue:


3D坐标的计算逻辑:( 注意3D的y是depend到Z的)安卓编程坐标系的一个问题在映射到2D坐标时,令新的2D坐标为(x’, y’ )


X’ = f(x)


Y’ = g(y)


现在的问题是我们无法精确地determine函数f和g, 因为3D的x,y,z都是根据圆心角算出来的,而不是x’, y’.所以我现在只能用一种比较粗略的方式来近似模拟出f和g,有一定的误差。


因此,这些通过近似计算出来的x’和y’只能用来比较六个点到底哪个离点击坐标最近,而不能用来精确计算点击坐标是否落在图标的矩形范围内。换句话说,点击事件发生后,我没办法知道是否点在某个图标上,还是点在空白处。我只能求出点击坐标离近似计算出来的六个点的2D坐标的距离,然后对这6个距离进行排序,取出最小值返回。安卓编程坐标系的一个问题