programming-examples/java/Computer_Graphics/CurveDemo.java
2019-11-15 12:59:38 +01:00

131 lines
4.4 KiB
Java

import java.awt.*;
import java.awt.geom.*;
/**
* This class provides an example for drawing a line segment, a quadratic
* and a cubic curve. For illustration purposes, the initial, the end-
* and also control points are indicated by small squares.
* Furthermore, for the quadratic and cubic curve the tangents in the initial and the
* endpoint are also drawn.
*
* @author Frank Klawonn
* Last change 07.01.2005
*/
public class CurveDemo extends Frame
{
//Constructor
public CurveDemo()
{
//Enables the closing of the window.
addWindowListener(new MyFinishWindow());
}
public void paint(Graphics g)
{
Graphics2D g2d = (Graphics2D) g;
//Use of antialiasing to have nicer lines.
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
//The lines should have a thickness of 3.0 instead of 1.0.
BasicStroke bs = new BasicStroke(3.0f);
g2d.setStroke(bs);
//Coordinates for the line segment
int lx1 = 200;
int ly1 = 200;
int lx2 = 300;
int ly2 = 300;
//Generating and drawing the line segment
Line2D.Double line = new Line2D.Double(lx1,ly1,lx2,ly2);
g2d.draw(line);
//Mark the initial point in blue.
g2d.setPaint(Color.blue);
drawSmallSquare(lx1,ly1,g2d);
//Mark the endpoint in red.
g2d.setPaint(Color.red);
drawSmallSquare(lx2,ly2,g2d);
//Coordinates for the quadratic curve
int qcx1 = 300;
int qcy1 = 50;
int qcctrlx = 500;
int qcctrly = 500;
int qcx2 = 550;
int qcy2 = 100;
//Generate and draw the quadratic curve.
QuadCurve2D.Double qc = new QuadCurve2D.Double(qcx1,qcy1,qcctrlx,qcctrly,
qcx2,qcy2);
g2d.setPaint(Color.black);
g2d.draw(qc);
//Mark the initial point in blue.
g2d.setPaint(Color.blue);
drawSmallSquare(qcx1,qcy1,g2d);
//Draw the line connecting the initial point and the control point.
g2d.drawLine(qcx1,qcy1,qcctrlx,qcctrly);
//Mark the control point in green.
g2d.setPaint(Color.green);
drawSmallSquare(qcctrlx,qcctrly,g2d);
//Mark the endpoint in red.
g2d.setPaint(Color.red);
drawSmallSquare(qcx2,qcy2,g2d);
//Draw the line connecting the endpoint and the control point.
g2d.drawLine(qcx2,qcy2,qcctrlx,qcctrly);
//Coordinates for the cubic curve
int ccx1 = 100;
int ccy1 = 50;
int ccctrlx1 = 150;
int ccctrly1 = 100;
int ccctrlx2 = 50;
int ccctrly2 = 500;
int ccx2 = 100;
int ccy2 = 400;
//Generate and draw the cubic curve.
CubicCurve2D.Double cc = new CubicCurve2D.Double(ccx1,ccy1,
ccctrlx1,ccctrly1,
ccctrlx2,ccctrly2,
ccx2,ccy2);
g2d.setPaint(Color.black);
g2d.draw(cc);
//Mark the initial point in blue.
g2d.setPaint(Color.blue);
drawSmallSquare(ccx1,ccy1,g2d);
//Draw the line connecting the initial point and the first control point.
g2d.drawLine(ccx1,ccy1,ccctrlx1,ccctrly1);
//Mark the first control point in green.
g2d.setPaint(Color.green);
drawSmallSquare(ccctrlx1,ccctrly1,g2d);
//Mark the second control point in magenta.
g2d.setPaint(Color.magenta);
drawSmallSquare(ccctrlx2,ccctrly2,g2d);
//Mark the endpoint in red.
g2d.setPaint(Color.red);
drawSmallSquare(ccx2,ccy2,g2d);
//Draw the line connecting the end point and the control point.
g2d.drawLine(ccctrlx2,ccctrly2,ccx2,ccy2);
}
/**
* Draws a square with sides of length 4 around the centre (x,y).
*
* @param x x-coordinate of the centre
* @param y y-coordinate of the centre
* @param g2d Graphics2D object for drawing
*/
public static void drawSmallSquare(double x, double y, Graphics2D g2d)
{
Rectangle2D.Double rect = new Rectangle2D.Double(x-2,y-2,4,4);
g2d.fill(rect);
}
public static void main(String[] argv)
{
CurveDemo f = new CurveDemo();
f.setTitle("A cubic curve, a line segment and a quadratic curve");
f.setSize(600,600);
f.setVisible(true);
}
}