我要求根据数字(2,3 ... n)将一个圆分成N个相等的部分。但我想要分割点的坐标。
我有一个centre(x,y)
和radius(150)
已知的圈子。
问题:
是否有任何公式可以给出分割点的坐标,如图所示。谁能告诉我这个公式。我想用Java实现它。
参考的圆形图片:
答案 0 :(得分:20)
我已经接受了答案......公式完美无缺。 这是用Java编码的解决方案。它将帮助其他开发人员。
private int x[]; // Class variable
private int y[]; // Class variable
private void getPoints(int x0,int y0,int r,int noOfDividingPoints)
{
double angle = 0;
x = new int[noOfDividingPoints];
y = new int[noOfDividingPoints];
for(int i = 0 ; i < noOfDividingPoints ;i++)
{
angle = i * (360/noOfDividingPoints);
x[i] = (int) (x0 + r * Math.cos(Math.toRadians(angle)));
y[i] = (int) (y0 + r * Math.sin(Math.toRadians(angle)));
}
for(int i = 0 ; i < noOfDividingPoints ;i++)
{
Log.v("x",""+i+": "+x[i]);
Log.v("y",""+i+": "+y[i]);
}
}
其中x0和y0是圆的中心的坐标。并且r是半径。
就我而言:
输入 x0 = 0,y0 = 0且r = 150,noOfDividingPoints = 5
输出
第1点:(150,0)
第2点:(46,142)
第3点:( - 121,88)
第4点:( - 121,-88)
第5点:(46,-142)
答案 1 :(得分:18)
您需要在convert和polar坐标之间Cartesian。你需要的角度是将圆圈分成两半的(假想的)垂直线与连接圆心的边界线之间的角度。使用此公式,您可以计算中心的X和Y偏移量。
在示例图像中,第一个角度为0,第二个角度为360 / n。接下来是i*(360/n)
,其中i是您需要绘制的当前行的索引。应用此选项将以顺时针顺序为您提供X和Y偏移(您可以将它们添加到中心的X和Y坐标以查找每个点的坐标)
//x0, y0 - center's coordinates
for(i = 1 to n)
{
angle = i * (360/n);
point.x = x0 + r * cos(angle);
point.y = y0 + r * sin(angle);
}