★ wanayoo — archive 1999 http://javaboutique.webdeveloper.com/Spiro/source.htmlNouvelle recherche | Portail wanayoo
internet.com logo The Java Boutique www.searchenginewatch.com
 APPLETS
by Category
by Date
by Name
Hall of Fame
Archive
Submit
Source Code
Servlets and JSP
 ARTICLES
Tutorials
Reviews
Glossary
 FORUM
FAQ
Users Poll
Discussion Group
Contact Us
 OTHER RESOURCES
Custom Applets
Java@Work
Java News
Jini Watch
Affiliate Programs
Top Searches
chat - counter
menu - countdown

Jobs.webdeveloper.com
internet.com
Internet News
Internet Stocks/VC
Internet Technology
Windows Internet Tech.
Linux/Open Source
Web Developer
ECommerce/Marketing
ISP Resources
ASP Resources
Wireless Internet
Downloads
Internet Resources
Internet Lists
International

Search internet.com
Advertising Info
Corporate Info

internet.commerce
Be a Commerce Partner
Free Conf. Calling
Advertise a Coupon
Find a Consultant
News to Your Desktop
Free virtual office
Get e-Biz Intell.
Continuing Education
Barter Service
Hosting Services
Free Search Engine

WebDeveloper Network
BrowserWatch
Developer Forums
Developer News
JavaBoutique
JavaScriptSource
ScriptSearch
SearchEngineWatch
StreamingMediaWorld
The WDVL
WebDeveloper.com
WebDevelopersJournal WebReference.com
The XML Files

Get in on the Ground Floor of Internet Publishing

Spiro


/*
	Spirograph Applet

	File: Spiro.java
	Author: Anu Garg <http://www.wordsmith.org/~anu/anu.html>
	Email:  anu@wordsmith.org

	A Spirograph is a curve defined by the equations:

	x = (R+r)*cos(t) - (r+O)*cos(((R+r)/r)*t)
	y = (R+r)*sin(t) - (r+O)*sin(((R+r)/r)*t)

	Where R and r are the radii of fixed and moving circle,
	and O is the offset in the moving circle.

*/

import java.awt.*;
import java.applet.*;
import java.lang.*;

//===========================Class: spiro=========================

public class Spiro extends Applet{

	private int R = 50, r = 10, O = 5;      // Radii
	private int I = 400;                    // Number of Iterations

	// Scrollbars for radii and I
	Scrollbar sliderR, sliderr, sliderO, sliderI;
	String sliderTextR = "Fixed circle radius (1-100): ";
	String sliderTextr = "Moving circle radius (1-100): ";
	String sliderTextO = "Moving circle offset (1-100): ";
	String sliderTextI = "Iterations (100-400): ";
	Label sliderLabelR, sliderLabelr, sliderLabelO, labelEmpty, sliderLabelI;
	// sliderLabelR = sliderTextR + string(R)

	Panel fields;

	// Scrollbars for colors
	Scrollbar redSlider,blueSlider,greenSlider;
	Label redLabel, greenLabel, blueLabel;
	private int redBits = 90, greenBits = 246, blueBits = 255;
	String sliderTextRed = "Red (0-255): ";
	String sliderTextGreen = "Green (0-255): ";
	String sliderTextBlue = "Blue (0-255): ";
	Panel colorPanel;

	Font font;
	Panel controlPanel;
	String audioScroll = "drip.au";
	String audioButton = "clink.au";

	// Get parameters (for radii, color, #iterations)
	public void getParams()
	{
		if(getParameter("R") !=  null)
		{
			R = new Integer(new String(getParameter("R"))).intValue();
			if(R < 1)
				R = 1;
			else if(R > 100)
				R = 100;
		}

		if(getParameter("smallr") !=  null)
		{
			r = new Integer(new String(getParameter("smallr"))).intValue();
			if(r < 1)
				r = 1;
			else if(r > 100)
				r = 100;
		}

		if(getParameter("O") !=  null)
		{
			O = new Integer(new String(getParameter("O"))).intValue();
			if(O < 1)
				O = 1;
			else if(O > 100)
				O = 100;
		}

		if(getParameter("redBits") !=  null)
		{
			redBits = new Integer(new String(getParameter("redBits"))).intValue();
			if(redBits < 0)
				redBits = 0;
			else if(redBits > 255)
				redBits = 255;
		}

		if(getParameter("greenBits") !=  null)
		{
			greenBits = new Integer(new String(getParameter("greenBits"))).intValue();
			if(greenBits < 0)
				greenBits = 0;
			else if(greenBits > 255)
				greenBits = 255;
		}

		if(getParameter("blueBits") !=  null)
		{
			blueBits = new Integer(new String(getParameter("blueBits"))).intValue();
			if(blueBits < 0)
				blueBits = 0;
			else if(blueBits > 255)
				blueBits = 255;
		}

		if(getParameter("I") !=  null)
		{
			I = new Integer(new String(getParameter("I"))).intValue();
			if(I < 100)
				I = 100;
			else if(I > 400)
				I = 400;
		}
	}

