求助高手

lilin138000 2009-10-27 02:05:04
我现在有一张表,里面有两个字段,分别是x,y坐标
我现在得到的参数比如是(0,0),(900,900),30,30四个参数
就是把这个坐标范围(0,0),(900,900)分成横30块,纵30块,
即 Xmin,Xmax Ymin,Ymax
0,0 30,30
30,0 60,30
60,0 90,30
......
870,870 900,900
共900块
有什么高效的方法可以求出每块区域里点的个数,即表x,y的坐标落在这个区域里(sql或算法)
...全文
92 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
rookie001 2009-10-27
  • 打赏
  • 举报
回复
如果用sql的话,我估计得用个循环,循环次数就是块数,每次更改一下Xmin等不就行了,就用这个
select count(*) from table where x>Xmin and x <Xmax and y>Ymin and y <Ymax
lilin138000 2009-10-27
  • 打赏
  • 举报
回复
谢谢楼上
你的道理我明白,我现在就是如果表的数据量很大,像这样把数据全取出再逐条比较效率是一个问题
这样的SQL应该怎么写呢
rookie001 2009-10-27
  • 打赏
  • 举报
回复
上面是count[xBelong][yBelong] ++;
写漏啦
rookie001 2009-10-27
  • 打赏
  • 举报
回复
你用sql 的方法当然可以

其实也可以逐个匹配,计数,无非也是O(n)的复杂度
设count[30][30],x轴范围的最左边界xL,最有边界xR,y轴类似,yU,yD
每个小范围宽度XWidth = (xR-xL)/30,同理得YWidth
对每个(x,y)
if(x<xL || x>xR || y>yU||y<yD)
return;
xBelong = (x-xL)/XWidth;--取整
yBelong = ( y-yD)/YWidth
count[xBelong][yBelong]
上述是假设,x,y>0,对负数情况应该也可以做一下处理即可
lilin138000 2009-10-27
  • 打赏
  • 举报
回复
我得到的是一个坐标范围,把这个范围分成若干块,那么每块都会有自己的坐标
而我的表里每条记录都是一个点的x y坐标,如果只有一块范围的话
sql:
select count(*) from table where x>Xmin and x<Xmax and y>Ymin and y<Ymax

因为我得到的范围坐标和分成的块数是不确定的,不知这样的SQL好不好写,或是有别的办法
验证码识别 2009-10-27
  • 打赏
  • 举报
回复
区域里点的个数: (Xmax - Xmin+1)*(Ymax - Ymin+1)

应该不是楼主要的,不理解楼主要求

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