- 借助三角函数计算坐标点
- Android坐标系是以水平方向为x轴,竖直方向为y轴,所以Android中角度的计算都是以x轴为参照标准,以圆为例,3点钟为0度此时贴合x轴,顺时针为90度,180度,270度,360度(和0度贴合)逆时针:-90度,-180度,-270度,-360度(和0度贴合),坐标计算这个参照标准很重要。
- 在知道一条边长的情境下, 借助于三角函数 正弦,余弦 函数可以轻松计算出对应点的坐标,不局限于圆,其他也可以。
- 以圆为例,知道半径和对应的角度(注意参照)可以计算出园中的任意一个点的坐标,需要注意的是这个坐标是相对于圆心的,所以点的绝对坐标需要加上圆心的坐标。
- 具体的计算可以参考下面文章。
- 借助反三角函数计算角度
- 知道坐标系上的任意两点,都可以借助于反正切函数计算出两点的角度,需要注意的是角度依然相对于x轴参照,顺时针为正,逆时针为负。
- 由上一条可知,计算x轴参照顺时针则y差值取正,逆时针则y差值取负(点的y的取值顺序决定)
- 若角度与y轴参照亦可以通过反正切函数计算其角度,与x轴相反的是x的差值。
- 逆时针a于顺时针的360度减去a的正切值关系为正负关系,即-a的正切值和360度减去a的正切值相等。
- 若计算出两点间的角度是负的,则为逆时针,加上360即可。
- 两点计算角度可以参考下面文章
- 借助三角函数计算钟表的时刻(圆中圆绘制)
- 需求:绘制大圆并将大圆按照角度分为12个小圆,计算出每一个小圆的圆心
- 圆心半径绘制大圆
- 12刻度则将大圆分为12份,每一角度为30度,小圆半径已知,可以计算内心圆的半径
- 根据 内心圆半径和角度借助三角函数可以计算出12小圆的圆心,根据其圆心和小圆半径可以绘制对应的12小圆。
- 扇形上绘制文本和圆心绘制文本
- 绘制文本相关可以参考文章,需要特别注意的是xy坐标值取决于Textalign和文本基线,并不是单纯的文本的左上顶点坐标值(这个和图片的绘制不一样)。
-
圆居中绘制文本,根据圆半径计算文本rect,x居中,y是rect居中+基线,由此可以绘制,即:
计算居中文本xy坐标值
- 扇形绘制文本:扇形绘制文本等同于圆居中绘制文本,同样需要计算文本绘制的xy坐标值,xy坐标值如上取决于textalign和文本基线,扇形角度都存在,半径也存在,根据半径和角度结合三角函数可以计算出点的坐标值,根据坐标值和textalign和文本基线可以实现扇形绘制文本。
- 在4的需求基础上校验点击的点在哪一个范围内(点击点角度在哪一个范围上)。
- 点击点和圆心两个点可以借助反三角函数计算x轴参照的角度,角度和扇形的角度对比即可校验用户点击那一块区域。
- 注意x轴为0度,注意扇形的度数顺时针还是逆时针。
- 校验圆中绘制的时刻是否与当前的时刻匹配
- 与上面校验类似,时刻的校验分为时针和分针的校验,而每一个时刻都有相应的角度,用户绘制的时针和分针的结束点与圆心点计算x轴参照对应的角度匹配计算即可。
- 计算角度若为负加上360即可。
- 扩展:校验用户绘制圆是否为圆的校验算法:记录起点,取用户所有绘制的点计算出最长路径,若是圆与起点最远的点就是直径点,由此可以计算出圆心和半径,标准半径有了,后续校验所有点到圆心点的半径和标准半径即可,手动绘制可以适当放宽标准即标准半径可以内外扩展像素。
参考文章:
Android:计算圆上的某点坐标
Android:两点计算与坐标轴间的夹角
Android:text文本绘制
Android:扇形绘制及其扇形上绘制文本
Android:圆的校验
Android:打造自己的时钟











网友评论