KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jfree > chart > demo > ContourPlotDemo2


1 /* ======================================
2  * JFreeChart : a free Java chart library
3  * ======================================
4  *
5  * Project Info: http://www.jfree.org/jfreechart/index.html
6  * Project Lead: David Gilbert (david.gilbert@object-refinery.com);
7  *
8  * (C) Copyright 2000-2003, by Object Refinery Limited and Contributors.
9  *
10  * This library is free software; you can redistribute it and/or modify it under the terms
11  * of the GNU Lesser General Public License as published by the Free Software Foundation;
12  * either version 2.1 of the License, or (at your option) any later version.
13  *
14  * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
15  * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16  * See the GNU Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public License along with this
19  * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
20  * Boston, MA 02111-1307, USA.
21  *
22  * ---------------------
23  * ContourPlotDemo2.java
24  * ---------------------
25  * (C) Copyright 2003, by David M. O'Donnell and Contributors.
26  *
27  * Original Author: David M. O'Donnell;
28  * Contributor(s): David Gilbert (for Object Refinery Limited);
29  *
30  * $Id: ContourPlotDemo2.java,v 1.13 2003/10/30 09:52:57 mungady Exp $
31  *
32  * Changes
33  * -------
34  * 22-Apr-2003 : Added standard header (DG);
35  *
36  */

37
38 package org.jfree.chart.demo;
39
40 import java.awt.Color JavaDoc;
41 import java.awt.Font JavaDoc;
42 import java.awt.GradientPaint JavaDoc;
43 import java.util.Date JavaDoc;
44
45 import org.jfree.chart.ChartPanel;
46 import org.jfree.chart.ClipPath;
47 import org.jfree.chart.JFreeChart;
48 import org.jfree.chart.annotations.XYTextAnnotation;
49 import org.jfree.chart.axis.ColorBar;
50 import org.jfree.chart.axis.DateAxis;
51 import org.jfree.chart.axis.LogarithmicAxis;
52 import org.jfree.chart.axis.NumberAxis;
53 import org.jfree.chart.axis.ValueAxis;
54 import org.jfree.chart.plot.ContourPlot;
55 import org.jfree.data.ContourDataset;
56 import org.jfree.data.DefaultContourDataset;
57 import org.jfree.data.NonGridContourDataset;
58 import org.jfree.ui.ApplicationFrame;
59 import org.jfree.ui.RefineryUtilities;
60
61 /**
62  * A demonstration application to illustrate ContourPlot.
63  * Command line options exist to control different plot properties
64  * such as colorbar orientation, etc. List of options are available
65  * by launching with the -? option, e.g., ContourPlotDemo -?
66  *
67  * @author DMO
68  */

