ภาพรวมปัญหา
ได้รับจุด P(x,y) และเส้นกระจก ax + by + c = 0 หาจุด P' ที่เป็นภาพกระจกของ P
ตัวอย่าง
อินพุต
P = (2, 1), a = 1, b = -1, c = 0
เอาต์พุต
(1, 2)
วิธีแก้ปัญหา
สูตรเรขาคณิต: จุดกึ่งกลาง M อยู่บนเส้นกระจก และ PP' ⟂ เส้นกระจก
สูตรโดยตรง:
d = -2(ax + by + c) / (a² + b²) x' = x + d·a y' = y + d·b
โค้ดตัวอย่าง
#include <iostream>
using namespace std;
void findMirrorImage(double a, double b, double c, double x, double y) {
double d = -2 * (a * x + b * y + c) / (a * a + b * b);
double xm = x + d * a;
double ym = y + d * b;
cout << "(" << xm << "," << ym << ")";
}
int main() {
double a = -1.0, b = 1.0, c = 0.0;
double x = 1.0, y = 0.0;
cout << "Image of point (" << x << ", " << y << ") using mirror ("
<< a << ")x + (" << b << ")y + (" << c << ") = 0, is: ";
findMirrorImage(a, b, c, x, y);
return 0;
}
เอาต์พุต
Image of point (1, 0) using mirror (-1)x + (1)y + (0) = 0, is:(0,1)
สรุป
ใช้สูตร射影 (Projection) หาจุดกระจก คำนวณ O(1) แบบตรงไปตรงมา