Ok, so my goal is to draw a rectangular spiral in java. So far, I've created the Spiral Viewer class and the SpiralComponent but I'm not quite sure how I would implement the SpiralGenerator class. Here's what I have:
SpiralViewer:
import javax.swing.JFrame;
/**
Test driver for Spiral class.
*/
public class SpiralViewer
{
public static void main(String[] args)
{
JFrame frame = new JFrame();
final int FRAME_WIDTH = 400;
final int FRAME_HEIGHT = 400;
frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
frame.setTitle("SpiralViewer");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
SpiralComponent component = new SpiralComponent();
frame.add(component);
frame.setVisible(true);
}
}
SpiralComponent:
import javax.swing.JComponent;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Point2D;
import java.awt.geom.Line2D;
public class SpiralComponent extends JComponent
{
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
final int INITIAL_SIZE = 10;
int size = Math.min(getWidth(), getHeight());
SpiralGenerator gen = new SpiralGenerator(
INITIAL_SIZE,
new Point2D.Double(size / 2, size / 2));
while (true)
{
Line2D.Double segment = gen.nextSegment();
if (!segment.intersects(getBounds()))
return;
g2.draw(segment);
}
}
}
Spiral Generator:
import java.awt.geom.Point2D;
import java.awt.geom.Line2D;
public class SpiralGenerator
{
/**
Creates a spiral generator.
@param initialSize the size of the first (shortest) segment
of the spiral, in pixels
@param start the starting point of the spiral
*/
public SpiralGenerator(double initialSize, Point2D.Double start)
{
init = start;
size = initialSize;
}
/**
Returns the next segment of the spiral.
@return the next segment
*/
public Line2D.Double nextSegment()
{
Line2D.Double test = new Line2D.Double(0.0,0.0,0.0,0.0);
return test;
}
// private implementation
private double size;
private Point2D.Double init;
}
SpiralTester:
import java.awt.geom.Point2D;
import java.awt.geom.Line2D;
public class SpiralTester
{
public static void main(String[] args)
{
SpiralGenerator gen = new SpiralGenerator(10, new Point2D.Double(100, 100));
Line2D line = gen.nextSegment();
System.out.println(line.getX1());
System.out.println("Expected: 100");
System.out.println(line.getY1());
System.out.println("Expected: 100");
System.out.println(line.getX2());
System.out.println("Expected: 110");
System.out.println(line.getY2());
System.out.println("Expected: 100");
line = gen.nextSegment();
System.out.println(line.getX1());
System.out.println("Expected: 110");
System.out.println(line.getY1());
System.out.println("Expected: 100");
System.out.println(line.getX2());
System.out.println("Expected: 110");
System.out.println(line.getY2());
System.out.println("Expected: 90");
}
}