포스팅 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 - 1, 2) - 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 |
주석으로 상세하게 설명을 써놓았으니 한번 쭉 보시고 이해가 안되면 로그 찍어보시면 이해하시는데 도움이 될 것입니다.
위 소스를 실행하면 아래와 같이 원이 그려집니다.
'Developer > Java Basic' 카테고리의 다른 글
[Java] 배열을 사용해 입력받은 정수에 따라 점점 커지는 별 그리기 (0) | 2018.03.30 |
---|---|
[Java] 배열을 사용해 입력받은 정수에 따라 점점 커지는 마름모 그리기 (0) | 2018.03.13 |