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로 바꿔 사각형, 삼각형, 육각형이 어떻게 출력되는지 직접 확인해 보시기 바랍니다.