const { zip } = require('lodash');
/**
* 四舍五入, 保留 digit 为小数
*/
const round = (number, digit = 2) => {
const t = 10 ** digit;
return Math.round(number * t) / t;
};
const calcAverage = array => {
const total = array.reduce((previous, current) => previous + current, 0);
return total / array.length;
};
const calcDispersionHtt = (xs, ys) => {
const x0 = calcAverage(xs);
const y0 = calcAverage(ys);
const ls = zip(xs, ys).map(([x, y]) => Math.sqrt((x - x0) ** 2 + (y - y0) ** 2));
const l0 = calcAverage(ls);
const dispersion = Math.sqrt(calcAverage(ls.map(l => (l - l0) ** 2)));
return round(dispersion);
};
const calcDispersionMoon = (xs, ys) => {
const ls = zip(xs, ys).map(([x, y]) => Math.sqrt(x ** 2 + y ** 2));
const l0 = calcAverage(ls);
const dispersion = Math.sqrt(calcAverage(ls.map(l => (l - l0) ** 2)));
return round(dispersion);
};
// input x的数组, y的数组
const resultHtt = calcDispersionHtt([1,2,3], [4,4,6]);
console.log(resultHtt);
const resultMoon = calcDispersionMoon([1,2,3], [4,4,6]);
console.log(resultMoon);