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

C++로 콘솔에 2D 도형 출력하기: 원, 사각형, 삼각형, 육각형 구현

C++로 2D 도형 출력하기

이번 튜토리얼에서는 C++를 사용해 콘솔 화면에 2D(2차원) 도형을 출력하는 프로그램을 만들어 보겠습니다.

프로그램에는 도형을 그리는 데 필요한 각종 매개변수(반지름, 가로·세로 길이, 한 변의 길이 등)가 주어집니다. 우리가 할 일은 이 값들을 바탕으로 두께 없는 테두리 형태의 도형을 화면에 출력하는 것입니다.

구현 아이디어

모든 도형은 '*' 문자와 공백 문자의 조합으로 그려집니다. 각 함수는 이중 반복문으로 행과 열을 순회하면서, 해당 좌표가 도형의 경계에 속할 때만 '*'를 출력하고 나머지 위치에는 공백을 출력합니다.

  • print_circle(): 각 좌표 (i, j)가 중심에서 떨어진 거리를 피타고라스 정리로 계산하고, 그 거리가 반지름 근처일 때만 '*'를 출력해 원의 테두리를 만듭니다.
  • print_rectangle(): 첫 번째 행, 마지막 행, 첫 번째 열, 마지막 열에 해당하는 경우에만 '*'를 출력해 사각형 테두리를 완성합니다.
  • print_triangle(): 공백으로 왼쪽 여백을 잡아 준 뒤, 마지막 행 또는 양쪽 끝 열에만 '*'를 찍어 정삼각형 모양을 만듭니다.
  • print_hexagon(): 위쪽 절반은 시작 위치(k)와 끝 위치(l)를 조절해 점점 넓히고, 아래쪽 절반은 반대로 좁혀 가며 육각형을 그립니다.

calc_pattern() 함수는 선택값(choice)에 따라 알맞은 도형 출력 함수를 호출합니다. main()에서 choice = 1을 전달했으므로 반지름이 4인 원이 출력됩니다.

예제 코드

#include <bits/stdc++.h>
using namespace std;

// 원 출력
void print_circle(int radius){
    for (int i = 0; i <= 2 * radius; i++){
        for (int j = 0; j <= 2 * radius; j++){
            double distance = sqrt((double)(i - radius) * (i - radius)
                + (j - radius) * (j - radius));
            if (distance > radius - 0.5 && distance < radius + 0.5)
                printf("*");
            else
                printf(" ");
        }
        printf("\n");
    }
}

// 사각형 출력
void print_rectangle(int l, int b){
    int i, j;
    for (i = 1; i <= l; i++){
        for (j = 1; j <= b; j++)
            if (i == 1 || i == l || j == 1 || j == b)
                printf("*");
            else
                printf(" ");
        printf("\n");
    }
}

// 삼각형 출력
void print_triangle(int side){
    int i, j;
    for (i = 1; i <= side; i++){
        for (j = i; j < side; j++)
            printf(" ");
        for (j = 1; j <= (2 * i - 1); j++){
            if (i == side || j == 1 || j == (2 * i - 1))
                printf("*");
            else
                printf(" ");
        }
        printf("\n");
    }
}

// 육각형 출력
void print_hexagon(int length){
    int l, j, i, k;
    // 육각형의 위쪽 절반
    for (i = 1, k = length, l = 2 * length - 1; i < length;
        i++, k--, l++){
        for (j = 0; j < 3 * length; j++)
            if (j >= k && j <= l)
                printf("*");
            else
                printf(" ");
        printf("\n");
    }
    // 육각형의 아래쪽 절반
    for (i = 0, k = 1, l = 3 * length - 2; i < length;
        i++, k++, l--){
        for (j = 0; j < 3 * length; j++)
            if (j >= k && j <= l)
                printf("*");
            else
                printf(" ");
        printf("\n");
    }
}

// 사용자의 선택에 따라 도형 결정
void calc_pattern(int choice){
    int radius, length, breadth, side;
    switch (choice){
        case 1:
            radius = 4;
            print_circle(radius);
            break;
        case 2:
            length = 3, breadth = 8;
            print_rectangle(length, breadth);
            break;
        case 3:
            side = 6;
            print_triangle(side);
            break;
        case 4:
            side = 4;
            print_hexagon(side);
            break;
        default:
            printf("Invalid choice\n");
    }
}

int main(){
    int choice = 1;
    calc_pattern(choice);
    return 0;
}

출력 결과

choice가 1이므로 반지름 4짜리 원이 다음과 같이 출력됩니다.

    *****
   **   **
  **     **
 *         *
 *         *
 *         *
  **     **
   **   **
    *****

마무리

이처럼 좌표 계산과 조건 분기를 활용하면 반복문만으로도 다양한 2D 도형을 콘솔에 그릴 수 있습니다. choice 값을 2, 3, 4로 바꿔 사각형, 삼각형, 육각형이 어떻게 출력되는지 직접 확인해 보시기 바랍니다.