Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 세 점에서 평행사변형을 만드는 모든 가능한 좌표 구하기

문제 개요

주어진 세 개의 좌표를 이용해 넓이가 0이 아닌 평행사변형을 만들 수 있는 모든 네 번째 좌표를 찾는 것이 이 글의 목표입니다. 점 A, B, C가 주어졌을 때 평행사변형을 구성할 수 있는 경우는 다음의 세 가지뿐입니다.

  • AB와 AC가 두 변이 되고, BC가 대각선이 되는 경우
  • AB와 BC가 두 변이 되고, AC가 대각선이 되는 경우
  • BC와 AC가 두 변이 되고, AB가 대각선이 되는 경우

즉, 세 좌표만 주어져도 평행사변형을 완성할 수 있는 네 번째 좌표는 정확히 세 개 존재합니다. 평행사변형에서는 마주보는 두 변의 길이가 같으므로 AD = BC, AB = CD가 성립합니다. 이 성질을 이용하면 빠진 점 D의 좌표를 다음과 같이 계산할 수 있습니다.

(Dx - Ax, Dy - Ay) = (Cx - Bx, Cy - By)
Dx = Ax + Cx - Bx
Dy = Ay + Cy - By

C++ 예제 코드

#include <iostream>
using namespace std;

void printPoints(int ax, int ay, int bx, int by, int cx, int cy) {
    cout << ax + bx - cx << ", " << ay + by - cy << endl;
    cout << ax + cx - bx << ", " << ay + cy - by << endl;
    cout << cx + bx - ax << ", " << cy + by - ay << endl;
}

int main() {
    int ax = 5, ay = 0; // 점 A의 좌표
    int bx = 1, by = 1; // 점 B의 좌표
    int cx = 2, cy = 5; // 점 C의 좌표
    printPoints(ax, ay, bx, by, cx, cy);
    return 0;
}

실행 결과

4, -4
6, 4
-2, 6

결과 해석

각 출력값이 어느 경우에 해당하는 네 번째 점인지 살펴보면 다음과 같습니다.

  • (4, -4) = A + B - C : BC와 AC가 변이 되고 AB가 대각선일 때의 네 번째 점
  • (6, 4) = A + C - B : AB와 BC가 변이 되고 AC가 대각선일 때의 네 번째 점
  • (-2, 6) = B + C - A : AB와 AC가 변이 되고 BC가 대각선일 때의 네 번째 점

정리하면 네 번째 점 D는, 대각선이 되는 두 점의 좌표를 더한 값에서 나머지 한 점의 좌표를 빼면 구할 수 있습니다. 세 점 중 어느 두 점을 대각선으로 삼느냐에 따라 세 가지 답이 나오며, 세 점이 한 직선 위에 있지 않은 한 항상 넓이가 0이 아닌 평행사변형을 만들 수 있습니다.