1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 | import java.awt.*;
import javax.swing.JFrame;
import lt.monarch.chart.chart3D.Chart3D;
import lt.monarch.chart.chart3D.engine.*;
import lt.monarch.chart.chart3D.engine.Sphere3D.SphereType;
import lt.monarch.chart.chart3D.series.*;
import lt.monarch.chart.engine.ChartObject;
import lt.monarch.chart.mapper.MathAxisMapper;
import lt.monarch.chart.marker.DotMarker3D;
import lt.monarch.chart.models.*;
import lt.monarch.chart.plugins.*;
import lt.monarch.chart.style.tags.VectorPaintTags;
import lt.monarch.chart.swing.JChartPanel;
import lt.monarch.chart.view.LabeledChart;
import lt.monarch.math.geom.Point3D;
public class Vector3DDemo extends JFrame
{
public Vector3DDemo ()
{
/*
* Creating the mapper
*/
MathAxisMapper zMapper = new MathAxisMapper(-30, 30);
MathAxisMapper xMapper = new MathAxisMapper(-30, 30);
MathAxisMapper yMapper = new MathAxisMapper(-10, 10);
/*
* Creating the data and chart datamodel
*/
ChartDataModel provider1 = createDataModel1();
ChartDataModel provider2 = createDataModel2();
ChartDataModel provider3 = createDataModel3();
/*
* Setting Line3D Series
*/
Line3DSeries series = new Line3DSeries(provider2, xMapper, yMapper, zMapper);
series.setStrategy(Line3DStrategies.SCATTER_STRATEGY);
series.getPaintStyle().setBackground(new Color(49, 119, 31));
Sphere3D sphere = new Sphere3D(SphereType.ICO_SPHERE);
sphere.setIterationCount(2);
DotMarker3D markerEarth = new DotMarker3D();
markerEarth.setShape(sphere);
((Scatter3DStrategy)series.getStrategy()).setScatterSize(0.08);
((Scatter3DStrategy)series.getStrategy()).setMarker(markerEarth);
/*
* Setting Line3D Series
*/
Line3DSeries series2 = new Line3DSeries(provider3, xMapper, yMapper, zMapper);
series2.setStrategy(Line3DStrategies.SCATTER_STRATEGY);
series2.getPaintStyle().setBackground(new Color(221, 158, 27));
sphere = new Sphere3D(SphereType.ICO_SPHERE);
sphere.setIterationCount(3);
DotMarker3D markerSun = new DotMarker3D();
markerSun.setShape(sphere);
((Scatter3DStrategy)series2.getStrategy()).setScatterSize(0.2);
((Scatter3DStrategy)series2.getStrategy()).setMarker(markerSun);
/*
* Setting Vector3D Series
*/
Vector3DSeries vector = new Vector3DSeries(provider1, xMapper, yMapper, zMapper);
vector.getPaintStyle().setBackground(VectorPaintTags.POLE, Color.LIGHT_GRAY);
vector.getPaintStyle().setBackground(VectorPaintTags.CONE, Color.GRAY);
vector.getPaintStyle().setForeground(null);
vector.setShowNullValues(true);
Vector3DStrategy strategy = (Vector3DStrategy)vector.getStrategy();
strategy.setPointCount(8);
strategy.setConeRadius(0.004d);
strategy.setPoleRadius(0.002d);
/*
* Creating the chart and adds objects
*/
Chart3D chart = new Chart3D();
chart.reset();
chart.setObjects(new ChartObject[] { vector, series, series2 });
chart.addPlugin(new ChartRotator());
chart.addPlugin(new ChartZoomer());
((Projector3D)chart.projector()).setElevationAngle(Math.toRadians(45));
((Projector3D)chart.projector()).setRotationAngle(Math.toRadians(-45));
/*
* Setting LabeledChart
*/
LabeledChart m_chart = new LabeledChart(chart);
m_chart.setTitle("Earth trajectory around the sun");
JChartPanel m_chartPanel = new JChartPanel(m_chart);
getContentPane().add(BorderLayout.CENTER, m_chartPanel);
}
private ChartDataModel createDataModel1()
{
ChartDataModel vectorModel1 = new ChartDataModel();
DataColumnType[] columnTypes = new DataColumnType[] { DataColumnType.KEY, DataColumnType.VALUE, DataColumnType.EXTENT, DataColumnType.EXTRA, DataColumnType.EXTRA2, DataColumnType.EXTRA3 };
Point3D p1 = null;
Point3D p2 = null;
for (double i = 10; i <= 350; i = i + 20)
{
p1 = calculateEllipseXZ(i);
i = i + 25;
p2 = calculateEllipseXZ(i);
vectorModel1.add(columnTypes, new Object[] { p1.x, p1.y, p1.z, p2.x, p2.y, p2.z });
}
return vectorModel1;
}
private ChartDataModel createDataModel2()
{
ChartDataModel scatterModel = new ChartDataModel();
DataColumnType[] columnTypes = new DataColumnType[] { DataColumnType.KEY, DataColumnType.VALUE, DataColumnType.EXTENT };
Point3D p1 = null;
for (double i = 0; i <= 270; i = i + 90)
{
p1 = calculateEllipseXZ(i);
scatterModel.add(columnTypes, new Object[] { p1.x, p1.y, p1.z });
}
return scatterModel;
}
private ChartDataModel createDataModel3()
{
ChartDataModel scatterModel = new ChartDataModel();
DataColumnType[] columnTypes = new DataColumnType[] { DataColumnType.KEY, DataColumnType.VALUE, DataColumnType.EXTENT };
scatterModel.add(columnTypes, new Object[] { 0, 0, 0 });
return scatterModel;
}
public Point3D calculateEllipseXY(double angle)
{
double a = 30;
double b = 20;
double x = a * Math.cos(Math.toRadians(angle));
double y = b * Math.sin(Math.toRadians(angle));
double z = 0d;
return new Point3D(x, y, z);
}
public Point3D calculateEllipseXZ(double angle)
{
double a = 30;
double b = 20;
double x = a * Math.cos(Math.toRadians(angle));
double z = b * Math.sin(Math.toRadians(angle));
double y = 0d;
return new Point3D(x, y, z);
}
public static void main(String[] args)
{
Vector3DDemo frame = new Vector3DDemo();
frame.setSize(new Dimension(600, 400));
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setTitle("Earth trajectory around the sun");
frame.setVisible(true);
}
} |