Функциональный подход к получению векторного произведения многоугольника - PullRequest
0 голосов
/ 24 мая 2018

Я использую формулу для архивирования области параллелограмма

Математическая формула к векторному продукту: ((x1 * y2 - y1 * x2) + (x2 * y3 - y2 * x3) + (x3 * y4 - y3 * x4) + (x4 * y1 - y4 * x1)) / 2

Дело в том, что я делаю это "вручную":

(points[0].x * points[1].y - points[0].y * points[1].x) +
(points[1].x * points[2].y - points[1].y * points[2].x) +
(points[2].x * points[3].y - points[2].y * points[3].x) +
(points[3].x * points[0].y - points[3].y * points[0].x)) / 2

Есть ли способ архивировать тот же результат, используя что-то вроде reduce, пытаясь избежать классического цикла for?

1 Ответ

0 голосов
/ 24 мая 2018

Вы можете использовать модуль по модулю для доступа к следующей (или обернутой) точке, пока reduce ing:

const vProd = points.reduce((sum, point, i, arr) => {
  const { x, y } = arr[(i + 1) % arr.length];
  return sum
  + point.x * y
  - point.y * x
}, 0);

Не уверен, что это лучше;функция оригинального 4-вкладыша, хотя и длинная, вполне понятна

...