Now we want generate a class that embodies the characteristics of a two-dimensional line segment or parametric line. This object includes instances of class Point objects. We have also modified the code in Point
// Line.java
// Definition of class Line (version 1)
import java.awt.Graphics;
/**
* Line describes a two-dimensional line.
*
* The line is defined by parametric equations
*
* x(u) = pa.x * (1-u) + pb.x * u;
* y(u) = pa.y * (1-u) + pb.y * u;
*/
public class Line {
public Point pa = new Point();
public Point pb = new Point();
public Line() { setLine(0,0,0,0); }
public Line(Point a, Point b) { setLine(a.x,a.y,b.x,b.y); }
public void setLine(double x1, double y1, double x2, double y2)
{
pa.setPoint(x1,y1);
pb.setPoint(x2,y2);
}
public Point getPoint(double u)
{
double up = 1.0-u;
double x = pa.x * up + pb.x * u;
double y = pa.y * up + pb.y * u;
return new Point(x,y);
}
public void draw(Graphics g)
{
g.drawLine(pa.nX(),pa.nY(),pb.nX(),pb.nY());
}
}
// Test2.java
import java.awt.*;
import javax.swing.*;
public class Test extends JApplet {
Point pt[];
Line seg[];
public void init()
{
pt = new Point[3];
pt[0] = new Point(0.1,0.1);
pt[1] = new Point(0.5, 0.8);
// use chainable methods setX() and setY()
pt[2] = new Point().setX(0.8).setY(0.1);
seg = new Line[3];
seg[0] = new Line(pt[0],pt[1]);
seg[1] = new Line(pt[1],pt[2]);
seg[2] = new Line(pt[2],pt[0]);
}
public void paint(Graphics g)
{
for (int i=0; i<seg.length; i++) seg[i].draw(g);
}
}
Maintained by John
Loomis, last updated 6 June 2000 Point class
getX() and getY() methods
nX() and nY() to access integer pixel values
setX() and setY()
// Point.java
// Definition of class Point (version 2)
import java.awt.Graphics;
/**
* Point describes a two-dimensional point.
*/
public class Point
{
static final double SCALE = 100;
public double x, y; // coordinates of the Point
// No-argument constructor
public Point() { setPoint( 0, 0 ); }
// Constructor
public Point( double a, double b ) { setPoint( a, b ); }
// Set x and y coordinates of Point
public void setPoint( double a, double b )
{
x = a;
y = b;
}
// get x pixel value
public int nX() { return (int)(x*SCALE); }
// get y pixel value
public int nY() { return (int)(y*SCALE); }
// set X coordinate
public Point setX(double a)
{
x = a;
return this;
}
// set Y coordinate
public Point setY(double b)
{
y = b;
return this;
}
// offset (translate) point by the amount (tx, ty)
public void offset(double tx, double ty)
{
x += tx;
y += ty;
}
public void draw(Graphics g)
{
int nx = nX();
int ny = nY();
g.fillOval(nx-5,ny-5,11,11);
}
// convert the point into a String representation
public String toString()
{ return " (" + x + ", " + y + ")"; }
}