포스팅 OS : Mac

검색어 : 자바(Java), 배열(Array), 원(Circle), 피타고라스 정리(Pythagorean Theorem)




배열을 사용해 입력받은 정수에 따라 점점 커지는 원 그리는 방법에 대해 포스팅합니다.

여러가지 방법이 있지만 여기서는 피타고라스 정리를 사용하여 그려보겠습니다.


피타고라스 정리가 무엇인지 모르시는 분들을 위해 링크와 이미지를 올립니다.


피타고라스 정리 <-- 클릭!




자 그럼 바로 소스로 들어갑니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import java.util.Scanner;
 
public class Circle {
    public static void main(String[] args) {
        /* 원 그리기  */
 
        System.out.println("숫자를 입력해주세요.");
        Scanner input = new Scanner(System.in);
        
        int answer;                    // 입력받은 정수
        int heigt;                     // 총 세로 길이
        int width;                     // 총 가로 길이
        int top;                       // 상단
        int radius;                    // 반지름
        
        // 입력받은 정수 저장
        answer = input.nextInt();
        
        // 총 세로 길이 생성
        heigt = answer * 18;
        
        // 총 가로 길이 생성
        width = answer * 40;
        
        // 상단, 하단 종료 위치 지정
        top = heigt / 2;
        
        // 반지름
        radius = heigt / 2 + 1;
        
        
//        System.out.println("입력한 정수 : " + answer);     // 입력받은 정수
//        System.out.println("총 세로 길이 : " + heigt);     // 총 세로 길이
//        System.out.println("총 가로 길이 : " + width);     // 총 가로 길이
//        System.out.println("상단 : " + top);             // 상단
//        System.out.println("반지름 : " + radius);        // 반지름
        
        char[][] star = new char[heigt][width]; // 가공한 정수를 배열 생성에 사용
        
        int start = 0;            // 시작 지점 
        int end = 0;              // 종료 지점
        
        // 원 상단 생성
        for(int a = top; a > 0 ; a--){
            int bLine =(int) Math.round(Math.sqrt(Math.pow(radius - 12- Math.pow(a, 2)));  // 피타고라스 공식
            bLine = (bLine + 1* 2;                                                           // 가로 행의 중앙에서 양쪽으로 점을 찍어야 되는 거리
            
//            System.out.println(a+ "행의 길이는 " + bLine +" 입니다.");
            
            int realRow = Math.abs(a - top);       // 세로 행의 위치
            start = (width / 2- bLine;           // 가로 행의 시작 지점
            end = ((width / 2- 1+ bLine;       // 가로 행의 종료 지점
 
//            System.out.println("시작 : " + start +" / 종료 : " + end);
            
            // 배열에 원 상단 입력
            for(int b = 0 ; b < width ; b++){
                if(start <= b && b < end) {
                    star[realRow][b] = '*';
                }else {
                    star[realRow][b] = ' ';
                }
            }
        }        
        
        // 원 상단 출력
        for(int a = 0 ; a < top ; a++){
            for(int b=0 ; b < width ; b++){
                System.out.print(star[a][b]);
            }
            System.out.println();
        }
        // 원 하단 출력 (상단을 반전해서 출력)
        for(int a = top - 1 ; a >= 0 ; a--){ 
            for(int b=0 ; b < width ; b++){
                System.out.print(star[a][b]);
            }
            System.out.println();
        }
    }
}
cs



주석으로 상세하게 설명을 써놓았으니 한번 쭉 보시고 이해가 안되면 로그 찍어보시면 이해하시는데 도움이 될 것입니다.


위 소스를 실행하면 아래와 같이 원이 그려집니다.





+ Recent posts