반응형

C 언어, 별(*) 문자로 원 그리기 

 

글. 수알치 오상문 

 

이번에는 별 문자를 이용하여 원을 그리는 예제입니다. 

원의 공식은 다음과 같습니다. 

 

x = x 좌표 

y = y 좌표 

r = 원 반지름 

 

세 값이 다음을 만족하면 원을 구성하는 선입니다. 

 

x^2 + y^2 = r^2 (즉, x제곱 + y제곱이 반지름 제곱과 같은 위치가 출력 위치) 

 

그러므로 이 공식을 만족하는 위치에 별을 그려주면 원이 나타납니다. 

원 공식에 의해 만들어진 코드는 다음과 같습니다. 

그런데 문자 단위에서는 x축과 y축 비례가 다른데다가 해상도가 떨어지므로

원이 위 아래로 긴 타원처럼 보이고 일부 줄에서는 별이 나타나지도 않을 겁니다.

 

#include <stdio.h>

#define R 22

 

int main() {

  int x, y;

  for(x=-2*R; x<=2*R; x+=2) {

    for(y=-R; y<=R; y++) {

if((x*x + y*y) == R*R)

  printf("*");

else

  printf(" ");

    }

    printf("\n");

  }

  return 0;

}

 

텍스트 화면에 맞게 보정한 코드는 다음과 같습니다. 

앞 코드보다는 원이 더 명확하게 나타날 것입니다.

x 간격을 더 넓게 하고 그려줄 위치 범위 계산시 여유 값을 더 제공했습니다.

 

#include <stdio.h>

#define R 22

 

int main() {

  int x, y;

 

  for(x=-2*R; x<=2*R; x+=2) {

    for(y=-R; y<=R; y++) {

      if((x*x + y*y) >= R*R-R/1.3 && (x*x + y*y) <= R*R+R/1.3)  

        printf("*");

      else

        printf(" ");

    }

    printf("\n");

  }

  return 0;

}

 

 

 

 

[참고] 원 내부를 별로 채우려면 

출력 조건을 다음처럼 변경해보세요. 

 

  if((x*x + y*y) <= R*R)

    printf("*");

 

<이상> 

 

반응형

+ Recent posts