2楼给出了基本思路,判断各点是否在圆内,然后每个点作为圆心循环一遍即可。
不过这样循环计算量略大,若数据点数为N,基本要判断N*(N-1)次
当N很大时,计算会比较费时间。
楼主可以通过向量化来提高计算效率。
假设从数据库中提取的圆心坐标序列分别为X,Y。(X,Y都为列向量,假设长度为n)
1.构建一个矩阵【 (x_i-x_j)^2 +(y_i-y_j)^2】_nxn,通过与 r^2的差值,就可以轻易的判断某个点在半径r内的点数。
2,目标矩阵的构造可简化成【(x_i-x_j)^2 】_nxn 矩阵的构建,因为后半部分类似
3.【(x_i-x_j)^2 】_nxn的矩阵可分解为[(x_i)^2 + (x_j)^2 -2 *(x_i)*(x_j)]_nxn
4.继续分解成3个n x n矩阵,并分别实现
[(x_i)^2 ]_nxn 的实现:X.^2*ones(size(X,2),size(X,1))
[(x_j)^2 ]_nxn 的实现:(X.^2*ones(size(X,2),size(X,1)))',把上面的转置一下即可
【 -2 *(x_i)*(x_j)]_nxn的实现:-2*X*X'
ok,任务完成
楼主按照4到1的顺序编程,就可以看到符合要求的点分布了,最后再用一个sum函数,就可以得到需要的结果饿了。
避免过多循环,可以提高运行速度,