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

หาจุดกระจกของจุดในระนาบ 2D ด้วย C++


ภาพรวมปัญหา

ได้รับจุด 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) แบบตรงไปตรงมา