Java를 사용하여 프로그램으로 Sida 그리기(PNG 생성)

전대미문의 레이더 그리기 열풍!?(^^;)
너도 자신이 잘하는 프로그래밍 언어로 SIDA를 그려봐!
이어서 Java(AWT) 버전 나는 자바로 PNG를 만드는 버전을 써 보았다.
실행하면 현재 디렉터리 (현재 폴더) 에서sida입니다.png이라는 파일을 생성합니다.
(잘못이나 의견이 있다면https://twitter.com/akmiyoshi

Sida.java
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.Random;
import javax.imageio.ImageIO;

public class Sida {

    static final int WIDTH = 500;
    static final int HEIGHT = 500;
    static final Random rnd = new Random();
    static final BufferedImage buffImage = new BufferedImage(WIDTH, HEIGHT,
            BufferedImage.TYPE_INT_BGR);
    static final Graphics2D graphics = buffImage.createGraphics();

    public static void main(String[] args) {
        graphics.setBackground(Color.DARK_GRAY);
        graphics.clearRect(0, 0, WIDTH, HEIGHT);
        f(20, 0, 0);
        try {
            ImageIO.write(buffImage, "png", new File("sida.png"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    static double W1x(double x, double y) {
        return 0.836 * x + 0.044 * y;
    }

    static double W1y(double x, double y) {
        return -0.044 * x + 0.836 * y + 0.169;
    }

    static double W2x(double x, double y) {
        return -0.141 * x + 0.302 * y;
    }

    static double W2y(double x, double y) {
        return 0.302 * x + 0.141 * y + 0.127;
    }

    static double W3x(double x, double y) {
        return 0.141 * x - 0.302 * y;
    }

    static double W3y(double x, double y) {
        return 0.302 * x + 0.141 * y + 0.169;
    }

    static double W4x(double x, double y) {
        return 0;
    }

    static double W4y(double x, double y) {
        return 0.175337 * y;
    }

    static void f(int k, double x, double y) {
        if (0 < k) {
            f(k - 1, W1x(x, y), W1y(x, y));
            if (rnd.nextDouble() < 0.3) {
                f(k - 1, W2x(x, y), W2y(x, y));
            }
            if (rnd.nextDouble() < 0.3) {
                f(k - 1, W3x(x, y), W3y(x, y));
            }
            if (rnd.nextDouble() < 0.3) {
                f(k - 1, W4x(x, y), W4y(x, y));
            }
        } else {
            plot((x * WIDTH * 0.98) + (WIDTH * 0.5), HEIGHT - (y * HEIGHT * 0.98));
        }
    }

    static void plot(double xd, double yd) {
        int x = (int) xd;
        int y = (int) yd;
        graphics.setPaint(Color.green);
        graphics.drawLine(x, y, x, y);
    }
}

좋은 웹페이지 즐겨찾기