Files
eva2/src/javaeva/gui/TopoPlot.java
2007-12-11 16:38:11 +00:00

106 lines
3.8 KiB
Java

package javaeva.gui;
/*
* Title: JavaEvA
* Description:
* Copyright: Copyright (c) 2003
* Company: University of Tuebingen, Computer Architecture
* @author Holger Ulmer, Felix Streichert, Hannes Planatscher
* @version: $Revision: 306 $
* $Date: 2007-12-04 14:22:52 +0100 (Tue, 04 Dec 2007) $
* $Author: mkron $
*/
/*==========================================================================*
* IMPORTS
*==========================================================================*/
import wsi.ra.chart2d.*;
import java.awt.*;
import javaeva.server.go.problems.Interface2DBorderProblem;
import wsi.ra.diagram.ColorBarCalculator;
/*==========================================================================*
* CLASS DECLARATION
*==========================================================================*/
/**
*
*/
public class TopoPlot extends Plot {
public int gridx = 50;
public int gridy = 50;
int colorScale = ColorBarCalculator.BLUE_TO_RED;
/**
*
*/
public TopoPlot(String PlotName,String xname,String yname) {
super(PlotName, xname, yname);
//if (TRACE) System.out.println("Constructor TopoPlot "+PlotName);
}
public TopoPlot(String PlotName,String xname,String yname,double[] a, double[] b) {
super(PlotName, xname, yname, a, b);
//if (TRACE) System.out.println("Constructor TopoPlot "+PlotName);
}
/**
* Defines parameters used for drawing the topology.
* @param gridX the x-resolution of the topology, higher value means higher resolution
* @param gridY the y-resolution of the topology, higher value means higher resolution
* @param color_scale the topologies color coding. Values (0-3) are valid. @See ColorBarCalculator.
*/
public void setParams(int gridX, int gridY, int color_scale) {
if (gridX>m_Frame.getWidth())
gridX = m_Frame.getWidth();
if (gridY>m_Frame.getHeight())
gridY = m_Frame.getHeight();
gridx = gridX;
gridy = gridY;
colorScale = color_scale;
}
/**
* Defines the topology (by setting a specific problem) and draws the topology
*/
public void setTopology(Interface2DBorderProblem problem) {
double sizeX = java.lang.Math.abs( problem.get2DBorder()[0][1]-problem.get2DBorder()[0][0]);
double sizeY = java.lang.Math.abs( problem.get2DBorder()[1][1]-problem.get2DBorder()[1][0]);
double rx, ry;
double rw = sizeX/gridx;
double rh = sizeY/gridy;
double[] pos = new double[2];
//double fitRange = java.lang.Math.abs(problem.getMinFitness()-problem.getMaxFitness() );
double fitRange = 0, max = -Double.MAX_VALUE, min = Double.MAX_VALUE, tmp;
for (int x=0; x<gridx; x++) {
for (int y=0; y<gridy; y++) {
rx = problem.get2DBorder()[0][0]+x*rw;
ry = problem.get2DBorder()[1][0]+y*rh;
pos[0] = rx; pos[1] = ry;
tmp = (float)(problem.functionValue(pos));
if (tmp < min) min = tmp;
if (tmp > max) max = tmp;
} // for y
} // for x
fitRange = java.lang.Math.abs(max - min);
ColorBarCalculator colorBar = new ColorBarCalculator(colorScale);
m_Frame.setVisible(false);
for (int x=0; x<gridx; x++) {
for (int y=0; y<gridy; y++) {
rx = problem.get2DBorder()[0][0]+x*rw;
ry = problem.get2DBorder()[1][0]+y*rh;
pos[0] = rx; pos[1] = ry;
DRectangle rect = new DRectangle(rx,ry,rw,rh);
Color color = new Color(colorBar.getRGB((float)(problem.functionValue(pos)/fitRange))); // Color color = new Color(255,(int)(problem.doEvaluation(pos)[0]/fitRange*255),(int)(problem.doEvaluation(pos)[0]/fitRange*255));
rect.setColor(color);
rect.setFillColor(color);
m_PlotArea.addDElement(rect);
} // for y
} // for x
m_Frame.setVisible(true);
} // setTopology
} // class