Technology and Open Source Update

Latest information about new technology and open source.

Posts Tagged ‘souce code’

Java: Koch Snowflakes Fractal source

Posted by megahacker136 on September 2, 2008

Source code:

import java.awt.*;
import javax.swing.*;

/*
* koch.java
*
* Created on August 17, 2008, 9:29 AM
*/
/**
*
* @author  Megahacker
*/
public class koch extends javax.swing.JFrame {

drawKoch draw = new drawKoch();
int nxt = 0;
int[] s = {600, 100, 50, 10, 5, 3, 2, 1};

/** Creates new form koch */
public koch() {
initComponents();
panel2.add(draw);
}

/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate=”collapsed” desc=”Generated Code”>//GEN-BEGIN:initComponents
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;

panel1 = new javax.swing.JPanel();
resetBtn = new javax.swing.JButton();
backBtn = new javax.swing.JButton();
nextBtn = new javax.swing.JButton();
panel2 = new javax.swing.JPanel();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle(“Koch Snowflakes Fractal”);
setResizable(false);

panel1.setLayout(new java.awt.GridBagLayout());

resetBtn.setText(“Reset”);
resetBtn.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
resetBtnActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
panel1.add(resetBtn, gridBagConstraints);

backBtn.setText(“Back”);
backBtn.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
backBtnActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
panel1.add(backBtn, gridBagConstraints);

nextBtn.setText(“Next”);
nextBtn.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
nextBtnActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 1;
panel1.add(nextBtn, gridBagConstraints);

getContentPane().add(panel1, java.awt.BorderLayout.CENTER);

panel2.setPreferredSize(new java.awt.Dimension(600, 600));
panel2.setLayout(new javax.swing.BoxLayout(panel2, javax.swing.BoxLayout.LINE_AXIS));
getContentPane().add(panel2, java.awt.BorderLayout.PAGE_START);

pack();
}// </editor-fold>//GEN-END:initComponents

private void resetBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_resetBtnActionPerformed
// TODO add your handling code here:
draw.size = 600;
draw.repaint();
}//GEN-LAST:event_resetBtnActionPerformed

private void nextBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nextBtnActionPerformed
// TODO add your handling code here:
nxt++;
draw.size = s[nxt];
draw.repaint();
int num = draw.size;
backBtn.setEnabled(true);
if (num == 1) {
nextBtn.setEnabled(false);
}
}//GEN-LAST:event_nextBtnActionPerformed

private void backBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_backBtnActionPerformed
// TODO add your handling code here:
nxt–;
draw.size = s[nxt];
draw.repaint();
int num = draw.size;
nextBtn.setEnabled(true);
if (num == 600) {
backBtn.setEnabled(false);
}
}//GEN-LAST:event_backBtnActionPerformed

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {
new koch().setVisible(true);
}
});
}

// Variables declaration – do not modify//GEN-BEGIN:variables
private javax.swing.JButton backBtn;
private javax.swing.JButton nextBtn;
private javax.swing.JPanel panel1;
private javax.swing.JPanel panel2;
private javax.swing.JButton resetBtn;
// End of variables declaration//GEN-END:variables
}

class drawKoch extends JPanel {

int size = 600;

public drawKoch() {
}

private koordinat mid(koordinat a, koordinat b) {
return new koordinat((a.x + b.x) / 2, (a.y + b.y) / 2);
}

private koordinat third(koordinat a, koordinat b) {
return new koordinat((b.x – a.x) / 3 + a.x, (b.y – a.y) / 3 + a.y);
}

private double dist(koordinat a, koordinat b) {
return Math.sqrt(Math.pow(b.x – a.x, 2) + Math.pow(b.y – a.y, 2));
}

private void drawKochSide(Graphics2D g2, koordinat a, koordinat b) {
if (dist(a, b) <= size) {
g2.drawLine((int) a.x, (int) a.y, (int) b.x, (int) b.y);
} else {
koordinat c = new koordinat(Math.cos(Math.PI / 3.0 + Math.atan2(b.y – a.y, b.x – a.x)) * (dist(a, b) / 3) + third(a, b).x,
Math.sin(Math.PI / 3.0 + Math.atan2(b.y – a.y, b.x – a.x)) * (dist(a, b) / 3) + third(a, b).y);
drawKochSide(g2, a, third(a, b));
drawKochSide(g2, third(a, b), c);
drawKochSide(g2, c, mid(third(a, b), b));
drawKochSide(g2, mid(third(a, b), b), b);
}
}

@Override
public void paintComponent(Graphics g) {
double w = getSize().getWidth();
double h = getSize().getHeight();

g.setColor(Color.BLACK);
g.fillRect(0, 0, (int) w, (int) h);
g.setColor(Color.YELLOW);
Graphics2D g2 = (Graphics2D) g;

double ox = 0.0, oy = 0.0;

if ((w * 2.0 * Math.sqrt(3.0)) < h * 3.0) {
h = (w * 2.0 * Math.sqrt(3.0)) / 3.0;
oy = (getSize().getHeight() – 1 – h) / 2.0;
}
if ((w * 2.0 * Math.sqrt(3.0)) > h * 3.0) {
w = (h * 3.0) / (2 * Math.sqrt(3.0));
ox = (getSize().getWidth() – 1 – w) / 2.0;
}
drawKochSide(g2, new koordinat(w / 2.0 + ox, oy), new koordinat(ox, h * 0.75 + oy));
drawKochSide(g2, new koordinat(w + ox, h * 0.75 + oy), new koordinat(w / 2.0 + ox, oy));
drawKochSide(g2, new koordinat(ox, h * 0.75 + oy), new koordinat(w + ox, h * 0.75 + oy));
}
}

class koordinat {

public double x,  y;

public koordinat(double x, double y) {
this.x = x;
this.y = y;
}
}

Output preview:

First stage

third stage

Posted in Open Source, Programing, Uncategorized | Tagged: , , | 1 Comment »