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

C++에서 중간점을 사용하여 사각형의 모서리 찾기

<시간/>

직사각형 ABCD가 있지만 중간점 P와 Q의 좌표와 직사각형 L의 길이만 있다고 가정합니다.

C++에서 중간점을 사용하여 사각형의 모서리 찾기

우리의 임무는 P와 Q의 좌표와 변 L의 길이를 사용하여 A, B, C 및 D의 좌표를 찾는 것입니다. 예를 들어, P가 (1, 0)이고 Q가 (1, 2)인 경우 , 그리고 L이 2이면 A, B, C, D는 각각 (0, 0), (0, 2), (2, 2)가 됩니다. (2, 0).

세 가지 경우가 발생할 수 있습니다.

  • 사각형은 수평이므로 AD와 BC는 X축에 평행합니다.
  • 사각형이 수직이므로 AD와 BC가 Y축에 평행합니다.
  • 직사각형은 축과 특정 각도로 기울어져 있습니다.

세 번째 경우에는 P와 Q의 좌표를 사용하여 기울기를 찾아야 합니다. AD의 기울기를 구하면 AD를 통과하는 직선 방정식을 생성할 수 있으며 거리 공식을 사용하여 결과를 얻을 수 있습니다.

AD의 $$기울기,m=\frac{px-qx}{py-qy}$$ $$Displacement\:along\:x\:axis, dx=\frac{L}{2\sqrt{1+m ^{2}}}$$ $$변위\:along\:y\:axis, dy=\frac{mL}{2\sqrt{1+m^{2}}}$$

#include <iostream>
#include <cmath>
using namespace std;
class Point {
   public:
      float x, y;
      Point(float a = 0.0f, float b = 0.0f) {
      x = a, y = b;
   }
};
void printCorners(Point p, Point q, float l) {
   Point a, b, c, d;
   if (p.x == q.x) {
      a.x = p.x - (l/2.0);
      d.x = p.x + (l/2.0);
      a.y = d.y = p.y;
      b.x = q.x - (l/2.0);
      c.x = q.x + (l/2.0);
      b.y = c.y = q.y;
   }else if (p.y == q.y) {
      a.y = p.y - (l/2.0);
      d.y = p.y + (l/2.0);
      a.x = d.x = p.x;
      b.y = q.y - (l/2.0);
      c.y = q.y + (l/2.0);
      b.x = c.x = q.x;
   }else{
      float m = (p.x-q.x)/float(q.y-p.y);
      float dx = (l /sqrt(1+(m*m))) *0.5 ;
      float dy = m*dx;
      a.x = p.x - dx;
      a.y = p.y - dy;
      d.x = p.x + dx;
      d.y = p.y + dy;
      b.x = q.x - dx;
      b.y = q.y - dy;
      c.x = q.x + dx;
      c.y = q.y + dy;
   }
   cout << "A (" << a.x << ", " << a.y << ")\n"
   << "B (" << b.x << ", " << b.y << ")\n"
   << "C (" << c.x << ", " << c.y << ")\n"
   << "D (" << d.x << ", " << d.y << ")\n";
}
int main() {
   Point p(1, 1), q(-1, -1);
   printCorners(p, q, 2*sqrt(2));
}

출력

A (0, 2)
B (-2, 0)
C (0, -2)
D (2, 0)