import java.awt.*; /** * THIS SOFTWARE IS PROVIDED AS-IS AND I CAN TAKE NO RESPONSIBILITY * FOR ANY INDIRECT DAMAGE INCURRED ON ANY MACHINE THIS IS RUN ON. IT * HAS BEEN FULLY TESTED TO ENSURE THAT NO SIDE EFFECTS WILL HARM YOUR * MACHINE IN ANY WAY. * * THIS SOURCE CODE IS FREE TO DISTRIBUTE UNDER THE 'GNU' LICENSE SO LONG * AS THIS HEADER IS ALWAYS ATTACHED TO IT AND YOU DONT MAKE ANY PROFIT * FROM ITS DISTRIBUTION. * * TOBY SKINNER * toby@hc2.co.uk */ public class Edge { private Point start = null; private Point end = null; private float alpha = 0.5f; private Color colour = Color.black; private float[] rgba = null; private double pheromone = 0.0; public Edge(Point p1, Point p2) { start = p1; end = p2; } public void setPheromone(double d) { pheromone = d; } public void setAlpha(float f) { if(f >= 0.0 && f <= 1.0) alpha = f; } public void setColor(float[] rgba) { colour = new Color(rgba[0], rgba[1], rgba[2]); this.rgba = rgba; alpha = rgba[3]; } public void setStartPoint(Point p1) { start = p1; } public void setEndPoint(Point p1) { end = p1; } public double getPheromone() { return(pheromone); } public Color getColor() { return(colour); } public Point getStartPoint() { return(start); } public Point getEndPoint() { return(end); } public Point getOther(Point p) { if(p == start) return(end); else return(start); } public boolean contains(Point p1, Point p2) { return((p1 == start || p1 == end) && (p2 == start || p2 == end)); } public boolean isStartOrEnd(Point p1) { return((p1 == start || p1 == end)); } /** * This is a shit method, it doesn't really work and I couldn't * be bothered to spend any more time on it. */ public void paint(Graphics g) { if(((rgba[0]+(float)pheromone) >= 0.0) && ((rgba[0]+(float)pheromone) <= 1.0)) { if(((rgba[1]+(float)pheromone) >= 0.0) && ((rgba[1]+(float)pheromone) <= 1.0)) { if(((rgba[2]+(float)pheromone) >= 0.0) && ((rgba[2]+(float)pheromone) <= 1.0)) { colour = new Color(rgba[0]-(float)pheromone, rgba[1]-(float)pheromone, rgba[2]-(float)pheromone); } } } g.setColor(colour); g.drawLine(getStartPoint().getX(), getStartPoint().getY(), getEndPoint().getX(), getEndPoint().getY()); if(pheromone > 0.1) { if(getStartPoint().getX() < getEndPoint().getX()) { if(getStartPoint().getY() < getEndPoint().getY()) { g.drawString((""+pheromone).toString().substring(0,3), getStartPoint().getX()+(Math.abs(getStartPoint().getX()-getEndPoint().getX())/2), getStartPoint().getY()+(Math.abs(getStartPoint().getY()-getEndPoint().getY())/2)); } else { g.drawString((""+pheromone).toString().substring(0,3), getStartPoint().getX()+(Math.abs(getStartPoint().getX()-getEndPoint().getX())/2), getEndPoint().getY()+(Math.abs(getStartPoint().getY()-getEndPoint().getY())/2)); } } else { if(getStartPoint().getY() < getEndPoint().getY()) { g.drawString((""+pheromone).toString().substring(0,3), getEndPoint().getX()+(Math.abs(getStartPoint().getX()-getEndPoint().getX())/2), getStartPoint().getY()+(Math.abs(getStartPoint().getY()-getEndPoint().getY())/2)); } else { g.drawString((""+pheromone).toString().substring(0,3), getEndPoint().getX()+(Math.abs(getStartPoint().getX()-getEndPoint().getX())/2), getEndPoint().getY()+(Math.abs(getStartPoint().getY()-getEndPoint().getY())/2)); } } } } }