advertisement
javaboutique
Search Tips
Articles  |   Tutorials  |   Reviews  |   Tools  |   by Category  |   by Date  |   by Name  |   Submit  |   Source  |   Forums  |  
javaboutique
Browse DevX


Partners & Affiliates











advertisement


The Mandelbrot Set


Java Source:

/* 
 * @(#)fractal.java - Fractal Program Mandelbrot Set 
 * www.eckhard-roessel.de
 * Copyright (c) Eckhard Roessel. All Rights Reserved.
 * 06/30/2000 - 03/29/2000
 */
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
/** 
 * @version 1.1
 * @author Eckhard Roessel
 * @modified 03/29/2001
 */
public class fractal extends Applet implements MouseListener, MouseMotionListener
{ 
	private final int MAX = 256;      // max iterations
	private final double SX = -2.025; // start value real
	private final double SY = -1.125; // start value imaginary
	private final double EX = 0.6;    // end value real
	private final double EY = 1.125;  // end value imaginary
	private static int x1, y1, xs, ys, xe, ye;
	private static double xstart, ystart, xende, yende, xzoom, yzoom;
	private static boolean action, rechteck, fertig;
	private static float xy;
	private Image bild;
	private Graphics g1;
	private Cursor c1, c2;

	public void init() // all instances will be prepared
	{
		fertig = false;
		addMouseListener(this);
		addMouseMotionListener(this);
		c1 = new Cursor(Cursor.WAIT_CURSOR);
		c2 = new Cursor(Cursor.CROSSHAIR_CURSOR);
		x1 = getSize().width;
		y1 = getSize().height;
		xy = (float)x1 / (float)y1;
		bild = createImage(x1, y1); 
		g1 = bild.getGraphics();
		fertig = true;
	}

	public void destroy() // delete all instances 
	{
		if (fertig)
		{
			removeMouseListener(this);
			removeMouseMotionListener(this);
			bild = null;
			g1 = null;
			c1 = null;
			c2 = null;
			System.gc(); // garbage collection
		}
	}

	public void start()
	{
		action = false;
		rechteck = false;
		startwerte();
		xzoom = (xende - xstart) / (double)x1;
		yzoom = (yende - ystart) / (double)y1;
		mandelbrot();
	}

	public void stop()
	{
	}
	
	public void paint(Graphics g)
	{
		update(g); 
	}
	
	public void update(Graphics g)
	{
		g.drawImage(bild, 0, 0, this);
		if (rechteck)
		{
			g.setColor(Color.white);
			if (xs < xe)
			{
				if (ys < ye) g.drawRect(xs, ys, (xe - xs), (ye - ys));
				else g.drawRect(xs, ye, (xe - xs), (ys - ye));
			}
			else
			{
				if (ys < ye) g.drawRect(xe, ys, (xs - xe), (ye - ys));
				else g.drawRect(xe, ye, (xs - xe), (ys - ye));
			}
		}
	}
	
	private void mandelbrot() // calculate all points
	{
		int x, y;
		float h, b, alt = 0.0f;
		
		action = false;
		setCursor(c1);
		showStatus("Mandelbrot-Set will be produced - please wait...");
		for (x = 0; x < x1; x+=2)
			for (y = 0; y < y1; y++)
			{
				h = punktfarbe(xstart + xzoom * (double)x, ystart + yzoom * (double)y); // color value
				if (h != alt)
				{
					b = 1.0f - h * h; // brightnes
					g1.setColor(Color.getHSBColor(h, 0.8f, b));
					alt = h;
				}           
				g1.drawLine(x, y, x + 1, y);
			}
		showStatus("Mandelbrot-Set ready - please select zoom area with pressed mouse.");
		setCursor(c2);
		action = true;
	}
	
	private float punktfarbe(double xwert, double ywert) // color value from 0.0 to 1.0 by iterations
	{
		double r = 0.0, i = 0.0, m = 0.0;
		int j = 0;
		
		while ((j < MAX) && (m < 4.0))
		{
			j++;
			m = r * r - i * i;
			i = 2.0 * r * i + ywert;
			r = m + xwert;
		}
		return (float)j / (float)MAX;
	}
	
	private void startwerte() // reset start values
	{
		xstart = SX;
		ystart = SY;
		xende = EX;
		yende = EY;
		if ((float)((xende - xstart) / (yende - ystart)) != xy ) 
			xstart = xende - (yende - ystart) * (double)xy;
	}

	public void mousePressed(MouseEvent e) 
	{
		e.consume();
		if (action)
		{
			xs = e.getX();
			ys = e.getY();
		}
	}
	
	public void mouseReleased(MouseEvent e)
	{
		int z, w;
		
		e.consume();
		if (action)
		{
			xe = e.getX();
			ye = e.getY();
			if (xs > xe)
			{
				z = xs;
				xs = xe;
				xe = z;
			}
			if (ys > ye)
			{
				z = ys;
				ys = ye;
				ye = z;
			}
			w = (xe - xs);
			z = (ye - ys);
			if ((w < 2) && (z < 2)) startwerte();
			else
			{
				if (((float)w > (float)z * xy)) ye = (int)((float)ys + (float)w / xy);
				else xe = (int)((float)xs + (float)z * xy);
				xende = xstart + xzoom * (double)xe;
				yende = ystart + yzoom * (double)ye;
				xstart += xzoom * (double)xs;
				ystart += yzoom * (double)ys;
			}
			xzoom = (xende - xstart) / (double)x1;
			yzoom = (yende - ystart) / (double)y1;
			mandelbrot();
			rechteck = false;
			repaint();
		}
	}

