我要实现的是存储构成圆的圆周的所有点的坐标。我知道这实际上是不可能的,因为圆的圆周上有无限个点,但可以说我想存储圆的圆周上每隔1厘米找到的坐标。圆的周长是50cm,所以实际上我将在数组中存储25个值。
这是我到目前为止尝试过的:
for(var degree=0;degree<360;degree++){
var radians = degree * Math.PI/180;
var x = center + radius * Math.cos(radians);
var y = center + radius * Math.sin(radians);
//x & y are the coordinates of points on the circumference
}
但是我上面的代码无法正常工作。帮助将不胜感激!
答案 0 :(得分:3)
为此,您需要按适当的步长(而不是递增角度)来步入角度。因此,通过以下方式定义我们的圈子:
x0,y0
-圆圈中心
r
-半径
d
-点的近似距离
现在我们可以利用圆周长了,
n = ceil (2.0*M_PI*r / d); // integer number of points (rounded up)
da = 2.0*M_PI/n; // floating angular step between points
for (a=0.0,i=0;i;<n;i++,a+=da)
{
x = x0 + r*cos(a);
y = y0 + r*sin(a);
// here x,y is your point
}
对不起,我没有用javascript编写代码,因此代码在C++
中,所以只需更改语法以匹配您的语法即可。
但是,如果您要所有栅格化像素,则可以使用其他方法(Bresenham,midpoint等)来完成,有些方法甚至不需要+,-
进行其他操作,请参见: