声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1100|回复: 1

[综合讨论] 如何找一个点附近的四个点?

[复制链接]
发表于 2010-1-29 11:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
假设在一个点周围随机分布着一些点且坐标都是已知的,如何快速定位它附近的四个点?这里,“附近”的涵义是以该点为原点,将平面划分为四个象限,分别从这四个象限中找一个与该点距离最近的点出来。

回复
分享到:

使用道具 举报

发表于 2010-1-29 14:39 | 显示全部楼层
我编了一个函数,代码如下:
  1. function  Point = FindPoint(xy0, xy)
  2. % xy0为多行2列的矩阵,xy为包含2个元素的向量

  3. Point = cell(1,4);
  4. x = xy0(:,1) - xy(1);
  5. y = xy0(:,2) - xy(2);
  6. % 第一象限
  7. id1 = (x>0 & y>0);
  8. Point{1} = subfun(id1,x,y,xy0);
  9. % 第二象限
  10. id2 = (x<0 & y>0);
  11. Point{2} = subfun(id2,x,y,xy0);
  12. % 第三象限
  13. id3 = (x<0 & y<0);
  14. Point{3} = subfun(id3,x,y,xy0);
  15. % 第四象限
  16. id4 = (x>0 & y<0);
  17. Point{4} = subfun(id4,x,y,xy0);

  18. % 子函数
  19. function xyPoint = subfun(id,x,y,xy0)
  20. xyPoint = [];
  21. x1 = x(id);
  22. if ~isempty(x1)
  23.     y1 = y(id);
  24.     distance = x1.^2 + y1.^2;
  25.     xy0_1 = xy0(id,:);
  26.     xyPoint = xy0_1(find(distance == min(distance)),:);
  27. end
复制代码
用法:
  1. >> xy0 = normrnd(0,1,100,2);
  2. >> xy = [0 0];
  3. >> p = FindPoint(xy0,xy)

  4. p =

  5.     [1x2 double]    [1x2 double]    [1x2 double]    [1x2 double]

  6. >> p{:}

  7. ans =

  8.     0.0689    0.0327


  9. ans =

  10.    -0.3368    0.2209


  11. ans =

  12.    -0.0896   -0.2915


  13. ans =

  14.     0.0618   -0.0210
复制代码

[ 本帖最后由 xiezhh 于 2010-1-29 14:40 编辑 ]

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-22 01:28 , Processed in 0.058300 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表