	public void mouseEntered(MouseEvent e)
	{
	}

	public void mouseExited(MouseEvent e)
	{
	}

	public void mouseClicked(MouseEvent e) 
	{
	}
	
	public void mouseDragged(MouseEvent e)
	{
		e.consume();
		if (action)
		{
			xe = e.getX();
			ye = e.getY();
			rechteck = true;
			repaint();
		}
	}
	
	public void mouseMoved(MouseEvent e)
	{
	}

	public String getAppletInfo()
	{
		return "fractal.class - Mandelbrot Set a Java Applet by Eckhard Roessel 2000-2001";
	}
}

Back to The Mandelbrot Set

How to Add Java Applets to Your Site

New on the Java Boutique:

New Review:

Time Management Made Easy with the Quartz Enterprise Job Scheduler
Why not just use the Java timer API? This open source scheduling API boasts simplicity, ease-of-integration, a well-rounded feature set, and it's free!

New Applet:

Reverse Complement
Reverse Complement is a simple applet that converts DNA or RNA sequences into three useful formats.

Elsewhere on internet.com:

WebDeveloper Java
Lots of Java information on webdeveloper.com

WDVL Java
Thorough Java resource at the Web Developer's Virtual Library.

ScriptSearch Java
Hundreds of free Java code files to download.

jGuru: Your View of the Java Universe
Customizable portal with online training, FAQs, regular news updates, and tutorials.

 Microsoft RIA Development Center
 IBM Rational Resource Center
 Destination .NET
XML error: not well-formed (invalid token) at line 33
advertisement
Receive Articles via our XML/RSS feed
Receive Articles via our XML/RSS feed

JavaBytes
Internet Cyclone
This powerful, easy-to-use, internet optimizer is for Windows 95, 98, ME, NT, 2000 and XP. It's designed to automatically optimize your Windows settings, boosting your Internet connection up to 200%.

Free VMware Server 2.0 Now Release Candidate
Linux Player Xandros Grabs Storied Rival Linspire
Hey Enterprise: Here Comes the 3G iPhone
MySpace Opens Profile Portability API
Microsoft Jumps Into Virtualization Fray
Eclipse Ganymede Makes It Easier for Devs
Open Source Nokia a Threat to Microsoft, Google?
Salesforce, Google Head for 2nd on Apps
HP Open Sources Unix File System for Linux
Red Hat Opens Its Network to Space

Build a Generic Histogram Generator for SQL Server
Beyond XML and JSON: YAML for Java Developers
Mastering the Windows Mobile Emulators
Avaya AE Services Provide Rapid Telephony Integration with Facebook
Featured Algorithm: Intel Threading Building Blocks: parallel_reduce
Getting Started with Windows Live Admin Center
Eight Key Practices for ASP.NET Deployment
Java ME User Interfaces: Do It with LWUIT!
Talking VPro: Transcript
Bringing Semantic Technology to the Enterprise

Advertising Info  |   Member Services  |   Contact Us  |   Help  |   Feedback  |   Site Map  |   Network Map  |   About



JupiterOnlineMedia

internet.comearthweb.comDevx.commediabistro.comGraphics.com

Search:

Jupitermedia Corporation has two divisions: Jupiterimages and JupiterOnlineMedia

Jupitermedia Corporate Info


Legal Notices, Licensing, Reprints, & Permissions, Privacy Policy.

Advertise | Newsletters | Tech Jobs | Shopping | E-mail Offers

Solutions
Whitepapers and eBooks
IBM eBook: Planning a Service Oriented Architecture
IBM eBook: Choosing the Right Architecture--What It Means for You and Your Business
Microsoft Article: Will Hyper-V Make VMware This Decade's Netscape?
Avaya Article: Using Intelligent Presence to Create Smarter Business Applications
Intel Go Parallel Article: Getting Started with TBB on Windows
Microsoft Article: 7.0, Microsoft's Lucky Version?
Avaya Article: How to Feed Data into the Avaya Event Processor
IBM Article: Developing a Software Policy for Your Organization
Microsoft Article: Managing Virtual Machines with Microsoft System Center
Intel Go Parallel Article: Intel Threading Tools and OpenMP
HP eBook: Storage Networking , Part 1
Microsoft Article: Solving Data Center Complexity with Microsoft System Center Configuration Manager 2007
MORE WHITEPAPERS, EBOOKS, AND ARTICLES
Webcasts
HP Video: StorageWorks EVA4400 and Oracle
HP Webcast: Storage Is Changing Fast - Be Ready or Be Left Behind
Microsoft Silverlight Video: Creating Fading Controls with Expression Design and Expression Blend 2
MORE WEBCASTS, PODCASTS, AND VIDEOS
Downloads and eKits
Red Gate Download: SQL Toolbelt and free High-Performance SQL Code eBook
Iron Speed Designer Application Generator
MORE DOWNLOADS, EKITS, AND FREE TRIALS
Tutorials and Demos
Silverlight 2 App and Walkthrough: Leverage Silverlight 2 with SQL Server and XML
IBM Article: Enterprise Search--Do You Know What's Out There?
HP Demo: StorageWorks EVA4400
Microsoft Article: The Progress and Promise of Deep Zoom
Microsoft How-to Article: Get Going with Silverlight and Windows Live
MORE TUTORIALS, DEMOS AND STEP-BY-STEP GUIDES