在JavaScript中检查凸多边形

凸多边形

凸多边形被定义为多边形 ,其所有的内角小于180°。

问题

我们需要编写一个JavaScript函数,该函数接受一个坐标数组,基本上该数组将是一个数组数组,每个子数组都恰好包含两个数字,并指定了二维平面上的一个点。

我们的函数应该确定由这些点形成的多边形是否是凸多边形。如果是,则该函数应返回true,否则返回false。

例如,如果函数的输入为-

const arr = [[0,0],[0,1],[1,1],[1,0]];

那么输出应该是-

const output = true;

输出说明:

这些点将绘制出一个完美的正方形,其中所有顶点的内角均为90度。

示例

为此的代码将是-

const arr = [[0,0],[0,1],[1,1],[1,0]];
const isConvex = (arr = []) => {
   const { length } = arr;
   let pre = 0, curr = 0;
   for (let i = 0; i < length; ++i) {
      let dx1 = arr[(i + 1) % length][0] - arr[i][0];
      let dx2 = arr[(i + 2) % length][0] - arr[(i + 1) % length][0];
      let dy1 = arr[(i + 1) % length][1] - arr[i][1];
      let dy2 = arr[(i + 2) % length][1] - arr[(i + 1) % length][1];
      curr = dx1 * dy2 - dx2 * dy1;
      if (curr != 0) {
         if ((curr > 0 && pre < 0) || (curr < 0 && pre > 0))
            return false;
         else
            pre = curr;
      };
   };
   return true;
};
console.log(isConvex(arr));
输出结果

控制台中的输出将是-

true