1 23 24 package de.progra.charting.render; 25 26 import java.awt.geom.Line2D ; 27 import java.awt.geom.Point2D ; 28 import java.awt.geom.Area ; 29 import de.progra.charting.CoordSystem; 30 import java.awt.geom.AffineTransform ; 31 import de.progra.charting.PointToPixelTranslator; 32 import de.progra.charting.ChartUtilities; 33 import java.awt.Graphics2D ; 34 import java.awt.Color ; 35 import de.progra.charting.model.ChartDataModel; 36 37 42 public class InterpolationChartRenderer extends AbstractChartRenderer { 43 44 49 public InterpolationChartRenderer(CoordSystem cs, ChartDataModel model) { 50 super(cs, model); 51 } 52 53 56 public void renderChart(Graphics2D g) { 57 ChartDataModel m = getChartDataModel(); 58 RowColorModel rcm = getRowColorModel(); 59 AffineTransform yaxis1 = getTransform(CoordSystem.FIRST_YAXIS); 60 61 int datasetcount = m.getDataSetNumber(); 62 Point2D val; 63 Point2D paint = null; 64 Point2D oldpaint = null; 65 if(! m.isColumnNumeric()) 66 return; 67 68 for(int set = 0; set < datasetcount; set++) { 69 76 77 double[] x = new double[m.getDataSetLength(set)]; 78 double[] y = new double[x.length]; 79 80 for(int i = 0; i < m.getDataSetLength(set); i++) { 81 x[i] = ((Number )m.getColumnValueAt(set, i)).doubleValue(); 82 83 if(x[i] != x[i]) x[i] = 0.0; 85 86 y[i] = m.getValueAt(set, i).doubleValue(); 87 } 88 89 int AMOUNT = 2000; 90 double lowrange = m.getChartDataModelConstraints(CoordSystem.FIRST_YAXIS).getMinimumColumnValue(); 91 double hirange = m.getChartDataModelConstraints(CoordSystem.FIRST_YAXIS).getMaximumColumnValue(); 92 93 double xa[] = new double[AMOUNT]; 94 double ya[] = new double[AMOUNT]; 95 96 for(int i = 0; i < AMOUNT; i++) { 97 xa[i] = lowrange + i * (Math.abs(hirange - lowrange) / (double)AMOUNT); 98 ya[i] = ChartUtilities.interpolate(x, y, xa[i]); 99 } 100 101 for(int i = 0; i < AMOUNT; i++) { 103 104 val = new Point2D.Double (xa[i], ya[i]); 105 106 oldpaint = paint; 107 if(yaxis1.transform(val, null) != null) 108 paint = yaxis1.transform(val, paint); 109 else 110 continue; 111 112 g.setColor(rcm.getColor(set)); 113 114 115 if(oldpaint != null) { 116 117 g.drawLine((int)oldpaint.getX(), (int)oldpaint.getY(), 118 (int)paint.getX(), (int)paint.getY()); 119 } 120 } 121 oldpaint = null; 122 paint = null; 123 } 124 } 125 } 126 | Popular Tags |