矩形相似度匹配 , 两条件决定因素的相似度匹配

来源:互联网 发布:龙门县平陵镇网络问政 编辑:程序博客网 时间:2024/05/22 08:28

多个长宽尺寸的矩形,现根据给定的尺寸找出最匹配矩形,比如:接口根据客户端的屏幕尺寸返回尺寸最匹配的图片。

图片由宽高两个参数决定,但匹配不仅看宽高的接近程度,还要看宽高的比例的接近程度。

可以做了个转换,有三组宽高:(d0,h0)、(d1,h1)、(d2,h2) 看做在坐标系中三个点,这个问题就变成坐标系中一堆坐标的问题,则这一堆坐标中与目标坐标最接近的为相似度最高的。

public class Point {    private double x;    private double y;    public Point(double x, double y) {        this.x = x;        this.y = y;    }    //getter setter}public class Main {    public static void main(String[] args) {        List<Point> lis = new ArrayList<Point>();        lis.add(new Point(100,325));        lis.add(new Point(241,524));        lis.add(new Point(250,623));        lis.add(new Point(103,222));        lis.add(new Point(134,329));        System.out.println("匹配集合:"+lis.toString());        Point point = new Point(200, 421);        System.out.println("匹配目标:"+point);        System.out.println("匹配结果:"+getMinDistance(lis,point));    }    //计算两点间距离    public static double distance(Point p1, Point p2) {        double dx = p1.getX() - p2.getX();        double dy = p1.getY() - p2.getY();        return Math.sqrt(dx * dx + dy * dy);    }    //查找目标点与点集中最近点    public static Point getMinDistance(List<Point> list,Point point) {        Double distance = Double.MAX_VALUE;        Point result = null;        for(Point p:list){            double d = distance(point, p);            if(d < distance){                distance = d;                result = p;            }        }        return result;    }}

代码地址