找到最接近的比例算法

时间:2015-10-23 16:31:51

标签: javascript algorithm sorting

鉴于我有一系列比例(3个值总共产生100%):

var proportions = [[10,10,80],[20,30,50],[40,20,40],[0,0,100]];

如何按照接近(距离)的顺序对任何给定比例的数组进行排序?

例如,sortProportions(proportions, [22,28,50])会返回[[20,30,50],[10,10,80],[40,20,40],[0,0,100]]

这里[20,30,50]是第一个,因为它与[22,28,50]的比例最接近。但是对另一方不确定。

在数学术语中,它被称为三元图。问题归结为在三元图上找到两点之间的距离。

1 个答案:

答案 0 :(得分:1)

假设您的意思是每个维度接近度的差异平方和

function distance2(p1, p2) {
    return Math.pow(p1[0] - p2[0], 2) + Math.pow(p1[1] - p2[1], 2) + Math.pow(p1[2] - p2[2], 2)
}

// given point
var gP = [20, 30, 55];

// sort 
var output = [[10, 10, 80], [20, 30, 50], [40, 20, 40], [0, 0, 100]].sort(function (a, b) {
    // -1 if a before b
    //  1 if a after b
    //  0 if no change
    return Math.sign(distance2(a, gP) - distance2(b, gP));
});