鉴于我有一系列比例(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]的比例最接近。但是对另一方不确定。
在数学术语中,它被称为三元图。问题归结为在三元图上找到两点之间的距离。
答案 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));
});