Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรมตรวจสอบจุดสามจุดอยู่บนเส้นตรงเดียวกัน (Collinear) ใน C++

ภาพรวมปัญหา

โปรแกรมนี้ใช้ตรวจสอบว่าจุดสามจุดที่กำหนดอยู่บนเส้นตรงเดียวกัน (Collinear) หรือไม่ โดยใช้หลักเรขาคณิตเรื่องพื้นที่สามเหลี่ยม

หลักการทางคณิตศาสตร์

จุดสามจุด (x1,y1), (x2,y2), (x3,y3) จะอยู่บนเส้นตรงเดียวกันก็ต่อเมื่อพื้นที่ของสามเหลี่ยมที่เกิดจากจุดสามจุดนี้เท่ากับศูนย์

สูตรพื้นที่สามเหลี่ยม:

Area = ½ | x1(y2 - y3) + x2(y3 - y1) + x3(y1 - y2) |

เนื่องจากเราต้องการตรวจสอบเพียงว่าเป็นศูนย์หรือไม่ จึงสามารถลดรูปเป็น:

x1(y2 - y3) + x2(y3 - y1) + x3(y1 - y2) = 0

ขั้นตอนการแก้ปัญหา

  1. รับค่าพิกัดจุดสามจุด: (x1,y1), (x2,y2), (x3,y3)
  2. คำนวณค่า: value = x1*(y2-y3) + x2*(y3-y1) + x3*(y1-y2)
  3. ตรวจสอบเงื่อนไข:
    • ถ้า value == 0 → จุดสามจุดอยู่บนเส้นตรงเดียวกัน (Collinear)
    • ถ้า value != 0 → จุดสามจุดไม่อยู่บนเส้นตรงเดียวกัน

ตัวอย่างโค้ด C++

#include <iostream>
using namespace std;

void checkCollinear(int x1, int y1, int x2, int y2, int x3, int y3) {
    int area = x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2);
    
    if (area == 0)
        cout << "Points are collinear";
    else
        cout << "Points are not collinear";
}

int main() {
    // กรณีที่ 1: ไม่อยู่บนเส้นตรงเดียวกัน
    int x1 = 1, y1 = 1, x2 = 2, y2 = 4, x3 = 3, y3 = 5;
    checkCollinear(x1, y1, x2, y2, x3, y3);  // Output: Points are not collinear
    
    cout << endl;
    
    // กรณีที่ 2: อยู่บนเส้นตรงเดียวกัน (เส้นตั้ง x=1)
    x1 = 1, y1 = 1, x2 = 1, y2 = 4, x3 = 1, y3 = 5;
    checkCollinear(x1, y1, x2, y2, x3, y3);  // Output: Points are collinear
    
    return 0;
}

ผลลัพธ์ตัวอย่าง

Points are not collinear
Points are collinear

กรณีทดสอบเพิ่มเติม

จุดผลลัพธ์คำอธิบาย
(0,0), (1,1), (2,2)Collinearอยู่บนเส้น y=x
(0,0), (1,0), (2,0)Collinearอยู่บนแกน x
(0,0), (1,1), (2,3)Not Collinearไม่อยู่บนเส้นตรงเดียวกัน

ข้อควรระวัง

  • ใช้ตัวแปรประเภท int เหมาะสำหรับพิกัดจำนวนเต็ม
  • หากพิกัดเป็นทศนิยม ควรใช้ double และตรวจสอบด้วยค่า epsilon (เช่น abs(value) < 1e-9)
  • สูตรนี้ทำงานได้กับทุกกรณี รวมถึงเส้นตั้ง (vertical line) ที่ความชันไม่สามารถคำนวณได้