	public void init()
	{
		getParams();

		//setBackground(Color.gray);
		setForeground(Color.white);
		font = new Font("Helvetica", Font.BOLD, 12);
		setLayout(new BorderLayout());

		controlPanel = new Panel();
		controlPanel.setLayout(new GridLayout(15,1));
		add("East", controlPanel);

		sliderLabelR = new Label(sliderTextR + Integer.toString(R));
		controlPanel.add(sliderLabelR);
		sliderR = new Scrollbar(Scrollbar.HORIZONTAL, R, 1, 1, 100);
		controlPanel.add(sliderR);

		sliderLabelr = new Label(sliderTextr + Integer.toString(r));
		controlPanel.add(sliderLabelr);
		sliderr = new Scrollbar(Scrollbar.HORIZONTAL, r, 1, 1, 100);
		controlPanel.add(sliderr);

		sliderLabelO = new Label(sliderTextO + Integer.toString(O));
		controlPanel.add(sliderLabelO);
		sliderO = new Scrollbar(Scrollbar.HORIZONTAL, O, 1, 0, 100);
		controlPanel.add(sliderO);
 
		redLabel = new Label(sliderTextRed + Integer.toString(redBits));
		controlPanel.add(redLabel);
		redSlider = new Scrollbar(Scrollbar.HORIZONTAL, redBits, 1, 0, 255);
		controlPanel.add(redSlider);

		greenLabel = new Label(sliderTextGreen + Integer.toString(greenBits));
		controlPanel.add(greenLabel);
		greenSlider = new Scrollbar(Scrollbar.HORIZONTAL, greenBits, 1, 0, 255);
		controlPanel.add(greenSlider);

		blueLabel = new Label(sliderTextBlue + Integer.toString(blueBits));
		controlPanel.add(blueLabel);
		blueSlider = new Scrollbar(Scrollbar.HORIZONTAL, blueBits, 1, 0, 255);
		controlPanel.add(blueSlider);
 
		sliderLabelI = new Label(sliderTextI + Integer.toString(I));
		controlPanel.add(sliderLabelI);
		sliderI = new Scrollbar(Scrollbar.HORIZONTAL, I, 1, 100, 400);
		controlPanel.add(sliderI);

		controlPanel.add(new Button("Random"));
	}

	public boolean handleEvent(Event e)
	{
		if (e.target instanceof Scrollbar) {
			int value = ((Scrollbar)e.target).getValue();
			if (e.target == sliderR) {
				sliderLabelR.setText(sliderTextR + Integer.toString(value));
				R = value;
			} else if (e.target == sliderr) {
				sliderLabelr.setText(sliderTextr + Integer.toString(value));
				r = value;
			} else if (e.target == sliderO) {
				sliderLabelO.setText(sliderTextO + Integer.toString(value));
				O = value;
			} else if (e.target == redSlider) {
				redLabel.setText(sliderTextRed + Integer.toString(value));
				redBits=value;
			} else if (e.target == greenSlider) {
				greenLabel.setText(sliderTextGreen + Integer.toString(value));
				greenBits=value;
			} else if (e.target == blueSlider) {
				blueLabel.setText(sliderTextBlue + Integer.toString(value));
				blueBits=value;
			} else if (e.target == sliderI) {
				sliderLabelI.setText(sliderTextI + Integer.toString(value));
				I = value;
			}
			repaint();
			play(getDocumentBase(), audioScroll);
			return true;
		}
		return super.handleEvent(e);
	}

	public boolean action(Event e, Object arg)
	{
		if("Random".equals(arg)){
			R = (int)(Math.random()*100+1);
			r = (int)(Math.random()*100+1);
			O = (int)(Math.random()*r);
			sliderLabelR.setText(sliderTextR + Integer.toString(R));
			sliderLabelr.setText(sliderTextr + Integer.toString(r));
			sliderLabelO.setText(sliderTextO + Integer.toString(O));
			sliderR.setValue(R);
			sliderr.setValue(r);
			sliderO.setValue(O);

			redBits = (int)(Math.random()*255);
			blueBits = (int)(Math.random()*255);
			greenBits = (int)(Math.random()*255);
			redLabel.setText(sliderTextRed + Integer.toString(redBits));
			greenLabel.setText(sliderTextGreen + Integer.toString(greenBits));
			blueLabel.setText(sliderTextBlue + Integer.toString(blueBits));
			redSlider.setValue(redBits);
			greenSlider.setValue(greenBits);
			blueSlider.setValue(blueBits);

			play(getCodeBase(), audioButton);
			repaint();
			return true;
		}
		return true;
	}

	public void paint(Graphics g)
	{
		int x = 0;
		int y = 0;
		int prevx = 0;
		int prevy = 0;
		int t;

		int x1, y1, x2, y2;

		g.setFont(font);
		g.clipRect(0,0,300,300);

		g.setColor(new Color(redBits, greenBits, blueBits));

		for(t=0; t<=I; t++){
			prevx = x;
			prevy = y;
			x = (int)((R+r)*Math.cos((double)t) - (r+O)*Math.cos((double)(((R+r)/r)*t)));
			y = (int)((R+r)*Math.sin((double)t) - (r+O)*Math.sin((double)(((R+r)/r)*t)));

			if (t > 0){
				//g.drawLine(x+150, y+150, x+150, y+150);
				g.drawLine(prevx+150, prevy+150, x+150, y+150);
			}
		}
	}
}

Back to Spiro applet page


Applet Index
(sorted alphabetically)

A B C D E F G H I J K
L M N O P Q R S T U
V W X Y Z #s
The Java Source
(applets w/source code)

A B C D E F G H I J K
L M N O P Q R S T U
V W X Y Z

New on the Java Boutique:

New Article:
Servlets and JSP
In addition to applets, applications, servlets, and articles, we are now accepting submissions of JSP snippets! If you have a piece of JSP code that you think would be useful to others, then send it in!
... [Submissions]

New Tutorial:
Introduction to Java Part 6:
Building Your First Application
Selena Sol goes through all the Java code and HTML necessary to create a java application.
... [more Tutorials]

Year in Review:
The Best of 1999
Y2K has come and gone and now we have a chance to look back over the past year. In 1999 we posted over 250 applets, servlets, applications, and tools. In this list are the 24 most popular apps from 1999.
... [popular applets]

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
100s of free Java code files to download.



Exploring XML

Copyright 1999-2000 internet.com Corp.
All Rights Reserved. Legal Notices.