关于点聚合的一点学习

来源:互联网 发布:淘宝机票改签流程 编辑:程序博客网 时间:2024/05/22 11:54

前段时间看到了点聚合的实现原理,http://wenku.baidu.com/link?url=452FtzWd6JfpBWog2jpnLHkaYrlVwlMYA1onW4J4omVaKg0k-68T9D5ONono0cwdsMBC1AFecOikR-7hs_FwMk7MmN8z1U9S7WU0CxKNQN7

抽空按照想法写了第一个方法:

基于网格的点聚合算法(Grid-based Clustering) 的算法,定义了

点类和矩形类,就此保存下来.

package com.lazy.sheep.point;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class GridBasedCluster {public static void main(String[] args) {//生成的点全都在矩形里面,没有考虑点在最大矩形外面的情况int length = 100;//矩形的长度  使用正方形int grids = 5;//划分的矩形格数 横坐标5段,纵坐标5段Point originalPoint = new GridBasedCluster().new Point(0,0);//设置左上角的原点int pointLength = 300;//随机点的个数Point[] points = new Point[pointLength];List<Rectangle> rectangles = genericRectangles(originalPoint,length,grids);//生成矩形genericPoints( pointLength, points);//随机生成点comparePoints(rectangles,points);//将点加入到各个矩形中printArray( points);}public static List<Rectangle> genericRectangles(Point originalPoint,int length,int grids){Point prePoint = null,curPoint = null;int preLat = originalPoint.lat,preLng = originalPoint.lng,curLat = 0,curLng = 0;List<Rectangle> rectangles = new ArrayList<GridBasedCluster.Rectangle>();for(int i=1;i<=grids;i++){//代表横坐标循环preLat = length/grids*(i-1);curLat = length/grids*i;for(int j=1;j<=grids;j++){//代表纵坐标循环preLng = length/grids*(j-1);curLng = length/grids*j;prePoint = new GridBasedCluster().new Point(preLat,preLng);curPoint = new GridBasedCluster().new Point(curLat, curLng);Rectangle rectangle = new GridBasedCluster().new Rectangle();rectangle.leftUpPoint = prePoint;rectangle.rightDownpoint = curPoint;rectangle.createCenetrPoint();rectangles.add(rectangle);}}return rectangles;}public static void genericPoints(int pointLength,Point[] points){for(int i=0;i<pointLength;i++){int lat = (int)(1+Math.random()*99);int lng = (int)(1+Math.random()*99);Point point = new GridBasedCluster().new Point(lat,lng);points[i] = point;}}public static void comparePoints(List<Rectangle> rectangles,Point[] points){for(int i=0;i<points.length;i++){for(int j=0;j<rectangles.size();j++){boolean bool = isIn( points[i], rectangles.get(j));if(bool==true){rectangles.get(j).points.add(points[i]);break;}}}}public static boolean isIn(Point point,Rectangle rectangle){Point leftUpPoint = rectangle.leftUpPoint;Point rightDownpoint = rectangle.rightDownpoint;if(point.lat<=leftUpPoint.lat || point.lng<=leftUpPoint.lng|| point.lat>rightDownpoint.lat || point.lng>rightDownpoint.lng){return false;}return true;}public static void printArray(Object[] points){String list = Arrays.deepToString(points);System.out.println(list);}class Rectangle{Point leftUpPoint;Point rightDownpoint;Point centerPoint;List<Point> points = new ArrayList<GridBasedCluster.Point>();@Overridepublic String toString() {return "Rectangle["+leftUpPoint+" "+rightDownpoint+"],centerPoint["+centerPoint+"],inSize:["+points.size()+"]";}public void createCenetrPoint(){int lat = (rightDownpoint.lat-leftUpPoint.lat)/2+leftUpPoint.lat;int lng = (rightDownpoint.lng-leftUpPoint.lng)/2+leftUpPoint.lng;centerPoint = new Point(lat, lng);}}class Point{Integer lat;Integer lng;@Overridepublic String toString() {return "Point("+lat+","+lng+")";}public Point(int lat,int lng) {this.lat=lat;this.lng=lng;}}}

以后有时间写后面的试试.

  

0 0
原创粉丝点击