.net 判断坐标是否在范围内_安卓编程坐标系的一个问题

博客讨论了在.NET中如何判断点击事件是否发生在3D模拟的椭圆图标内的问题。作者指出,由于3D坐标依赖于角度计算,而设备坐标系的转换函数不精确,导致无法直接判断点击坐标是否在图标矩形范围内。目前的解决方案是计算点击点与近似转换的2D坐标之间的距离,通过比较距离来确定最接近的图标。
摘要由CSDN通过智能技术生成

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的)

```java

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个距离进行排序,取出最小值返回。

b2e9bb0d99317a11c2b6aec7fd612a9c.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值