69 public class ContourPlotDemo2 extends ApplicationFrame {
70
71     /** The x axis. */
72     private ValueAxis xAxis = null;
73
74     /** The y axis. */
75     private NumberAxis yAxis = null;
76     
77     /** The z axis. */
78     private ColorBar zColorBar = null;
79
80     /** A flag controlling the orientation of the z axis. */
81     //private static boolean zIsVertical = false;
82

83     /** A flag indicating whether or not the x-values are dates. */
84     private static boolean xIsDate = false;
85     
86     /** ??. */
87     private static boolean asPoints = false;
88
89     /** Logarithmic x-axis? */
90     private static boolean xIsLog = false;
91     
92     /** Logarithmic y axis? */
93     private static boolean yIsLog = false;
94     
95     /** Logarithmic z axis? */
96     private static boolean zIsLog = false;
97
98     /** Inverted x axis? */
99     private static boolean xIsInverted = true;
100     
101     /** Inverted y axis? */
102     private static boolean yIsInverted = false;
103     
104     /** Inverted z axis? */
105     private static boolean zIsInverted = false;
106
107     /** Annotate? */
108     private static boolean annotate = false;
109
110     /** Number of x intervals. */
111     private static int numX = 10;
112     
113     /** Number of y intervals. */
114     private static int numY = 20;
115
116     /** The plot ratio. */
117     private static double ratio = 0.0;
118
119     /** Temp data storage. */
120     private double[] tmpDoubleY = null;
121     
122     /** Temp data storage. */
123     private double[] tmpDoubleX = null;
124     
125     /** Temp data storage. */
126     private double[] tmpDoubleZ = null;
127
128     /** X outline. */
129     private double[] xOutline = null;
130
131     /** Y outline. */
132     private double[] yOutline = null;
133
134     /** Draw the outline? */
135     static boolean drawOutline = false;
136     
137     /** Fill the outline? */
138     static boolean fillOutline = false;
139     
140     /** ??. */
141     static int power = 4;
142
143     /**
144      * Constructs a new demonstration application.
145      *
146      * @param title the frame title.
147      */

148     public ContourPlotDemo2(String JavaDoc title) {
149
150         super(title);
151
152         JFreeChart chart = createContourPlot();
153         ChartPanel panel = new ChartPanel(chart, true, true, true, true, true);
154         panel.setPreferredSize(new java.awt.Dimension JavaDoc(1000, 800));
155         panel.setMaximumDrawHeight(100000); //stop chartpanel from scaling
156
panel.setMaximumDrawWidth(100000); //stop chartpanel from scaling
157
panel.setHorizontalZoom(true);
158         panel.setVerticalZoom(true);
159         panel.setFillZoomRectangle(true);
160         setContentPane(panel);
161
162     }
163
164     /**
165      * Creates a ContourPlot chart.
166      *
167      * @return the ContourPlot chart.
168      */

169     private JFreeChart createContourPlot() {
170
171         String JavaDoc title = "Contour Plot";
172         String JavaDoc xAxisLabel = "X Values";
173         String JavaDoc yAxisLabel = "Y Values";
174         String JavaDoc zAxisLabel = "Color Values";
175
176         if (xIsDate) {
177             xAxis = new DateAxis(xAxisLabel);
178             xIsLog = false; // force axis to be linear when displaying dates
179
}
180         else {
181             if (xIsLog) {
182                 xAxis = new LogarithmicAxis(xAxisLabel);
183             }
184             else {
185                 xAxis = new NumberAxis(xAxisLabel);
186             }
187         }
188
189         if (yIsLog) {
190             yAxis = new LogarithmicAxis(yAxisLabel);
191         }
192         else {
193             yAxis = new NumberAxis(yAxisLabel);
194         }
195
196         if (zIsLog) {
197             zColorBar = new ColorBar(zAxisLabel);
198         }
199         else {
200             zColorBar = new ColorBar(zAxisLabel);
201         }
202
203         if (xAxis instanceof NumberAxis) {
204             ((NumberAxis) xAxis).setAutoRangeIncludesZero(false);
205             ((NumberAxis) xAxis).setInverted(xIsInverted);
206         }
207
208         yAxis.setAutoRangeIncludesZero(false);
209
210         yAxis.setInverted(yIsInverted);
211
212         if (!xIsDate) {
213             ((NumberAxis) xAxis).setLowerMargin(0.0);
214             ((NumberAxis) xAxis).setUpperMargin(0.0);
215         }
216
217         yAxis.setLowerMargin(0.0);
218         yAxis.setUpperMargin(0.0);
219
220         if (!xIsDate) {
221             xAxis.setRange(10.5, 15.0);
222         }
223         yAxis.setRange(3.5, 7.0);
224
225         zColorBar.getAxis().setInverted(zIsInverted);
226         zColorBar.getAxis().setTickMarksVisible(true);
227
228         ContourDataset data = createDataset();
229
230         ContourPlot plot = new ContourPlot(data, xAxis, yAxis, zColorBar);
231
232         if (xIsDate) {
233             ratio = Math.abs(ratio); // don't use plot units for ratios when x axis is date
234
}
235         
236         if (asPoints) {
237             plot.setRenderAsPoints(true);
238         }
239         plot.setDataAreaRatio(ratio);
240
241
242         if (annotate) {
243             if (asPoints) {
244                 Number JavaDoc[] xValues = data.getXValues();
245                 Number JavaDoc[] yValues = data.getYValues();
246                 //Number[] zValues = data.getZValues();
247

248                 Font JavaDoc font = new Font JavaDoc("SansSerif", Font.PLAIN, 20);
249
250                 for (int i = 0; i < xValues.length; i++) {
251                     XYTextAnnotation xyAnn = new XYTextAnnotation(Integer.toString(i),
252                                                xValues[i].doubleValue(), yValues[i].doubleValue());
253                     xyAnn.setFont(font);
254                     plot.addAnnotation(xyAnn);
255                 }
256             }
257             else {
258                 Font JavaDoc font = new Font JavaDoc("SansSerif", Font.PLAIN, 20);
259
260                 for (int i = 0; i < tmpDoubleX.length; i++) {
261                     XYTextAnnotation xyAnn = new XYTextAnnotation(Integer.toString(i),
262                                                                   tmpDoubleX[i], tmpDoubleY[i]);
263                     xyAnn.setFont(font);
264                     plot.addAnnotation(xyAnn);
265                 }
266             }
267
268         }
269
270         if (fillOutline || drawOutline) {
271             initShoreline();
272             plot.setClipPath(new ClipPath(xOutline, yOutline, true, fillOutline, drawOutline));
273         }
274
275         JFreeChart chart = new JFreeChart(title, null, plot, false);
276
277         // then customise it a little...
278
chart.setBackgroundPaint(new GradientPaint JavaDoc(0, 0, Color.white, 0, 1000, Color.green));
279
280         return chart;
281
282     }
283
284     /**
285      * Creates a ContourDataset.
286      *
287      * @return ContourDataset.
288      */

289     private ContourDataset createDataset() {
290         initData();
291
292         Double JavaDoc[] oDoubleX = (Double JavaDoc[]) DefaultContourDataset.formObjectArray(tmpDoubleX);
293         Double JavaDoc[] oDoubleY = (Double JavaDoc[]) DefaultContourDataset.formObjectArray(tmpDoubleY);
294         Double JavaDoc[] oDoubleZ = (Double JavaDoc[]) DefaultContourDataset.formObjectArray(tmpDoubleZ);
295
296         Date JavaDoc[] tmpDateX = new Date JavaDoc[tmpDoubleX.length];
297         for (int i = 0; i < tmpDoubleX.length; i++) {
298             tmpDateX[i] = new Date JavaDoc((long) (1000.0 * tmpDoubleX[i]));
299         }
300
301         ContourDataset data = null;
302
303         if (xIsDate) {
304             if (asPoints) {
305                 data = new DefaultContourDataset("Contouring", tmpDateX, oDoubleY, oDoubleZ);
306             }
307             else {
308                 data = new NonGridContourDataset("Contouring", tmpDateX, oDoubleY, oDoubleZ);
309             }
310         }
311         else if (!asPoints) {
312             data = new NonGridContourDataset("Contouring", oDoubleX, oDoubleY, oDoubleZ,
313                                              numX, numY, power);
314         }
315         else {
316             data = new DefaultContourDataset("Contouring", oDoubleX, oDoubleY, oDoubleZ);
317         }
318         return data;
319
320     }
321
322     /**
323      * Sets options passed via the command line
324      *
325      * @param args the arguments.
326      *
327      * @return Flag indicating whether program should continue.
328      */

329     protected static boolean processArgs(String JavaDoc[] args) {
330         String JavaDoc[] options = {"-?", "-date", "-vertical", "-points", "-outline", "-filled", "-ratio:",
331                             "-numX:", "-numY:", "-power:", "-annotate"};
332
333         for (int i = 0; i < args.length; i++) {
334             boolean foundOption = false;
335             for (int j = 0; j < options.length; j++) {
336                 if (args[i].startsWith(options[j])) {
337                     foundOption = true;
338                     int index = 0;
339                     String JavaDoc tmpStr = null;
340                     switch (j) {
341                         case 0: // -?
342
usage();
343                             return false;
344                         case 1:
345                             xIsDate = true;
346                             break;
347                         case 2:
348                             //zIsVertical = true;
349
break;
350                         case 3:
351                             asPoints = true;
352                             break;
353                         case 4:
354                             drawOutline = true;
355                             break;
356                         case 5:
357                             fillOutline = true;
358                             break;
359                         case 6:
360                             index = args[i].indexOf(':');
361                             tmpStr = args[i].substring(index + 1);
362                             ratio = Double.parseDouble(tmpStr);
363                             break;
364                         case 7:
365                             index = args[i].indexOf(':');
366                             tmpStr = args[i].substring(index + 1);
367                             numX = Integer.parseInt(tmpStr);
368                             break;
369                         case 8:
370                             index = args[i].indexOf(':');
371                             tmpStr = args[i].substring(index + 1);
372                             numY = Integer.parseInt(tmpStr);
373                             break;
374                         case 9:
375                             index = args[i].indexOf(':');
376                             tmpStr = args[i].substring(index + 1);
377                             power = Integer.parseInt(tmpStr);
378                             break;
379                         case 10:
380                             annotate = true;
381                             break;
382                         default:
383                             System.out.println("Only 11 options available, update options array");
384                     }
385                 }
386             }
387             if (!foundOption) {
388                 System.out.println("Unknown option: " + args[i]);
389                 usage();
390                 return false;
391             }
392         }
393
394         return true; // continue running application
395
}
396
397     /**
398      * Prints usage options.
399      */

400     public static void usage() {
401         System.out.println("Usage:");
402         System.out.println("ContourPlotDemo2 -? -date -vertical -points -outline -filled "
403                            + "-ratio:value -numX:value -numY:value");
404         System.out.println("Where:");
405         System.out.println("-? displays usage and exits");
406         System.out.println("-date the X axis will be a date");
407         System.out.println("-vertical the colorbar will be drawn vertically");
408         System.out.println("-points demos plotting data as point (not grid)");
409         System.out.println("-outline draws shoreline outline and clips dataArea");
410         System.out.println("-filled fills shoreline and clips dataArea");
411         System.out.println("-ratio forces plot to maintain aspect ratio (Y/X) indicated by value");
412         System.out.println(" positive values are in pixels, while negative is in plot units");
413         System.out.println("-numX number of values to generate along the X axis");
414         System.out.println("-numY number of values to generate along the Y axis");
415     }
416
417     /**
418      * Starting point for the demonstration application.
419      *
420      * @param args command line options, launch ContourDemoPlot -? for listing of options.
421      */

422     public static void main(String JavaDoc[] args) {
423
424         if (!processArgs(args)) {
425             System.exit(1);
426         }
427         ContourPlotDemo2 demo = new ContourPlotDemo2("ContourPlot Demo");
428         demo.pack();
429         RefineryUtilities.centerFrameOnScreen(demo);
430         demo.setVisible(true);
431
432     }
433
434     /**
435      * Initialise data.
436      */

437     private void initData() {
438
439         double[] tmpDoubleYY = {
440             6.782, 6.79, 6.882, 6.289, 6.339,
441             6.426, 6.584, 5.532, 5.788, 5.922, 6.053, 4.008, 4.185, 4.456, 4.801, 4.779,
442             4.572, 5.202, 5.613, 5.893
443         }; //3.5,7}; // add values to fill entire lake surface
444

445         double[] tmpDoubleXX = {
446             14.508, 14.413, 14.329, 14.512, 14.284, 14.085, 13.793,
447             13.603, 13.492, 13.229, 12.956, 11.087, 11.062, 10.937, 11.169, 11.837, 12.182,
448             12.802, 12.782, 12.687
449         }; //10.5,15}; // add values to fill entire lake surface
450

451         double[] tmpDoubleZZ = {
452             2.03, 1.23, 0.86, 3.99, 2.38, 3, 3.08, 6.63, 6.84, 7.38,
453             6.99, 10.4, 11.11, 10.97, 11.22, 11.25, 10.68, 7.93, 8.17, 7.4
454         }; //12.0, 0.0}; // add values to fill entire lake surface
455

456         this.tmpDoubleY = new double[tmpDoubleYY.length];
457         this.tmpDoubleX = new double[tmpDoubleXX.length];
458         this.tmpDoubleZ = new double[tmpDoubleZZ.length];
459
460         for (int i = 0; i < tmpDoubleX.length; i++) {
461             this.tmpDoubleX[i] = tmpDoubleXX[i];
462             this.tmpDoubleY[i] = tmpDoubleYY[i];
463             this.tmpDoubleZ[i] = tmpDoubleZZ[i];
464         }
465     }
466
467     /**
468      * Initialise data.
469      */

470     private void initShoreline() {
471         double[] yyOutline = {6.93E+00, 6.91E+00, 6.90E+00, 6.88E+00, 6.86E+00,
472             6.85E+00, 6.83E+00, 6.85E+00, 6.86E+00, 6.88E+00, 6.90E+00, 6.90E+00, 6.90E+00,
473             6.89E+00, 6.88E+00, 6.86E+00, 6.84E+00, 6.83E+00, 6.81E+00, 6.79E+00, 6.78E+00,
474             6.76E+00, 6.74E+00, 6.73E+00, 6.71E+00, 6.69E+00, 6.68E+00, 6.66E+00, 6.64E+00,
475             6.63E+00, 6.61E+00, 6.59E+00, 6.58E+00, 6.56E+00, 6.54E+00, 6.53E+00, 6.52E+00,
476             6.50E+00, 6.49E+00, 6.47E+00, 6.45E+00, 6.44E+00, 6.42E+00, 6.40E+00, 6.39E+00,
477             6.37E+00, 6.35E+00, 6.34E+00, 6.32E+00, 6.30E+00, 6.29E+00, 6.27E+00, 6.25E+00,
478             6.24E+00, 6.22E+00, 6.20E+00, 6.19E+00, 6.17E+00, 6.15E+00, 6.14E+00, 6.12E+00,
479             6.10E+00, 6.08E+00, 6.07E+00, 6.05E+00, 6.04E+00, 6.02E+00, 6.00E+00, 5.98E+00,
480             5.97E+00, 5.95E+00, 5.93E+00, 5.92E+00, 5.90E+00, 5.88E+00, 5.87E+00, 5.85E+00,
481             5.83E+00, 5.82E+00, 5.80E+00, 5.78E+00, 5.77E+00, 5.76E+00, 5.74E+00, 5.73E+00,
482             5.71E+00, 5.70E+00, 5.68E+00, 5.66E+00, 5.65E+00, 5.63E+00, 5.62E+00, 5.60E+00,
483             5.59E+00, 5.59E+00, 5.57E+00, 5.56E+00, 5.54E+00, 5.52E+00, 5.51E+00, 5.49E+00,
484             5.47E+00, 5.46E+00, 5.44E+00, 5.42E+00, 5.41E+00, 5.39E+00, 5.37E+00, 5.36E+00,
485             5.34E+00, 5.34E+00, 5.33E+00, 5.32E+00, 5.31E+00, 5.30E+00, 5.30E+00, 5.30E+00,
486             5.29E+00, 5.29E+00, 5.29E+00, 5.29E+00, 5.29E+00, 5.30E+00, 5.31E+00, 5.32E+00,
487             5.34E+00, 5.35E+00, 5.36E+00, 5.36E+00, 5.38E+00, 5.39E+00, 5.40E+00, 5.42E+00,
488             5.42E+00, 5.42E+00, 5.42E+00, 5.42E+00, 5.42E+00, 5.41E+00, 5.41E+00, 5.41E+00,
489             5.40E+00, 5.38E+00, 5.37E+00, 5.35E+00, 5.33E+00, 5.32E+00, 5.30E+00, 5.28E+00,
490             5.27E+00, 5.25E+00, 5.23E+00, 5.22E+00, 5.21E+00, 5.19E+00, 5.17E+00, 5.16E+00,
491             5.14E+00, 5.12E+00, 5.11E+00, 5.09E+00, 5.07E+00, 5.06E+00, 5.06E+00, 5.05E+00,
492             5.04E+00, 5.04E+00, 5.03E+00, 5.02E+00, 5.00E+00, 4.99E+00, 4.97E+00, 4.95E+00,
493             4.93E+00, 4.92E+00, 4.91E+00, 4.90E+00, 4.89E+00, 4.87E+00, 4.86E+00, 4.84E+00,
494             4.82E+00, 4.80E+00, 4.79E+00, 4.77E+00, 4.75E+00, 4.74E+00, 4.72E+00, 4.70E+00,
495             4.69E+00, 4.67E+00, 4.65E+00, 4.64E+00, 4.62E+00, 4.60E+00, 4.58E+00, 4.57E+00,
496             4.55E+00, 4.54E+00, 4.52E+00, 4.50E+00, 4.49E+00, 4.47E+00, 4.46E+00, 4.44E+00,
497             4.42E+00, 4.41E+00, 4.39E+00, 4.38E+00, 4.37E+00, 4.36E+00, 4.34E+00, 4.32E+00,
498             4.31E+00, 4.29E+00, 4.27E+00, 4.26E+00, 4.25E+00, 4.24E+00, 4.22E+00, 4.21E+00,
499             4.19E+00, 4.18E+00, 4.17E+00, 4.15E+00, 4.14E+00, 4.12E+00, 4.10E+00, 4.08E+00,
500             4.07E+00, 4.05E+00, 4.04E+00, 4.02E+00, 4.01E+00, 4.01E+00, 4.01E+00, 4.00E+00,
501             4.00E+00, 4.00E+00, 3.99E+00, 3.99E+00, 3.98E+00, 3.98E+00, 3.97E+00, 3.97E+00,
502             3.97E+00, 3.96E+00, 3.96E+00, 3.94E+00, 3.93E+00, 3.91E+00, 3.90E+00, 3.89E+00,
503             3.89E+00, 3.88E+00, 3.86E+00, 3.85E+00, 3.84E+00, 3.83E+00, 3.82E+00, 3.80E+00,
504             3.79E+00, 3.77E+00, 3.75E+00, 3.74E+00, 3.72E+00, 3.71E+00, 3.69E+00, 3.69E+00,
505             3.69E+00, 3.69E+00, 3.69E+00, 3.69E+00, 3.71E+00, 3.72E+00, 3.72E+00, 3.74E+00,
506             3.75E+00, 3.77E+00, 3.78E+00, 3.80E+00, 3.81E+00, 3.83E+00, 3.85E+00, 3.86E+00,
507             3.88E+00, 3.90E+00, 3.91E+00, 3.93E+00, 3.95E+00, 3.96E+00, 3.98E+00, 4.00E+00,
508             4.01E+00, 4.03E+00, 4.04E+00, 4.06E+00, 4.08E+00, 4.09E+00, 4.11E+00, 4.13E+00,
509             4.14E+00, 4.16E+00, 4.18E+00, 4.19E+00, 4.21E+00, 4.23E+00, 4.24E+00, 4.26E+00,
510             4.28E+00, 4.29E+00, 4.31E+00, 4.33E+00, 4.34E+00, 4.36E+00, 4.38E+00, 4.39E+00,
511             4.41E+00, 4.43E+00, 4.44E+00, 4.46E+00, 4.48E+00, 4.49E+00, 4.51E+00, 4.53E+00,
512             4.54E+00, 4.56E+00, 4.58E+00, 4.59E+00, 4.61E+00, 4.62E+00, 4.64E+00, 4.66E+00,
513             4.67E+00, 4.69E+00, 4.70E+00, 4.72E+00, 4.73E+00, 4.75E+00, 4.76E+00, 4.78E+00,
514             4.79E+00, 4.81E+00, 4.82E+00, 4.83E+00, 4.84E+00, 4.86E+00, 4.87E+00, 4.88E+00,
515             4.90E+00, 4.91E+00, 4.93E+00, 4.94E+00, 4.95E+00, 4.97E+00, 4.98E+00, 5.00E+00,
516             5.01E+00, 5.02E+00, 5.04E+00, 5.06E+00, 5.07E+00, 5.09E+00, 5.10E+00, 5.12E+00,
517             5.14E+00, 5.15E+00, 5.17E+00, 5.19E+00, 5.20E+00, 5.22E+00, 5.24E+00, 5.25E+00,
518             5.27E+00, 5.29E+00, 5.30E+00, 5.32E+00, 5.34E+00, 5.36E+00, 5.37E+00, 5.39E+00,
519             5.41E+00, 5.42E+00, 5.44E+00, 5.45E+00, 5.47E+00, 5.48E+00, 5.50E+00, 5.51E+00,
520             5.52E+00, 5.54E+00, 5.55E+00, 5.57E+00, 5.58E+00, 5.60E+00, 5.61E+00, 5.63E+00,
521             5.65E+00, 5.66E+00, 5.68E+00, 5.69E+00, 5.70E+00, 5.71E+00, 5.73E+00, 5.74E+00,
522             5.76E+00, 5.75E+00, 5.75E+00, 5.76E+00, 5.77E+00, 5.79E+00, 5.80E+00, 5.82E+00,
523             5.84E+00, 5.85E+00, 5.87E+00, 5.88E+00, 5.90E+00, 5.91E+00, 5.93E+00, 5.94E+00,
524             5.96E+00, 5.97E+00, 5.99E+00, 5.99E+00, 6.00E+00, 6.00E+00, 5.98E+00, 5.98E+00,
525             5.97E+00, 5.98E+00, 6.00E+00, 5.98E+00, 5.98E+00, 6.00E+00, 6.02E+00, 6.03E+00,
526             6.05E+00, 6.06E+00, 6.07E+00, 6.07E+00, 6.06E+00, 6.04E+00, 6.03E+00, 6.01E+00,
527             6.03E+00, 6.04E+00, 6.06E+00, 6.08E+00, 6.09E+00, 6.10E+00, 6.11E+00, 6.13E+00,
528             6.13E+00, 6.14E+00, 6.15E+00, 6.16E+00, 6.17E+00, 6.18E+00, 6.18E+00, 6.18E+00,
529             6.19E+00, 6.21E+00, 6.22E+00, 6.23E+00, 6.24E+00, 6.25E+00, 6.25E+00, 6.26E+00,
530             6.27E+00, 6.29E+00, 6.31E+00, 6.32E+00, 6.34E+00, 6.35E+00, 6.36E+00, 6.38E+00,
531             6.39E+00, 6.41E+00, 6.43E+00, 6.45E+00, 6.46E+00, 6.48E+00, 6.49E+00, 6.51E+00,
532             6.52E+00, 6.54E+00, 6.55E+00, 6.56E+00, 6.57E+00, 6.59E+00, 6.60E+00, 6.62E+00,
533             6.63E+00, 6.65E+00, 6.66E+00, 6.67E+00, 6.69E+00, 6.70E+00, 6.72E+00, 6.73E+00,
534             6.75E+00, 6.76E+00, 6.77E+00, 6.79E+00, 6.80E+00, 6.81E+00, 6.83E+00, 6.83E+00,
535             6.85E+00, 6.86E+00, 6.87E+00, 6.88E+00, 6.88E+00, 6.89E+00, 6.90E+00, 6.90E+00,
536             6.91E+00, 6.91E+00, 6.91E+00, 6.90E+00, 6.91E+00, 6.92E+00, 6.92E+00, 6.93E+00,
537             6.93E+00, 6.93E+00, 6.91E+00, 6.90E+00, 6.88E+00, 6.87E+00, 6.88E+00, 6.90E+00,
538             6.90E+00, 6.92E+00, 6.94E+00, 6.95E+00, 6.96E+00};
539
540         double[] xxOutline = {1.46171E+01, 1.45984E+01, 1.45883E+01, 1.45818E+01,
541             1.45626E+01, 1.45435E+01, 1.45257E+01, 1.45462E+01, 1.45653E+01, 1.45854E+01,
542             1.46027E+01, 1.46256E+01, 1.46482E+01, 1.46707E+01, 1.46934E+01, 1.47161E+01,
543             1.47312E+01, 1.47494E+01, 1.47604E+01, 1.47746E+01, 1.47856E+01, 1.47939E+01,
544             1.48040E+01, 1.48141E+01, 1.48175E+01, 1.48199E+01, 1.48247E+01, 1.48244E+01,
545             1.48255E+01, 1.48258E+01, 1.48215E+01, 1.48172E+01, 1.48084E+01, 1.47978E+01,
546             1.47836E+01, 1.47604E+01, 1.47376E+01, 1.47193E+01, 1.47142E+01, 1.47117E+01,
547             1.47074E+01, 1.47017E+01, 1.46952E+01, 1.46828E+01, 1.46722E+01, 1.46621E+01,
548             1.46461E+01, 1.46378E+01, 1.46313E+01, 1.46252E+01, 1.46186E+01, 1.46013E+01,
549             1.45813E+01, 1.45770E+01, 1.45736E+01, 1.45725E+01, 1.45632E+01, 1.45513E+01,
550             1.45470E+01, 1.45391E+01, 1.45335E+01, 1.45152E+01, 1.44961E+01, 1.44738E+01,
551             1.44619E+01, 1.44387E+01, 1.44209E+01, 1.44031E+01, 1.43934E+01, 1.43847E+01,
552             1.43768E+01, 1.43698E+01, 1.43628E+01, 1.43500E+01, 1.43353E+01, 1.43148E+01,
553             1.43029E+01, 1.42950E+01, 1.42826E+01, 1.42694E+01, 1.42633E+01, 1.42409E+01,
554             1.42222E+01, 1.42017E+01, 1.41789E+01, 1.41566E+01, 1.41406E+01, 1.41336E+01,
555             1.41249E+01, 1.41174E+01, 1.41050E+01, 1.40822E+01, 1.40599E+01, 1.40371E+01,
556             1.40146E+01, 1.40009E+01, 1.39939E+01, 1.39878E+01, 1.39777E+01, 1.39662E+01,
557             1.39525E+01, 1.39306E+01, 1.39156E+01, 1.39023E+01, 1.38917E+01, 1.38806E+01,
558             1.38692E+01, 1.38586E+01, 1.38412E+01, 1.38189E+01, 1.37965E+01, 1.37741E+01,
559             1.37509E+01, 1.37280E+01, 1.37047E+01, 1.36809E+01, 1.36580E+01, 1.36351E+01,
560             1.36126E+01, 1.35896E+01, 1.35667E+01, 1.35437E+01, 1.35207E+01, 1.34981E+01,
561             1.34781E+01, 1.34716E+01, 1.34480E+01, 1.34250E+01, 1.34015E+01, 1.33788E+01,
562             1.33561E+01, 1.33335E+01, 1.33099E+01, 1.32865E+01, 1.32631E+01, 1.32406E+01,
563             1.32176E+01, 1.31952E+01, 1.31727E+01, 1.31503E+01, 1.31278E+01, 1.31054E+01,
564             1.31042E+01, 1.31121E+01, 1.31155E+01, 1.31301E+01, 1.31393E+01, 1.31449E+01,
565             1.31510E+01, 1.31494E+01, 1.31465E+01, 1.31426E+01, 1.31202E+01, 1.31070E+01,
566             1.30968E+01, 1.30835E+01, 1.30640E+01, 1.30547E+01, 1.30558E+01, 1.30479E+01,
567             1.30297E+01, 1.30115E+01, 1.29891E+01, 1.29667E+01, 1.29442E+01, 1.29205E+01,
568             1.28972E+01, 1.28748E+01, 1.28520E+01, 1.28337E+01, 1.28173E+01, 1.27973E+01,
569             1.27880E+01, 1.27757E+01, 1.27534E+01, 1.27310E+01, 1.27086E+01, 1.26863E+01,
570             1.26635E+01, 1.26412E+01, 1.26212E+01, 1.26115E+01, 1.26054E+01, 1.25980E+01,
571             1.25933E+01, 1.25813E+01, 1.25717E+01, 1.25584E+01, 1.25460E+01, 1.25345E+01,
572             1.25239E+01, 1.25205E+01, 1.25140E+01, 1.25061E+01, 1.25000E+01, 1.24971E+01,
573             1.24937E+01, 1.24791E+01, 1.24662E+01, 1.24511E+01, 1.24284E+01, 1.24061E+01,
574             1.23874E+01, 1.23804E+01, 1.23739E+01, 1.23723E+01, 1.23720E+01, 1.23628E+01,
575             1.23395E+01, 1.23171E+01, 1.23015E+01, 1.22964E+01, 1.23105E+01, 1.23121E+01,
576             1.23010E+01, 1.22837E+01, 1.22614E+01, 1.22382E+01, 1.22153E+01, 1.21931E+01,
577             1.21707E+01, 1.21480E+01, 1.21252E+01, 1.21024E+01, 1.20805E+01, 1.20713E+01,
578             1.20513E+01, 1.20294E+01, 1.20103E+01, 1.19939E+01, 1.19711E+01, 1.19488E+01,
579             1.19265E+01, 1.19041E+01, 1.18817E+01, 1.18592E+01, 1.18368E+01, 1.18143E+01,
580             1.17905E+01, 1.17680E+01, 1.17443E+01, 1.17218E+01, 1.16989E+01, 1.16756E+01,
581             1.16527E+01, 1.16302E+01, 1.16078E+01, 1.15849E+01, 1.15720E+01, 1.15808E+01,
582             1.15576E+01, 1.15343E+01, 1.15119E+01, 1.14891E+01, 1.14667E+01, 1.14443E+01,
583             1.14202E+01, 1.13969E+01, 1.13745E+01, 1.13517E+01, 1.13349E+01, 1.13324E+01,
584             1.13267E+01, 1.13198E+01, 1.13110E+01, 1.12886E+01, 1.12663E+01, 1.12467E+01,
585             1.12239E+01, 1.12000E+01, 1.11761E+01, 1.11527E+01, 1.11297E+01, 1.11070E+01,
586             1.10831E+01, 1.10605E+01, 1.10378E+01, 1.10142E+01, 1.09969E+01, 1.09733E+01,
587             1.09507E+01, 1.09320E+01, 1.09129E+01, 1.08996E+01, 1.08899E+01, 1.08803E+01,
588             1.08625E+01, 1.08398E+01, 1.08207E+01, 1.08083E+01, 1.07928E+01, 1.07836E+01,
589             1.07717E+01, 1.07503E+01, 1.07357E+01, 1.07126E+01, 1.06989E+01, 1.07027E+01,
590             1.06908E+01, 1.06807E+01, 1.06764E+01, 1.06767E+01, 1.06832E+01, 1.06974E+01,
591             1.06976E+01, 1.06902E+01, 1.06904E+01, 1.06970E+01, 1.07013E+01, 1.06911E+01,
592             1.06878E+01, 1.06763E+01, 1.06734E+01, 1.06723E+01, 1.06734E+01, 1.06701E+01,
593             1.06690E+01, 1.06597E+01, 1.06519E+01, 1.06467E+01, 1.06379E+01, 1.06224E+01,
594             1.06213E+01, 1.06279E+01, 1.06339E+01, 1.06378E+01, 1.06448E+01, 1.06607E+01,
595             1.06830E+01, 1.07058E+01, 1.07214E+01, 1.07419E+01, 1.07587E+01, 1.07815E+01,
596             1.08011E+01, 1.08234E+01, 1.08448E+01, 1.08675E+01, 1.08903E+01, 1.09126E+01,
597             1.09349E+01, 1.09581E+01, 1.09805E+01, 1.10033E+01, 1.10261E+01, 1.10484E+01,
598             1.10716E+01, 1.10939E+01, 1.11172E+01, 1.11400E+01, 1.11600E+01, 1.11823E+01,
599             1.12046E+01, 1.12270E+01, 1.12493E+01, 1.12702E+01, 1.12930E+01, 1.13153E+01,
600             1.13377E+01, 1.13609E+01, 1.13805E+01, 1.14009E+01, 1.14233E+01, 1.14438E+01,
601             1.14620E+01, 1.14784E+01, 1.14944E+01, 1.15162E+01, 1.15318E+01, 1.15460E+01,
602             1.15584E+01, 1.15703E+01, 1.15804E+01, 1.15897E+01, 1.16020E+01, 1.16099E+01,
603             1.16178E+01, 1.16230E+01, 1.16349E+01, 1.16446E+01, 1.16498E+01, 1.16577E+01,
604             1.16777E+01, 1.17005E+01, 1.17232E+01, 1.17455E+01, 1.17678E+01, 1.17906E+01,
605             1.18116E+01, 1.18339E+01, 1.18562E+01, 1.18786E+01, 1.18999E+01, 1.19227E+01,
606             1.19450E+01, 1.19678E+01, 1.19856E+01, 1.20024E+01, 1.20166E+01, 1.20304E+01,
607             1.20531E+01, 1.20755E+01, 1.20984E+01, 1.21207E+01, 1.21344E+01, 1.21567E+01,
608             1.21793E+01, 1.22023E+01, 1.22247E+01, 1.22470E+01, 1.22652E+01, 1.22740E+01,
609             1.22941E+01, 1.23042E+01, 1.23265E+01, 1.23488E+01, 1.23716E+01, 1.23939E+01,
610             1.24162E+01, 1.24394E+01, 1.24612E+01, 1.24844E+01, 1.25067E+01, 1.25300E+01,
611             1.25524E+01, 1.25753E+01, 1.25983E+01, 1.26209E+01, 1.26434E+01, 1.26504E+01,
612             1.26434E+01, 1.26549E+01, 1.26443E+01, 1.26214E+01, 1.26045E+01, 1.25962E+01,
613             1.25978E+01, 1.26201E+01, 1.26425E+01, 1.26653E+01, 1.26877E+01, 1.27086E+01,
614             1.27147E+01, 1.27189E+01, 1.27074E+01, 1.27180E+01, 1.27277E+01, 1.27383E+01,
615             1.27498E+01, 1.27707E+01, 1.27931E+01, 1.28155E+01, 1.28382E+01, 1.28611E+01,
616             1.28835E+01, 1.29059E+01, 1.29287E+01, 1.29510E+01, 1.29743E+01, 1.29968E+01,
617             1.30207E+01, 1.30440E+01, 1.30640E+01, 1.30836E+01, 1.31068E+01, 1.31302E+01,
618             1.31531E+01, 1.31764E+01, 1.31997E+01, 1.32220E+01, 1.32443E+01, 1.32576E+01,
619             1.32695E+01, 1.32873E+01, 1.33105E+01, 1.33329E+01, 1.33552E+01, 1.33784E+01,
620             1.33944E+01, 1.34113E+01, 1.34344E+01, 1.34568E+01, 1.34781E+01, 1.35004E+01,
621             1.35228E+01, 1.35415E+01, 1.35610E+01, 1.35834E+01, 1.36058E+01, 1.36282E+01,
622             1.36450E+01, 1.36583E+01, 1.36806E+01, 1.37030E+01, 1.37239E+01, 1.37472E+01,
623             1.37695E+01, 1.37864E+01, 1.38092E+01, 1.38328E+01, 1.38538E+01, 1.38761E+01,
624             1.38984E+01, 1.39212E+01, 1.39449E+01, 1.39672E+01, 1.39913E+01, 1.40141E+01,
625             1.40365E+01, 1.40589E+01, 1.40816E+01, 1.41049E+01, 1.41273E+01, 1.41502E+01,
626             1.41725E+01, 1.41950E+01, 1.42179E+01, 1.42408E+01, 1.42637E+01, 1.42889E+01,
627             1.43115E+01, 1.43339E+01, 1.43563E+01, 1.43787E+01, 1.44021E+01, 1.44245E+01,
628             1.44475E+01, 1.44702E+01, 1.44924E+01, 1.44868E+01, 1.44644E+01, 1.44868E+01,
629             1.45073E+01, 1.45297E+01, 1.45515E+01, 1.45662E+01, 1.45885E+01, 1.45938E+01};
630
631
632         this.xOutline = new double[xxOutline.length];
633         this.yOutline = new double[yyOutline.length];
634
635         for (int i = 0; i < xOutline.length; i++) {
636             this.xOutline[i] = xxOutline[i];
637             this.yOutline[i] = yyOutline[i];
638         }
639     }
640
641 }
642
Popular Tags