Нарисуйте пиксели в квадрате изнутри - Java - PullRequest
1 голос
/ 01 декабря 2010

alt text Я хочу нарисовать квадрат пикселей в зависимости от количества элементов в массиве. квадрат представляет количество массивов, поэтому маленькие квадраты представляют маленькие массивы, а большие квадраты представляют большие массивы. Мне трудно осмыслить, как я поступаю по этому поводу?

РЕДАКТИРОВАТЬ: я использую Java 2D.

Спираль начинается с 1 и затем продвигается против часовой стрелки к внешней стороне квадрата (то есть 2,3,4,5 и т. Д.) Каждый квадрат может быть представлен количеством данных, которые представляет этот квадрат.

1 Ответ

4 голосов
/ 01 декабря 2010
public class Test {

    enum Direction {
        Right,
        Up,
        Left,
        Down
    }

    public static void main(String... args) throws IOException {

        BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);

        int rgb = Color.BLACK.getRGB();

        Point p = new Point(50, 50);
        Direction d = Direction.Right;
        int currentSegmentLength = 1;


        for (int i = 0; i < 100; i += 2) {

            paintSegment(image, rgb, p, d, currentSegmentLength);
            d = nextSegmentDirection(d);

            paintSegment(image, rgb, p, d, currentSegmentLength);
            d = nextSegmentDirection(d);

            currentSegmentLength++;
        }


        ImageIO.write(image, "png", new File("test.png"));
    }

    private static void paintSegment(BufferedImage image, int rgb, Point p,
            Direction d, int currentSegmentLength) {

        for (int s = 0; s < currentSegmentLength; s++) {
            image.setRGB(p.x, p.y, rgb);

            switch (d) {
            case Right: p.x++; break;
            case Up:    p.y--; break;
            case Left:  p.x--; break;
            case Down:  p.y++; break;
            }
        }
    }

    private static Direction nextSegmentDirection(Direction d) {
        switch (d) {
        case Right: return Direction.Up;
        case Up:    return Direction.Left;
        case Left:  return Direction.Down;
        case Down:  return Direction.Right;

        default: throw new RuntimeException("never here");
        }
    }
}
...