Android:自定義view之角度與弧度

前言
  • 為什么講這個?
    在我們自定義View,尤其是制作一些復(fù)雜炫酷的效果的時候,實際上是將一些簡單的東西通過數(shù)學(xué)上精密的計算組合到一起形成的效果。
    這其中可能會涉及到畫布的相關(guān)操作(旋轉(zhuǎn)),以及一些正余弦函數(shù)的計算等,這些內(nèi)容就會用到一些角度、弧度相關(guān)的知識。

  • 為什么對角的描述存在角度與弧度兩種單位?
    簡單來說就是為了方便,為了精確描述一個角的大小引入了角度與弧度的概念。
    由于兩者進制是不同的(角度是60進制,弧度是10進制),在合適的地方使用合適的單位來描述會更加方便。
    例如: 角度是60進位制,遇到30°6′這樣的角,應(yīng)該轉(zhuǎn)化為10進制的30.1°。但弧度就不需要,因為弧度本身就是十進制的實數(shù)。(當求∠AOB的時候,得到弧度可能是0.52,轉(zhuǎn)換為角度可能就是30.1 °,只是表示形式不同,下文會介紹怎樣快速計算弧度從而轉(zhuǎn)化為角度)

角度與弧度的定義

角度和弧度一樣都是描述角的一種度量單位,下面是它們的定義:
角度 兩條射線從圓心向圓周射出,形成一個夾角和夾角正對的一段弧。當這段弧長正好等于圓周長的360分之一時,兩條射線的夾角的大小為1度.
弧度 兩條射線從圓心向圓周射出,形成一個夾角和夾角正對的一段弧。當這段弧長正好等于圓的半徑時,兩條射線的夾角大小為1弧度.(也就是1弧度是一個double值)

1度
1弧度
角度和弧度的換算關(guān)系

rad 是弧度, deg 是角度


應(yīng)用

在自定義view中求一個角度的時候,先求出弧度在轉(zhuǎn)化為角度
假設(shè):點擊view中一點A(touchPoint.x,touchPoint.y),求出相對于O(centerPoint.x,centerPoint.y)的角度(A就是view坐標系中點擊的一點,O就相當于view的中心點)

 // 兩點在X軸的距離
float lenX = (float) (touchPoint.x - centerPoint.x);
// 兩點在Y軸距離
float lenY = (float) (touchPoint.y - centerPoint.y);
// 兩點距離
float lenXY = (float) Math.sqrt((double) (lenX * lenX + lenY * lenY));
// 計算弧度
double radian = Math.acos(lenX / lenXY) * (touchPoint.y < centerPoint.y ? -1 : 1);
double tmp = Math.round(radian / Math.PI * 180); 
// 計算角度
double angle =tmp >= 0 ? tmp : 360 + tmp;

自定義View目錄

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容