用 Java繪圖一直都吸引著開發人員的注意
Draw
Draw
Draw
在本文中
具體的繪圖過程
步驟
顯然
清單
private ArrayList dataGenerator() {
double series
for(int i=
series containing 10,20,30,40,50
double series2[] = new double[9];
series2[0] = 20; series2[1] = 150; series2[2] = 5;
series2[3] = 90; series2[4] = 35; series2[5] = 20;
series2[6] = 150; series2[7] = 5; series2[8] = 45;
double series3[] = new double[7];
for(int i=0; i
seriesData.add(series1);
seriesData.add(series2);
seriesData.add(series3);
return seriesData;
}
步驟 2:縮放技術 —— 從給定的數據生成 X 坐標和 Y 坐標
一些新的術語
FigureCanvas
Draw2D 中的 FigureCanvas 是 SWT Canvas 的一個擴展。tw.WInGwiT.COMFigureCanvas 可以包含 Draw2D 圖形。
Panel
Panel 是 Draw2D 中的一個通用容器圖形,它可以包含子圖形。您可以向一個 Panel 圖形中添加許多圖形,然後將這個 Panel 圖形提供給 FigureCanvas。
DirectedGraph
DirectedGraph 是一個 2-D 圖形,擁有有限數量的 Node,每個 Node 都位於一些 Point 中,相鄰的 Node 是通過 Edges 彼此連接在一起的。
當您想繪制一架 2-D 飛機上的點時,必須找出每個點的 X 坐標和 Y 坐標。繪圖的奇妙之處在於能夠將某一個給定數據值從一個范圍按比例縮放到另一個范圍中,也就是說,如果給定一組值,如 {10,20,30},那麼您應該能夠確定 2-D 飛機上具體哪些點(X 坐標和 Y 坐標)表示的是 10、20 和 30 這些數據值。
繪制總是在按照某一個限定縮放比例進行的。換句話說,在同一限定區域內,可以繪制任意數量的點。因為該區域是固定的,所以您總是可以找到 X 坐標軸的跨度(長度)和 Y 坐標軸的跨度(高度)。X 坐標軸和 Y 坐標軸的跨度只是等式的一部分。另一部分是找出數據值的范圍,並根據每個數據值在新范圍內的等效值來計算這些值的坐標。
計算 X 坐標和 Y 坐標
X 坐標:X 坐標是某一個點距離原點的水平距離。計算元素的數量,然後將 X 坐標軸的跨度分成 n 個區段,其中,n 是給定集合中的元素的數量,通過這種方式,可以計算某一集合中的所有點的橫向坐標。用這種分割方法可以獲得每個區段的長度。集合中的第一個點位於等於區段長度的第一段距離內。後續的每個點則位於區段長度加上原點到前一個點的距離的那一段距離內。
例如,給出一個集合 {10,20,30,40},您立刻就可以知道要繪制 4 個點,因為集合中包含 4 個元素。所以,應該將 X 坐標軸的跨度分成 4 個相等的區段,每個區段的長度 = 跨度/4。因此,如果 X 坐標軸的跨度是 800,那麼區段的長度將是 800/4,即 200。第一個元素(10)的 X 坐標將是 200,第二個元素(20)的 X 坐標將是 400,依此類推。
清單 2. 計算 X 坐標
private int[] getXCoordinates(ArrayList seriesData){
int xSpan = (int)GraFixConstants.xSpan;
int longestSeries = Utilities.getLongestSeries(seriesData);
int numSegments =
((double[])seriesData.get(longestSeries)).length;
int sectionWidth =
(int)xSpan / numSegments; //want to divide span of xAxis
int xPositions[] =
new int[numSegments]; // will contain X-coordinate of all dots.
for(int i=0; i
(i+1)*sectionWidth;//dots spaced at distance of sectionWidth
}
return xPositions;
}
Y 坐標:Y 坐標是某一個點距離原點的縱向距離。計算 Y 坐標要將某一個值按比例從一個范圍縮放到另一個范圍。例如,給出相同的集合 {10,20,30,40},您可以看出,數據的范圍是 0 到 40,新的范圍就是 Y 坐標軸的跨度(高度)。假設 Y 坐標軸的高度為 400,那麼第一個元素(10)的高度將是100,第二個元素的高度將是 200,依此類推。
通過以下例子,您可以更好地理解如何按比例將一個值從一個范圍縮放到另一個范圍:假定一個范圍的跨度是從 0 到 2048,而您打算將該范圍內的任意值(比如說 1024)縮放到另一個從 0 到 100 的范圍內,那麼您立刻就可以知道,等刻度值是 50。該縮放所遵循的三值線算法是:
line 1---> 2048 / 1024 equals 2.
line 2---> 100 - 0 equals 100.
line 3--->
步驟
您還需要進行繪圖的地方
在擴展 Eclipse ViewPart 時
清單
public class MainGraFixView extends ViewPart{
public void createPartControl(Composite parent) {
//create or get data in an arraylist
ArrayList seriesData = dataGenerator();
//instantiate a plotter
DirectedGraphXYPlotter dgXYGraph = new DirectedGraphXYPlotter(parent);
dgXYGraph
dgXYGraph
}
public void setFocus() {
}
}
步驟
一旦擁有了數據以及想用來繪制圖形的區域
步驟
X
Direc
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26349.html