2012-04-21 2 views
0

enter image description here자바 : 어떤 크기 위

의 생성 타일 기반의 원은 지금 꽤 많은 시간 동안 생성하는 방법을 알아 내기 위해 노력 해왔다 패턴입니다. 필자는 원의 반경을 메서드에 입력하고 적절한 값을 가진 배열을 반환하려고합니다. (예 : 0 = 가장 어두움, 1 = 덜 어두움, 2 = 덜 어두움, 등)

내 문제는 어떻게 이것이 수학적으로 수행 될 수 있는지 전혀 모른다는 것입니다. 반경이 증가 할 때마다 경계 사각형의 가장자리가 더 많이 침식됩니다. 크기 3, 4, 5 등의 변경 사항에 명확한 패턴이 표시되지 않습니다. 누구든지 나를 도울 수 있습니까? 감사! 수단 (3) (X-2, Y-2) (X-2, Y-1), (X-1, Y-2

  • 반경 : 여기

    는 I 해낸 어떤 정보이며)는 왼쪽과 다른 모든 모퉁이에서 변경되지 않습니다. (x-3, y-2) (x-3, y-3) (x-2, y-2) (x-3, y- 3) 및 (x-1, y-3)은 좌측 및 다른 모든 코너에서 변경되지 않는다.
  • x 중심점 - (반경 -1) = 왼쪽, x 중심점 + (반경 -1) = 오른쪽
  • y 중심점 - (반경 -1) = 상단, y 중심점 - (반경 -1) = 아래쪽
+1

코드가있어? – Jeffrey

+0

원을 하나 그립니다. 4 분의 1로 잘라 버려. 그리고 내무반을 움직여 라. 일반적인 원을 그리는 알고리즘 (또는 내장 함수!)을 찾는 것이 더 간단합니다. –

+0

글쎄 그게, 내가 "그릴"수있는 원형과 데이터의 배열을 수 있어야합니다. 나는 사각형을 그린 다음 모퉁이를 자르는 방법에 대해 궁금합니다. – MrDrProfessorTyler

답변

2

이 질문은 매우 혼란 스럽 습니다만, 예를 들어 귀하의 예가 모두 원 모양처럼 보이지 않기 때문입니다. @pst는 정확하게 맞습니다. 오프 스크린 버퍼에 원을 그릴 수 있으며 출력용으로 사용할 수 있습니다. 예를 들어

,

import javax.swing.*; 
import java.awt.*; 
import java.awt.image.BufferedImage; 
import java.util.Arrays; 

/** 
* @author Nicholas Dunn 
* @date 4/21/12 
*/ 
public class CircleGridCreator { 

    /** 
    * 
    * @param radius 
    * @return 2 dimensional array in row major order, where entry is 0 if not part 
    * of circle, or 1 otherwise 
    */ 
    public static int[][] getGrid(int radius) { 
     if (radius < 0) { 
      throw new IllegalArgumentException("Invalid radius " + radius); 
     } 

     BufferedImage buffer = new BufferedImage(radius*2, radius*2, BufferedImage.TYPE_INT_RGB); 
     Color c = Color.BLUE; 
     Graphics2D context = buffer.createGraphics(); 
     context.setColor(c); 
     context.fillOval(0, 0, radius * 2, radius * 2); 

     int[][] results = new int[radius*2][radius*2]; 
     for (int row = 0; row < radius*2; row++) { 
      for (int col = 0; col < radius*2; col++) { 
       if (buffer.getRGB(col, row) == c.getRGB()) { 
        results[row][col] = 1; 
       } 
      } 
     } 
     return results; 
    } 

    public static void main(String[] args) { 
     for (int i = 1; i < 10; i++) { 

      int[][] grid = getGrid(i); 

      for (int[] row : grid) { 
       System.out.println(Arrays.toString(row)); 
      } 
     } 
    } 

} 

출력 :

[1, 1] 
[1, 1] 
[0, 1, 1, 1] 
[1, 1, 1, 1] 
[1, 1, 1, 1] 
[1, 1, 1, 1] 
[0, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1] 
[0, 0, 1, 1, 1, 1, 1, 0] 
[0, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1] 
[0, 1, 1, 1, 1, 1, 1, 1] 
[0, 0, 0, 1, 1, 1, 1, 1, 0, 0] 
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0] 
[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0] 
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0] 
[0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0] 
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0] 
[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0] 
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0] 
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0] 
[0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0] 
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0] 
[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0] 
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0] 
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0] 
[0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0] 
[0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0] 
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0] 
[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0] 
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0] 
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0] 
[0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0] 
+0

완벽하지는 않지만 당신을 가야합니다. – I82Much

+0

고마워요! – MrDrProfessorTyler