Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

กำลังตรวจสอบรูปหลายเหลี่ยมนูนใน JavaScript


รูปหลายเหลี่ยมนูน

รูปหลายเหลี่ยมนูน ถูกกำหนดให้เป็น รูปหลายเหลี่ยม ด้วยมุมภายในทั้งหมดน้อยกว่า 180°

ปัญหา

เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่ใช้อาร์เรย์ของพิกัด โดยพื้นฐานแล้วอาร์เรย์จะเป็นอาร์เรย์ของอาร์เรย์แต่ละอาร์เรย์ย่อยที่มีตัวเลขสองตัวพอดีกัน โดยระบุจุดบนระนาบ 2 มิติ

ฟังก์ชันของเราควรกำหนดว่ารูปหลายเหลี่ยมที่เกิดจากจุดเหล่านี้เป็นรูปหลายเหลี่ยมนูนหรือไม่ ถ้าใช่ ฟังก์ชันควรคืนค่าเป็น จริง มิฉะนั้น เท็จ

ตัวอย่างเช่น หากอินพุตของฟังก์ชันคือ −

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