media @ VU
applet-math-fractal-henon-str.jva
applet-math-fractal-henon-str.jva
/ applet-math-fractal-henon-str
// Henon attractor, Evgeny Demidov, 27 June 2004
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import java.util.StringTokenizer;
public class applet-math-fractal-henon-str extends java.applet.Applet implements MouseListener,
MouseMotionListener{
double Ymid, Xmid, DelX=3., A=-1,B=0, Xo=0,Yo=0;
int MaxIt = 1000, N=0, w,h,w2,h2, pixArr[];
boolean showXY = true;
long generTime;
Image img; IndexColorModel iColor;
TextField tfXY;
public void init() {
String s=getParameter("XYmidDel"); if (s != null) {
StringTokenizer st = new StringTokenizer(s);
Xmid = Double.valueOf(st.nextToken()).doubleValue();
Ymid = Double.valueOf(st.nextToken()).doubleValue();
DelX = Double.valueOf(st.nextToken()).doubleValue();
A = Double.valueOf(st.nextToken()).doubleValue();
B = Double.valueOf(st.nextToken()).doubleValue();}
s=getParameter("MaxIt"); if (s != null) MaxIt=Integer.parseInt(s);
s=getParameter("N"); if (s != null) N=Integer.parseInt(s);
byte rColor[] = new byte[2], bColor[] = new byte[2],
gColor[] = new byte[2];
rColor[0] = gColor[0] = bColor[0] = (byte)255;
rColor[1] = gColor[1] = bColor[1] = 0;
iColor = new IndexColorModel( 8, 2, rColor,gColor,bColor);
w = getSize().width; h = getSize().height;
s=getParameter("showXY");
if ( (s != null) && (s.equalsIgnoreCase("N")) ) showXY = false;
else{
setLayout(new BorderLayout());
tfXY = new TextField( ""+Xmid+", "+Ymid+"; "+(float)DelX );
add("South", tfXY);
h -= tfXY.getPreferredSize().height;}
h2 = h/2; w2 = w/2;
pixArr = new int[w*h];
addMouseListener(this);
addMouseMotionListener(this);
Draw();
}
public void destroy() {
removeMouseListener(this);
removeMouseMotionListener(this); }
public void mouseClicked(MouseEvent e) {} //1.1 event handling
public void mousePressed(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {
Xmid = Xmid+(e.getX()-w/2)*DelX/w;
Ymid = Ymid-(e.getY()-h/2)*DelX/w;
if ( e.isControlDown() ) {
if ( e.isShiftDown() ) DelX *=4.; else DelX *=2.;}
else {
if ( e.isShiftDown() ) DelX /=4.; else DelX /=2.;}
if (showXY)
tfXY.setText( ""+(float)Xmid+", "+(float)Ymid+"; "+(float)DelX);
Draw();
repaint();
}
public void mouseMoved(MouseEvent e){} //1.1 event handling
public void mouseDragged(MouseEvent e) {}
public void paint(Graphics g) {
g.drawImage(img, 0, 0, this);
drawLabel(g);
showStatus( "T=" + generTime + " msec");
}
public void drawLabel(Graphics gra) {
double StZ=DelX/w;
gra.setColor(Color.blue);
int ix,iy;
String s=getParameter("sqrRID"); if (s != null) {
StringTokenizer st = new StringTokenizer(s);
double sqrRmid = Double.valueOf(st.nextToken()).doubleValue(),
sqrImid = Double.valueOf(st.nextToken()).doubleValue();
int sqr = (int)(Double.valueOf(st.nextToken()).doubleValue()/StZ);
if (sqr < 3000){
ix = (w - sqr)/2 + (int)((sqrRmid-Xmid)/StZ);
iy = (h - sqr)/2 + (int)((Ymid - sqrImid) /StZ);
gra.drawRect(ix,iy, sqr,sqr);}}
gra.setColor(Color.black);
gra.setFont(
new Font( gra.getFont().getName(), Font.BOLD, 15 ) );
int maxLabel=0;
while (true) {
s=getParameter("lb"+maxLabel);
if (s == null) break;
StringTokenizer st = new StringTokenizer(s);
double x=(Double.valueOf(st.nextToken()).doubleValue()-Xmid)/StZ,
y=(Ymid-Double.valueOf(st.nextToken()).doubleValue())/StZ;
if ( (Math.abs(x)<w)&&(Math.abs(y)<h) ){
ix = w/2+(int)x; iy = h/2+(int)y;
gra.drawString(st.nextToken(), ix,iy);}
maxLabel++; }
}
public void Draw(){
for (int it=0; it < w*h; it++) pixArr[it] = 0;
double X=Xo, X2=X*X, X1, Y=Yo, St = DelX/w;
int ix,iy;
generTime = System.currentTimeMillis();
for (int it=0; it <= MaxIt; it++){
X1 = A + X2 + B*Y; Y = X; X = X1; X2 = X*X;
ix = (int)((X - Xmid)/St) + w2;
iy = -(int)((Y - Ymid)/St) + h2;
//System.out.println(""+X +" "+Y+" "+it);
if ((ix >= 0)&&(ix < w)&&(iy >= 0)&&(iy < h)) pixArr[ix+iy*w] = 1;
}
img = createImage(new MemoryImageSource(w, h, iColor, pixArr, 0, w));
generTime = System.currentTimeMillis()-generTime;
}
}
(C) A. Eliëns
2/9/2007
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.