安卓编程坐标系一个问题x
安卓编程坐标系的一个问题 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 的)
float x = -(float)(diameter/2*Math.sin(angleOffset));
float z = diameter/2 * (1.0f - (float)Math.cos(angleOffset));
float y = - getHeight()/2 + (float) (z * Math.sin(mTheta));
在映射到 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 个距离进行排序,取出最小值返回。
上一篇:简约劳动合同通用版
下一篇:越南语-个人劳动合同