用 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

更新於: 04-03-2021

376 次瀏覽

開啟職業生涯

完成課程以獲得認證

開始學習
廣告