Я работаю над проектом взвешенной интерполяции. Каждая станция имеет координатную точку на карте, как показано ниже.
var stationCoor = [[408,352],[525,348],[535,495],[420,400],[272,145],[175,195],[197,335]];
Я беру точки, расположенные в озере, и использую их для создания средневзвешенных значений входных данных с этих станций. Вот моя функция для определения взвешенных чисел.
function findWeightSpeed(xPos, yPos){
var totalHypt = 0;
var arrHpyt = [];
var arrWeight = [];
for(var l=0;l<7;l++){
var xDis = Math.abs(xPos-stationCoor[l][0]);
var yDis = Math.abs(yPos-stationCoor[l][1]);
var hptSq = Math.pow(xDis,2)+Math.pow(yDis,2);
var hypt = Math.sqrt(hptSq);
totalHypt = totalHypt+hypt;
arrHpyt.push(hypt);
}
for(var j=0;j<7;j++){
arrWeight.push(arrHpyt[j]/totalHypt)
}
return arrWeight;
}
Это находит гипотенузу между точкой (xPos,yPos) и станциями. Затем он суммирует данные и делит каждую станцию на общую сумму, в результате чего получаются взвешенные числа.
Мне нужно использовать эти точки для взвешивания направления ветра с этих станций. Я использовал приведенную ниже функцию для расчета среднего балла.
function averageAngles(){
var x = 0;
var y = 0;
var pi = 22/7;
var angle = [2.7925,2.8797,2.9670,3.0543, 0.0872]; // 310,320,330,340,10
for(var i = 0; i < angle.length; i++) {
x += Math.cos(angle[i]);
y += Math.sin(angle[i]);
}
var average_angle = Math.atan2(y, x);
console.log((average_angle/pi)*360);
}
Это дало мне точную информацию о средневзвешенном значении 0,20 для всех точек. Однако средневзвешенные баллы для 7 станций (как показано ниже на карте) аналогичны [0.1076839005418769, 0.08051796093187284, 0.003987308213631277, 0.08458358029618485, 0.2463427297217639, 0.26463834002675196, 0.21224618026791833]
.
Как мне создать функцию, которая берет средневзвешенные числа из findWeightSpeed()
и использует ее для взвешивания круговых величин в averageAngles()
?
Я использовал это Как вы вычисляете усреднение набора круговых данных? сделать функцию для усреднения углов.
Большое спасибо за любые предложения.