This short tutorial will introduce some concepts of the JavaGeom Library. Basic shapes will be created, displayed, and intersected. They will be combined to create new shapes.
Basically, the library manipulates shapes, which are subclasses of the java Shape interface. Most shapes can be created by using direct constructors. For example points can be created directly by giving their coordinates, lines can be created through 2 points or by using static methods in the StraightLine2D class, circles are usually created from a point (the center) and a radius.
// Create some points Point2D p1 = new Point2D(40, 30); Point2D p2 = new Point2D(180, 120); Point2D p3 = new Point2D(20, 120); Point2D p4 = new Point2D(40, 140); // Create a circle Circle2D circle1 = new Circle2D(80, 120, 20); // Create an edge LineSegment2D edge1 = new LineSegment2D(p3, p4); // Create some lines StraightLine2D line1 = new StraightLine2D(p1, p2); StraightLine2D line2 = StraightLine2D.createMedian2D(p3, p4);
In the current version of the library, each shape in JavaGeom implements the java.awt.Shape interface. Most of them can be drawn directly to the current graphics object. Points are usually represented by circles to make them more visible.
// The graphics to draw on Graphics2D g2 = (Graphics2D) g; // Draw the points p1.draw(g2); p2.draw(g2); // Draw some shapes circle1.draw(g2); edge1.draw(g2);
Straight lines can not be drawn directly, as they are unbounded. The
clip make them drawable.
The argument is a bounding box, which
contains the max coordinates of the window in each direction.
//The clipping box Box2D box = new Box2D(0, 200, 0, 200); // Draw the lines line1.clip(box).draw(g2); line2.clip(box).draw(g2)
Straight lines or line segments provide a method to compute the intersection point with another straight object.
Point2D intLine = line2.getIntersection(line1); intLine.draw(g2);
For other shapes, there can be more than one intersection. All shapes provide a method to compute intersection with a straight line, which returns a collection of Point2D. It is easy to get the intersection points between a line and a circle, for example.
Collection<Point2D> intersects = circle1.getIntersections(line2); for(Point2D point : intersects) point.draw(g2);
Affine transforms allow easy transformation of the shapes. Transforms can be created using static methods in AffineTransform2D class, in a way similar to the java.awt.geom.AffineTransform class.
AffineTransform2D sca = AffineTransform2D.createScaling(p4, 2, .8); AffineTransform2D tra = AffineTransform2D.createTranslation(30, 40); AffineTransform2D rot = AffineTransform2D.createRotation(p4, Math.PI/2);
Each shape implements a 'transform' method, which returns the transformed shape. The type of the shape is computed automatically. Straight lines are still unbounded after transform, and need to be clipped.
The complete source code of the tutorial can be downloaded.