ภาพรวมปัญหา
โปรแกรมนี้ใช้ตรวจสอบว่าจุดสามจุดที่กำหนดอยู่บนเส้นตรงเดียวกัน (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
ขั้นตอนการแก้ปัญหา
- รับค่าพิกัดจุดสามจุด: (x1,y1), (x2,y2), (x3,y3)
- คำนวณค่า:
value = x1*(y2-y3) + x2*(y3-y1) + x3*(y1-y2) - ตรวจสอบเงื่อนไข:
- ถ้า 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) ที่ความชันไม่สามารถคำนวณได้