24小时热门版块排行榜    

查看: 1876  |  回复: 4

张益坤

新虫 (初入文坛)

[求助] Matlab技术在某个圆内的点的个数 已有3人参与

请看图片,谢谢大神教教我,怎么做,或者我要怎么去学习。新手很迷茫

Matlab技术在某个圆内的点的个数
QF2Z1W]BYPAYQR6WIGG~}J8.png
回复此楼

» 收录本帖的淘帖专辑推荐

规范

» 猜你喜欢

科研有我,我在科研
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dingd

铁杆木虫 (职业作家)

【答案】应助回帖

感谢参与,应助指数 +1
计算出每个点到圆心的距离,小于半径的视为在园内,反之则园外。
2楼2015-11-23 20:38:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

onelightwang

金虫 (小有名气)

【答案】应助回帖

感谢参与,应助指数 +1
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函数,就可以得到需要的结果饿了。
避免过多循环,可以提高运行速度!
3楼2015-11-23 23:15:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

快乐时光lk

新虫 (小有名气)

【答案】应助回帖

感谢参与,应助指数 +1
还有一个方法,跟楼上各位都不同,就是把这数据转换成两张栅格矩阵,第一张圆变成一个面状的矩阵,圆内部设为1,外部设为0。第二张图,点直接转换成1,其他区域转换成0,把两个矩阵相点乘.* 得到的结果图,我们只需统计其中1的个数即为点数

发自小木虫IOS客户端
4楼2015-11-24 01:38:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

快乐时光lk

新虫 (小有名气)

选哪个都要根据数据的特点来选,如果圆是由公式确定的,用上面的的方法很好,但若是不知道圆心或半径或者是shp文件可以考虑我这个方法

发自小木虫IOS客户端
5楼2015-11-24 01:42:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 张益坤 的主题更新
信息提示
请填处理意见