| | |
Drawing a spiral
Please support our Java advertiser: Programming Forums - DaniWeb Sister Site
![]() |
•
•
Join Date: Mar 2006
Posts: 131
Reputation:
Solved Threads: 0
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:
SpiralComponent:
Spiral Generator:
SpiralTester:
SpiralViewer:
Java Syntax (Toggle Plain Text)
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:
Java Syntax (Toggle Plain Text)
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:
Java Syntax (Toggle Plain Text)
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:
Java Syntax (Toggle Plain Text)
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"); } }
There are two different ways you can approach drawing the spiral.
1) Using GeneralPath to define the path from a fixed coordinate system in which you define the coordinates of the segments to be drawn on a fixed x-y plane.
2) Using coordinate transformations (translate, rotate) to alter the coodinate system as you draw each segment. With translation and rotation, drawing the path becomes trivial. You simply draw a line in a fixed direction (which ever way you want to go from your origin, like 0,0 to 0,100, translate to the end of that line, rotate 90 deg left or right, draw a slightly shorter line in the same direction as the first (perhaps 0,0 to 0,90), and continue until you reach the endpoint you want. By moving and rotating your origin as you draw, you only have to draw increasingly shorter line segments in the direction of path traversal.
There are some examples of using coordinate transforms here:
http://www.java2s.com/Code/Java/2D-G...ndRotation.htm
Hope that helps get you started.
1) Using GeneralPath to define the path from a fixed coordinate system in which you define the coordinates of the segments to be drawn on a fixed x-y plane.
2) Using coordinate transformations (translate, rotate) to alter the coodinate system as you draw each segment. With translation and rotation, drawing the path becomes trivial. You simply draw a line in a fixed direction (which ever way you want to go from your origin, like 0,0 to 0,100, translate to the end of that line, rotate 90 deg left or right, draw a slightly shorter line in the same direction as the first (perhaps 0,0 to 0,90), and continue until you reach the endpoint you want. By moving and rotating your origin as you draw, you only have to draw increasingly shorter line segments in the direction of path traversal.
There are some examples of using coordinate transforms here:
http://www.java2s.com/Code/Java/2D-G...ndRotation.htm
Hope that helps get you started.
![]() |
Similar Threads
- Angry Photoshop CS wont accept my drawing pad (Windows Software)
- AutoShapes/Drawing toolbar makes Word freeze up (Mac Software)
- drawing - stickman with array (C++)
- Drawing lines by click two points (Java)
- Word 2002 hogs CPU with Visio drawing embedded. (Windows NT / 2000 / XP)
Other Threads in the Java Forum
- Previous Thread: Please help me to explain these codes
- Next Thread: how to upload an audio file
| Thread Tools | Search this Thread |
911 actionlistener addressbook android api append applet application array arrays automation binary block bluetooth character chat class classes client code component consumer csv database desktop eclipse error fractal ftp game givemetehcodez graphics gui html ide image input integer j2me japplet java javaarraylist javac javaee javaprojects jmf jni jpanel julia linked linux list loop mac map method methods mobile netbeans newbie objects online oriented panel print printf problem program programming project projects properties recursion replaydirector reporting researchinmotion rotatetext rsa scanner screen se server set size sms sort sql string swing template test threads time title tree tutorial-sample ubuntu update windows working






