我知道这个问题有一个被接受的答案,但我有一个更简单的解决方案。其他答案让我感到困惑,因为我不知道center
、xcenter
、ycenter
是什么,而且函数背后的数学也没有解释清楚,所以我自己去发现了一个数学解决方案。
我的方程非常简单:
cx
是圆心的x点
cy
是圆心的y点
rad
是圆的半径
我的方程/函数通过计算每个可能的点来计算点,给定半径并添加和减去cx
和cy
的偏移量。
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))]
};
}