安卓编程坐标系的一个问题
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個距離進行排序,取出最小值返回。
總結
以上是生活随笔為你收集整理的安卓编程坐标系的一个问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编程哲学动态性的思考
- 下一篇: SAP CRM WebClient UI