我知道这个问题有一个公认的答案,但我有一个更简单的解决方案。其他答案让我感到困惑,因为我不知道center
, xcenter
,ycenter
是什么,并且函数背后的数学无法解释,我跋涉寻找自己的数学解决方案。
我的方程式很简单:
cx
是圆心的 x 点
cy
是圆心的 y 点
rad
是圆的半径
我的方程/函数所做的是通过计算给定半径的每个可能点来计算点,并添加和减去 和 的偏移cx
量cy
。
//Creates an array filled with numbers
function range(begin, end) {
for (var i = begin, arr = []; i < end; i++) {
arr.push(i);
}
return arr;
}
function calculateAllPointsInCircle(cx, cy, rad) {
var rang = range(-rad, rad + 1);
var px = [];
var py = [];
var xy = [];
for (var i = 0; i < rang.length; i++) {
var x = cx + rang[i];
px.push(x);
for (var l - rang.length - 1; l > 0; l--) {
var y = cy + rang[l];
if (!py.indexOf(y)===-1) { py.push(y); }
xy.push(x+','+y);
}
}
return {
x: x,
y: y,
xy: xy
}
}
性能远高于其他答案: http: //jsperf.com/point-in-circle/4
您可以用数学检查我的方程式,使用将验证给定点是否在圆圈内的方程式x*x + y*y <= r*r
或x^2 + y^2 <= r^2
编辑 - 超压缩 ES6 版本:
function range(begin, end) {
for (let i = begin; i < end; ++i) {
yield i;
}
}
function calculateAllPointsInCircle(cx, cy, rad) {
return {
x: [cx + i for (i of range(-rad, rad + 1))],
y: [cy + i for (i of range(-rad, rad + 1))]
};
}