Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 2차원 평면에서 점의 거울 이미지 찾기


이 문제에서 2차원 평면의 점 P와 방정식 ax + by + c =0의 점 a, b가 주어집니다. 우리의 임무는 다음을 찾는 것입니다. pointin 2-D 평면의 미러 이미지입니다.

문제를 이해하기 위해 예를 들어보겠습니다.

입력

P = (2, 1), a = 1, b = -1, c = 0

출력

(1, 2)

설명

비행기는 다음과 같습니다.

C++에서 2차원 평면에서 점의 거울 이미지 찾기

솔루션 접근 방식

문제를 해결하려면 좌표(x', y')가 있는 방정식 점 P'를 찾아야 합니다. 따라서 선 형태 P - P'가 거울 선과 교차하는 중간점인 R이 있습니다.

선 P-R-P'는 거울에 수직입니다. 따라서 선의 방정식은 다음과 같습니다.

ay - by + d = 0

점은 P(x, y) 입니다. P'(x', y'); R(xm, ym).

점 P와 R이 알려져 있습니다. 따라서 방정식을 사용하여 P'를 다음과 같이 찾을 수 있습니다.

$$\left(\frac{??'-??}{??}\right)=\left(\frac{??'-??}{??}\right)=\left(\frac{ ????-????+??}{??^2+x^2}\right)$$

우리 솔루션의 작동을 설명하는 프로그램

예시

#include <iostream>
using namespace std;
void findMirrorImage( double a, double b, double c, double x, double y){
   double points = -2 * (a * x + b * y + c) / (a * a + b * b);
   double xm = points * a + x;
   double ym = points * b + y;
   cout<<"("<<xm<<","<<ym<<")";
}
int main(){
   double a = -1.0;
   double b = 1.0;
   double c = 0.0;
   double x = 1.0;
   double 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)