如何找出坐标集合中的最热区域

几个场景

思考这样的场景:

  1. 场景一:我们拥有北京时所有商场的位置坐标,现在我们想知道整个北京市哪里商场最多
    2. 场景二:在第一个场景的基础上,我们想知道北京各块区域的繁华程度

想解决场景一的问题,我们要对北京进行划分,划分方式也比较多:比如按照行政区、按照商圈、按照n*n的tile划分。接着求每个区域的商场数量,然后商场数量最多的区域就可以。

初步求解

把北京分块

考虑到我们没有北京时范围的坐标,所以不能直接把北京市分块,而又没有北京市商圈、行政区的坐标范围。我们只能找出包含所有已知坐标的最小矩形,也就是取矩形做顶点(Xmin,Ymax)以及矩形右顶点(Xmax,Ymin),这里先假设坐标都是正数,大概思路如下

points := make(Point,0)
minX, minY, maxX, maxY := 0, 0, 0, 0
for _, v := range points {
   
	if minX == 0 || v.X < minX {
   
		minX = v.X
	}
	if minY == 0 || v.Y < minY {
   
		minY = v.Y
	}
	if v.X > maxX {
   
		maxX = v.X
	}
	if v.Y > maxY {
   
		maxY = v.Y
	}
}

有个最小矩形后,我们就可以把最小矩形分成小正方形,来达成对北京模拟分块的目的,划分后其实后形成一个i*i矩阵,思路如下:

const tileCount = 10
matrix := make([][]int, tileCount)
for _, v := range matrix {
   
	v = make([]int, tileCount)
}
tileXInterval := float((maxX - minX) / tileCount)
tileYInterval := float((maxY- minY) / tileCount)

注意为了保证精度,上面interval用了float类型。于是矩阵坐标(m,n)的中心点坐标就是:
(Xn,Ym) = (minX + tileXInterval * n + tileXInterval / 2, minY + tileYInterval * m + tileYInterval / 2)

求每小块中样本个数

把每个样本放入指定的小块中就是算每个样本数据在i*i矩阵中的坐标。然后对矩阵每小块进行统计

for _, point := range points 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值