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

세 점이 한 직선 위에 있는지 확인하는 C++ 프로그램

이 글에서는 주어진 세 개의 점이 한 직선 위에 있는지(일직선상에 있는지) 판별하는 C++ 프로그램을 소개합니다.

판별 원리는 간단합니다. 세 점으로 삼각형을 만들었을 때 그 넓이가 0이라면, 세 점은 모두 한 직선 위에 있는 것입니다. 반대로 넓이가 0이 아니라면 세 점은 일직선상에 있지 않습니다.

세 점 (x1, y1), (x2, y2), (x3, y3)으로 만들 수 있는 삼각형의 넓이는 다음 공식으로 구합니다.

넓이 = 0.5 * (x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2))

알고리즘

시작
    세 점의 좌표를 무작위로 생성한다.
    위의 공식을 사용해 삼각형의 넓이를 계산한다.
    만약 넓이 > 0 이면
        세 점은 직선 위에 있지 않다.
    그렇지 않고 넓이 < 0 이면
        세 점은 직선 위에 있지 않다.
    그 외(넓이 = 0)의 경우
        세 점은 직선 위에 있다.
끝

예제 코드

#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;
static int L = 1;   // 좌표 생성 범위의 최솟값
static int U = 20;  // 좌표 생성 범위의 최댓값
int main(int argc, char **argv) {
    int x3, y3, x1, x2, y1, y2;
    time_t seconds;
    time(&seconds);
    srand((unsigned int) seconds);
    // rand() 함수를 이용해 세 점의 좌표를 무작위로 생성
    x1 = rand() % (U - L + 1) + L;
    y1 = rand() % (U - L + 1) + L;
    x2 = rand() % (U - L + 1) + L;
    y2 = rand() % (U - L + 1) + L;
    x3 = rand() % (U - L + 1) + L;
    y3 = rand() % (U - L + 1) + L;
    cout << "생성된 점: (" << x1 << ", " << y1 << "), (" << x2 << ", " << y2 << "), (" << x3 << ", " << y3 << ")\n";
    // 삼각형의 넓이 계산
    float a = 0.5 * (x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2));
    if (a != 0)
        cout << "세 점은 직선 위에 있지 않습니다.";
    else
        cout << "세 점은 직선 위에 있습니다.";
}

실행 결과

생성된 점: (20, 9), (6, 13), (13, 11)
세 점은 직선 위에 있습니다.

생성된 점: (9, 15), (4, 15), (11, 16)
세 점은 직선 위에 있지 않습니다.

코드에서는 srand()rand()를 사용해 1부터 20 사이의 정수 좌표를 무작위로 생성한 뒤, 앞서 설명한 넓이 공식을 적용합니다. 계산된 넓이가 0이 아니면 세 점이 일직선상에 있지 않다고 출력하고, 넓이가 정확히 0이면 세 점이 한 직선 위에 있다고 판단합니다.