更长的解释:
我有一个正在扩展VIEw的类,它在画布上绘制一个圆(画布具有相等的宽度和高度):
canvas.drawArc(rectF,360,true,paint); // movals is a RectF object with 4 coordinates
然后我绘制一个N%宽的弧(在这种情况下假设为225).弧从-90度开始(因为画布中的0度意味着3’o时钟)并且“偏离”N度(在该示例中为225度).
我试图计算X / Y坐标或剩余弧的中心(红色弧未覆盖的区域;在N和360之间).
我有圆的半径,canvasWIDth / 2,如果有一些帮助.
这是我画红弧的方式:
long arcEnd = (360 * fractionNumber) / totalNumber;canvas.drawArc(rectF,-90,arcEnd,paint);解决方法 (原始答案更新.现在可能有点过于冗长,但我希望它有所帮助.)
您正在寻找XY坐标(称为笛卡尔坐标),但这些坐标很难直接计算.诀窍是首先通过Polar坐标.极坐标和笛卡尔是表达同一事物的两种方式,即网格中的一个点,可以相互转换.
极坐标包括距中心点的角度和距离.您可以计算所需的角度,因为您知道需要覆盖的圆的百分比,并且您可以计算距离中心的距离,因为您知道圆的半径.
你的覆盖弧度是225度,所以剩下的是135度,一半是67.5度.因此,您要寻找的点的角度为225 67.5 = 292.5度.该点的半径是圆的半径的一半,因此是canvasWIDth / 4.
一旦确定了极坐标(292.5,canvasWIDth / 4),就可以使用conversion function将其转换为XY坐标.有一件事有点棘手:Math.cos(double)和Math.sin(double)期望他们的论点是在radians,而不是学位.在进行转换之前,将292.5 / 360表示为x /2π,通过将该值乘以π/ 180,在这种情况下得到5.1051.
假设canvasWIDth为400:
double tdeg 292.5d; // Calculated from arc percentage int r = 100; // Calculated from canvas wIDthdouble Trad = tdeg * (Math.PI/180d); // = 5.1051int x = (int) r * Math.cos(Trad);int y = (int) r * Math.sin(Trad);总结
以上是内存溢出为你收集整理的android – 计算弧心点,了解它的起点和终点全部内容,希望文章能够帮你解决android – 计算弧心点,了解它的起点和终点所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)