Android 计算弧中心点,知道它';s开始和结束度

Android 计算弧中心点,知道它';s开始和结束度,android,canvas,geometry,Android,Canvas,Geometry,对这个答案最快的描述是,我试图找到白点的坐标。深红色是绘制圆(深蓝色)上的绘制圆弧 较长的解释是: 我有一个类正在扩展视图,它正在画布上画一个圆(画布的宽度和高度相等): 然后我画了一条N%宽的弧(在这个例子中是225)。圆弧从-90度开始(因为画布中的0度表示3点钟)和“偏移”N度(本例中为225度) 我试图计算X/Y坐标或剩余圆弧的中心(红色圆弧未覆盖的区域;介于N和360之间) 我有圆的半径,它是canvasWidth/2,如果有帮助的话 下面是我如何绘制红色弧线: long arcEnd

对这个答案最快的描述是,我试图找到白点的坐标。深红色是绘制圆(深蓝色)上的绘制圆弧

较长的解释是: 我有一个类正在扩展
视图
,它正在画布上画一个圆(画布的宽度和高度相等):

然后我画了一条N%宽的弧(在这个例子中是225)。圆弧从-90度开始(因为画布中的0度表示3点钟)和“偏移”N度(本例中为225度)

我试图计算X/Y坐标或剩余圆弧的中心(红色圆弧未覆盖的区域;介于N和360之间)

我有圆的半径,它是canvasWidth/2,如果有帮助的话

下面是我如何绘制红色弧线:

long arcEnd = (360 * fractionNumber) / totalNumber;
canvas.drawArc(rectF, -90, arcEnd, true, paint);
(原始答案已更新。现在可能有点太冗长,但我希望它能有所帮助。)

您正在寻找XY坐标(称为笛卡尔坐标),但这些坐标很难直接计算。诀窍是先通过极坐标。极坐标和笛卡尔坐标是表达同一事物的两种方式,即网格中的一个点,可以相互转换

极坐标由与中心点的角度和距离组成。您可以计算所需的角度,因为您知道需要覆盖的圆的百分比,您可以计算到圆心的距离,因为您知道圆的半径

你的覆盖弧是225度,所以剩下的是135度,一半是67.5度。因此,您要查找的点的角度为225+67.5=292.5度。该点的半径是圆半径的一半,因此这是
canvasWidth/4

一旦确定了极坐标,
(292.5,canvasWidth/4)
,就可以使用将其转换为XY坐标。有一件事有点棘手:
Math.cos(double)
Math.sin(double)
希望他们的论点是in,而不是度。在进行转换之前,将292.5/360表示为x/2π,将值乘以π/180,在本例中为5.1051

假设
canvasWidth
为400:

double tdeg 292.5d; // Calculated from arc percentage 
int r =  100;      // Calculated from canvas width

double trad = tdeg * (Math.PI/180d); // = 5.1051

int x = (int) r * Math.cos(trad);
int y = (int) r * Math.sin(trad);

你能详细说明一下吗?我尝试通过
Math.atan2(X,Y)
运行原始的X和Y坐标,但它只返回一个类似
0.8612618928415864
的数字。你知道如何将其转换为实际坐标吗?转换过程中输入的不是XY坐标(笛卡尔坐标),而是极坐标。极坐标和笛卡尔坐标只是表示同一事物(网格中的一个点)的两种方式。极坐标由角度(通常在0到360之间,或整圈为0到2π)和到中心点的距离组成。您可以计算所需的角度,因为您知道百分比,您可以计算距离,因为您知道圆的半径。确定极坐标后,使用我链接的函数将其转换为XY坐标。有人找到解决方案吗?非常感谢你的帮助thanks@Barend为什么我们要做
canvasWidth/4
double tdeg 292.5d; // Calculated from arc percentage 
int r =  100;      // Calculated from canvas width

double trad = tdeg * (Math.PI/180d); // = 5.1051

int x = (int) r * Math.cos(trad);
int y = (int) r * Math.sin(trad);