import java.awt.*; import java.awt.Graphics.*; import java.math.*; abstract class Figure { int mX0, mY0; Color mColor = Color.red ; // default = red Figure(int x0, int y0) // constructor { mX0 = x0; mY0 = y0; } abstract void Draw(Graphics g); abstract boolean IsPointInFigure(int x, int y); } class Rectangle extends Figure { int mWidth, mHeight; Rectangle(int x0, int y0, int width, int height) { super(x0, y0); mWidth = width; mHeight = height; } void Draw(Graphics g) { g.setColor(mColor); g.drawOval(mX0-1, mY0-1, 1, 1); // middelpunt g.drawRect(mX0-mWidth/2, mY0-mHeight/2, mWidth, mHeight); } // nuttige functie boolean IsPointInFigure(int x, int y) { if ((x > (mX0 - mWidth/2)) && (x < (mX0 + mWidth/2)) && (y > (mY0 - mHeight/2)) && (y < (mY0 + mHeight/2))) return true; else return false; } } class Quadrangle extends Rectangle { int mSize; Quadrangle(int x0, int y0, int size) { super(x0, y0, size, size); mSize = size; } } class Circle extends Figure { int mRadius; Circle(int x0, int y0, int radius) { super(x0, y0); mRadius = radius; } void Draw(Graphics g) { g.setColor(mColor); g.drawOval(mX0-1, mY0-1, 1, 1); g.drawOval(mX0-mRadius, mY0-mRadius, 2*mRadius, 2*mRadius); } boolean IsPointInFigure(int x, int y) { if (Distance(x, y, mX0, mY0) < mRadius) return true; else return false; } // nuttige functie: int Distance(int x1, int y1, int x2, int y2) { double dist = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2); dist = Math.sqrt(dist); return (int) dist; } } class Triangle extends Figure { int mSize; Triangle(int x0, int y0, int size) { super(x0, y0); mSize = size; } void Draw(Graphics g) { g.setColor(mColor); g.drawOval(mX0, mY0, 1, 1); int x[] = new int[4]; int y[] = new int[4]; x[0] = (int)(mX0 - mSize * Math.cos(Math.PI/6)); y[0] = (int)(mY0 + mSize * Math.sin(Math.PI/6)); x[1] = mX0 ; y[1] = mY0 - mSize; x[2] = (int)(mX0 + mSize * Math.cos(Math.PI/6)); y[2] = (int)(mY0 + mSize * Math.sin(Math.PI/6)); x[3] = x[0]; y[3] = y[0]; g.drawPolygon(x, y, 4); } boolean IsPointInFigure(int x, int y) { // dit is niet echt correct if ((x > (mX0 - mSize/2)) && (x < (mX0 + mSize/2)) && (y > (mY0 - mSize/2)) && (y < (mY0 + mSize/2))) return true; else return false; } }