[i0, i1, i2]
, получаем 5 выходов [o0, o1, o2, o3, o4]
[k00, k01, k02, k03, k04]
,[k10, k11, k12, k13, k14]
,[k20, k21, k22, k23, k24]
.o0 = i0 * k00 + i1 * k10 + i2 * k20
,o1 = i0 * k01 + i1 * k11 + i2 * k21
,k--
, а в какой этого делать не нужно вовсе. 1. Если нужен ближайший разворот: то изначально зеркалируем углы относительно оси максимального расстояния: OX (т.е., все углы станут <180 градусов; 180 - это 0!).
2. Градусы переводим в проценты и делим сумму процентов на общее количество значений.Перевод в проценты и обратно из процентов в градусы – какую проблему решает?
Math.atan2(y, x)
const d2r = d => d * Math.PI / 180;
const r2d = r => r * 180 / Math.PI;
const vec = arr => {
const sum = arr.map(
a => [Math.cos(d2r(a)), Math.sin(d2r(a))]
)
.reduce((p,c) => [p[0]+c[0], p[1]+c[1]], [0,0]);
return r2d( Math.atan2(sum[1], sum[0]));
}
vec([84, 276, 180]); // 180
Сделали уже, чтобы просто секунды щёлкали?